Python 函数不返回已转换的变量类型

Python 函数不返回已转换的变量类型,python,function,if-statement,Python,Function,If Statement,我有一个赋值,并创建了一个名为cycle\u convert(variable,n)的函数,该函数根据步长n转换变量的类型。我在Python中有以下固定的类型顺序: int→ 浮动→ 布尔→ 一串→ 复杂的 例如,我有一个变量number=10,通过我的函数cycle\u convert(number,2)可以将类型从int更改为bool。它也适用于环绕和负步长 我有完成这些任务的代码,但在返回变量时,即使函数对其进行转换,转换后的类型似乎不会返回,并且变量number仍然是int。我的代码如下

我有一个赋值,并创建了一个名为
cycle\u convert(variable,n)
的函数,该函数根据步长
n
转换
变量的类型。我在Python中有以下固定的类型顺序:
int→ 浮动→ 布尔→ 一串→ 复杂的

例如,我有一个变量
number=10
,通过我的函数
cycle\u convert(number,2)
可以将类型从
int
更改为
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)
def循环_转换(x,n=1):
如果类型(x)==int:
num=1
elif类型(x)=浮动:
num=2
elif类型(x)=bool:
num=3
elif类型(x)=str:
num=4
elif类型(x)=复杂:
num=5
上一类型=类型(x)
最终数量=数量+n
当最终数量不在范围(1,6)内时:
如果最终数量为5:
最终数量=最终数量-5
如果final_num==1:
x=int(x)
elif final_num==2:
x=浮动(x)
elif final_num==3:
x=bool(x)
elif final_num==4:
x=str(x)
elif final_num==5:
x=复数(x)
打印('您的变量类型已从',prev_type'更改为',type(x),':')
返回x
数字=10
循环_转换(数字,2)
有人能解释一下为什么返回函数在这个例子中不起作用吗


谢谢

我认为这是一个打字错误。您正在定义函数以获取参数
p
n
,其中
n
的默认值为1。但稍后,在函数中,您将计算变量
x
,这意味着调用函数时传递的
p
永远不会生效。这应该起作用:

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)
def循环_转换(x,n=1):
如果类型(x)==int:
num=1
elif类型(x)=浮动:
num=2
elif类型(x)=bool:
num=3
elif类型(x)=str:
num=4
elif类型(x)=复杂:
num=5
上一类型=类型(x)
最终数量=数量+n
当最终数量不在范围(1,6)内时:
如果最终数量为5:
最终数量=最终数量-5
如果final_num==1:
x=int(x)
elif final_num==2:
x=浮动(x)
elif final_num==3:
x=bool(x)
elif final_num==4:
x=str(x)
elif final_num==5:
x=复数(x)
打印('您的变量类型已从',prev_type'更改为',type(x),':')
返回x
数字=10
循环_转换(数字,2)
输出:

Your variable type has been changed from  <class 'int'> to  <class 'bool'> :
您的变量类型已从更改为:

通过上述更改,并将函数结果添加到
编号
中,您得到了正确的更改类型

def循环_转换(x,n=1):
如果类型(x)==int:
num=1
elif类型(x)=浮动:
num=2
elif类型(x)=bool:
num=3
elif类型(x)=str:
num=4
elif类型(x)=复杂:
num=5
上一类型=类型(x)
最终数量=数量+n
当最终数量不在范围(1,6)内时:
如果最终数量为5:
最终数量=最终数量-5
如果final_num==1:
x=int(x)
elif final_num==2:
x=浮动(x)
elif final_num==3:
x=bool(x)
elif final_num==4:
x=str(x)
elif final_num==5:
x=复数(x)
打印('您的变量类型已从',prev_type'更改为',type(x),':')
返回x
数字=10
数字=循环_转换(数字,2)#在此处更改

如果类型(x)=int:
则使用
启动函数
x
没有定义它(它在以前版本的内存中)如果函数接受输入
p
为什么在函数中使用
x
呢?如上所述,我建议查看对我来说工作得很好的函数,并做一些更改:将指令缩进函数定义中,将
p
更改为
x
的确,它们在我的代码中是正确的,并且运行良好,但是我的控制台中的数字类型仍然是
int
。抱歉,这只是一个输入错误,实际上代码中是x。它可以工作,但是控制台中的数字类型仍然是
int
,这是大量复制的代码,只是为了更改函数的标题。@geds133我只是在命令行上运行了它,没有任何问题。对您正在返回
x
,不要期望
number
的类型得到更新。如果这是你想要的,那是另一个需要解决的问题。让我知道,我会编辑我的答案,以便根据您使用的函数更新
number
的类型。抱歉,我一定对返回函数在这里的作用感到困惑。当我以
number=cycle\u convert(number,2)
的形式调用它时,它会覆盖变量,但返回值是否会覆盖此变量?否。检查此项以了解进一步的解释我明白了,那么很好,我的代码是正确的我误解了返回函数