我已经编写了这段代码来制作温度转换器,并挑战自己只使用函数,但我不太明白返回值发生了什么。
当我输入一个错误的值时,问题就开始了,比如"摄氏度"或者,它通过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)