如何让if语句接受三个参数中的任意一个,而在Python中所有参数都不为true
所以,我正在做一个小项目。我正在制作一个基于文本的温度计算器,但我在程序中遇到了一个if语句的问题,正如这个问题的标题所示 这就是我遇到问题的代码如何让if语句接受三个参数中的任意一个,而在Python中所有参数都不为true,python,python-3.x,if-statement,Python,Python 3.x,If Statement,所以,我正在做一个小项目。我正在制作一个基于文本的温度计算器,但我在程序中遇到了一个if语句的问题,正如这个问题的标题所示 这就是我遇到问题的代码 running = True fahr = "fahrenheit" cel = "celsius" kel = "kelvin" temperatures = [fahr, cel, kel] while running == True: try: temperature_type = str.lower(input("W
running = True
fahr = "fahrenheit"
cel = "celsius"
kel = "kelvin"
temperatures = [fahr, cel, kel]
while running == True:
try:
temperature_type = str.lower(input("What is the current temperature unit you are using? \nFahrenheit, Celsius, or Kelvin?\n"))
except ValueError:
print("I do not understand. Please try again.")
continue
if temperature_type == any(temperatures) and not all(temperatures):
break
else:
print("Please enter a valid input.")
continue
似乎逻辑有问题,我没有看到,我尝试了多种组合,甚至是建议的组合,但它们似乎都没有按我希望的方式工作。我想让它工作的方法是让可变温度只等于一个温度,比如华氏度,然后问另一个问题,这里没有显示。如果可变温度_类型不等于这三个类型中的任何一个,那么我想循环以重复。我遇到的问题是,无论我输入什么,它都会询问温度。如果有人能给我一个答案,我会很高兴知道我做错了什么,我也希望能解释一下这种逻辑,因为我还不是这种逻辑的最佳人选。再次感谢您的回答和/或指导 这里有一个更简单的检查版本,它只检查输入字符串是否为有效温度之一。它使用in运算符检查所提供的管柱是否处于正常温度
这里有一个更简单的检查版本,它只检查输入字符串是否为有效温度之一。它使用in运算符检查所提供的管柱是否处于正常温度 any and all返回True或False,而不是可以与str进行有意义比较的对象。所有非空str都是truthy,因此您正在检查temperature_type==True和not True,这当然永远不会通过 您想要的逻辑可能是:
if temperature_type in temperatures:
在您的设计中,不可能有人输入多种温度类型,因此您不需要任何与all测试等效的测试,您只需要知道输入的字符串是否与三个已知字符串中的一个匹配。any and all返回True或False,而不是可以与str进行有意义比较的对象。所有非空str都是真实的,所以你要检查温度是否为True和nottrue,当然这永远不会通过
您想要的逻辑可能是:
if temperature_type in temperatures:
在您的设计中,不可能有人输入多种温度类型,因此您不需要任何等效的all测试,您只需要知道输入的字符串是否与三个已知字符串中的一个匹配。或:
while 1:
if input("What is the current temperature unit you are using? \nFahrenheit, Celsius, or Kelvin?\n").lower() in temperatures:
break
print("Please enter a valid input.")
说明:
所有和任何返回True或False,因此在使用时将不起作用
我删除了running,因为只需使用1
您也可以这样做,请参见:
>>> 1==True
True
或:
说明:
所有和任何返回True或False,因此在使用时将不起作用
我删除了running,因为只需使用1
您也可以这样做,请参见:
>>> 1==True
True
也许可以扩展到包括所有的比例,并使它的用户界面更容易
scales = ['F', 'R', 'C', 'K']
while True:
if input("What temperature scale are you using [F, C, K, R]? ")[0].upper() in scales: break
[0]可能会扩展到包括所有刻度,并使用户界面更简单
scales = ['F', 'R', 'C', 'K']
while True:
if input("What temperature scale are you using [F, C, K, R]? ")[0].upper() in scales: break
[0]谢谢!这帮了大忙!我也非常感谢你和其他人抽出时间回答我的问题!现在这就更有意义了!非常感谢。这帮了大忙!我也非常感谢你和其他人抽出时间回答我的问题!现在这就更有意义了!如果他这样做,他将不会将输入保存在任何地方,因此他以后将无法访问它…@AntiMatterDynamite我知道,我不会是101的回答如果他这样做,他将不会将输入保存在任何地方,因此他以后将无法访问它…@AntiMatterDynamite我知道,我不会,我还是101的答案