首页 > 解决方案 > 函数不返回转换后的变量类型

问题描述

我有一个任务,并创建了一个名为的函数,它根据步长的数量cycle_convert(variable, n)转换 a 的类型。我在 Python 中有以下固定的类型顺序:int → float → bool → string → complexvariablen

例如,我有变量number = 10,并使用我的函数cycle_convert(number, 2)将类型从 a 更改int为 a bool。它也适用于环绕和负步长。

我有完成这些任务的代码,但是在返回变量时,即使函数对其进行了转换,转换后的类型似乎也没有返回,并且变量number仍然是int. 我的代码如下:

def cycle_convert(x, n=1):
    if type(x) == int:
        num = 1
    elif type(x) == float:
        num = 2
    elif type(x) == bool:
        num = 3
    elif type(x) == str:
        num = 4
    elif type(x) == complex:
        num = 5
    prev_type = type(x)

    final_num = num + n
    while final_num not in range(1,6):
        if final_num <1:
            final_num = 5 + final_num
        if final_num >5:
            final_num = final_num - 5

    if final_num == 1:
        x = int(x)
    elif final_num == 2:
        x = float(x)
    elif final_num == 3:
        x = bool(x)
    elif final_num == 4:
        x = str(x)
    elif final_num == 5:
        x = complex(x)
    print('Your variable type has been changed from ', prev_type, 'to ', type(x), ': ')
    return x


number = 10
cycle_convert(number, 2)

谁能向我解释为什么 return 函数在这种情况下不起作用?

谢谢

标签: pythonfunctionif-statement

解决方案


我相信这个问题是一个错字。您正在定义您的函数来接受一个参数,并且p的默认值 = 1。但是稍后,在您的函数中,您正在评估一个变量,这意味着无论何时调用函数时传递的参数都不会生效。这应该有效:nnxp

def cycle_convert(x, n=1):
    if type(x) == int:
        num = 1
    elif type(x) == float:
        num = 2
    elif type(x) == bool:
        num = 3
    elif type(x) == str:
        num = 4
    elif type(x) == complex:
        num = 5
    prev_type = type(x)

    final_num = num + n
    while final_num not in range(1,6):
        if final_num <1:
            final_num = 5 + final_num
        if final_num >5:
            final_num = final_num - 5

    if final_num == 1:
        x = int(x)
    elif final_num == 2:
        x = float(x)
    elif final_num == 3:
        x = bool(x)
    elif final_num == 4:
        x = str(x)
    elif final_num == 5:
        x = complex(x)
    print('Your variable type has been changed from ', prev_type, 'to ', type(x), ': ')
    return x


number = 10
cycle_convert(number, 2)

输出:

Your variable type has been changed from  <class 'int'> to  <class 'bool'> :

推荐阅读