函数的返回"looses"退出函数后的值



我已经编写了这段代码来制作温度转换器,并挑战自己只使用函数,但我不太明白返回值发生了什么。

当我输入一个错误的值时,问题就开始了,比如"摄氏度"或者,它通过else语句,要求我输入一个有效的单元,并让我按预期返回到函数的开头。然后我写一个有效的答案,它通过相应的if语句并返回所需的值,但一旦它退出函数,返回值就变成"None"。我用断点调试了它,在函数'(返回)inputUnitSelection'的值为1(在这种情况下为摄氏),但当它退出函数'(返回)inputUnitSelection'的值为None。我还查了指纹。为什么它会贬值呢?因此,我的inputUnit变量没有值,其余的代码也不起作用

让我更困惑的是,当我第一次输入一个有效的答案时,函数返回一个正确的值,一切都很好。(也检查了断点,调试器和打印)

代码如下:

Celsius = 1
Farenheit = 2
Kelvin = 3
def inputUnitSelection():
unitInput = input(
"What is the unit of the temperature you wish to convert ? (Celsius, Farenheit, Kelvin) n")

if(unitInput == "Celsius" or unitInput == "celsius"):
return Celsius 
elif(unitInput == "Farenheit" or unitInput == "farenheit"):
return Farenheit 
elif(unitInput == "Kelvin" or unitInput == "kelvin"):
return Kelvin 
else:
print("This is not an unit. Please enter a valid unit. n")
inputUnitSelection()
inputUnit = inputUnitSelection()

代码缩进很困惑但建议最后一行没有功能,你只需要给你的函数返回语句的inputUnitSelection()

else:
print("This is not an unit. Please enter a valid unit. n")
return inputUnitSelection()

我建议在用户输入合法选项之前不要递归地调用相同的函数。相反,只在输入选项有效时使用循环并向调用代码返回值。代码示例如下:

Celsius = 1
Farenheit = 2
Kelvin = 3
def inputUnitSelection():
while True:
unitInput = input("What is the unit of the temperature you wish to convert ? (Celsius, Farenheit, Kelvin) n")
if(unitInput == "Celsius" or unitInput == "celsius"):
return Celsius 
elif(unitInput == "Farenheit" or unitInput == "farenheit"):
return Farenheit 
elif(unitInput == "Kelvin" or unitInput == "kelvin"):
return Kelvin 
else:
print("This is not an unit. Please enter a valid unit. n")
inputUnit = inputUnitSelection()
print(inputUnit)

除了解释你的问题的答案之外,你可能还需要研究Enum并使用title()来编写这样的代码:

from enum import Enum
class ConversionType(Enum):
Celsius = 1
Farenheit = 2
Kelvin = 3

def inputUnitSelection():
while True:
unitInput = input("Celsius, Farenheit, Kelvin? n")
if(unitInput.title() == ConversionType.Celsius.name):
return  ConversionType.Celsius.value
elif(unitInput.title() == ConversionType.Farenheit.name):
return ConversionType.Farenheit.value 
elif(unitInput.title() == ConversionType.Kelvin.name):
return ConversionType.Kelvin.value  
else:
print("This is not an unit. Please enter a valid unit. n")
inputUnit = inputUnitSelection()
print(inputUnit)

阅读:

什么是枚举?它们为什么有用?

Celsius = 1
Farenheit = 2
Kelvin = 3

def inputUnitSelection():

unitInput = input(
"What is the unit of the temperature you wish to convert ? (Celsius, Farenheit, Kelvin) n")
if(unitInput == "Celsius" or unitInput == "celsius"):
return Celsius
elif(unitInput == "Farenheit" or unitInput == "farenheit"):
return Farenheit
elif(unitInput == "Kelvin" or unitInput == "kelvin"):
return Kelvin
else:
print("This is not an unit. Please enter a valid unit. n")
return inputUnitSelection()
inputUnit = inputUnitSelection()
print(inputUnit)

最新更新