我编写了这段代码来制作温度转换器,并要求自己只使用函数,但我不太明白返回的值是怎么回事。
当我输入错误的值(如"celsiuss“或"klevin”)时,问题就开始了,它通过of语句传递,要求我输入一个有效的单元,并让我按预期的方式进入函数的开头。然后,我写了一个有效的答案,它穿过了valid语句,返回想要的值,但一旦退出函数,返回值就变成'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()
发布于 2022-07-02 12:57:30
我建议在用户输入合法选项之前,不要递归地调用相同的函数。相反,只在输入选项有效时,才使用循环并将值返回到调用代码。代码示例如下:
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)
发布于 2022-07-02 12:58:58
您的代码缩进非常混乱,但表明最后一行不是函数,您只需给函数中的inputUnitSelection()
一个返回语句即可。
else:
print("This is not an unit. Please enter a valid unit. \n")
return inputUnitSelection()
发布于 2022-07-02 13:08:48
除了解释问题的答案之外,您还可能希望研究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)
阅读
https://stackoverflow.com/questions/72842343
复制