Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让if语句接受三个参数中的任意一个,而在Python中所有参数都不为true_Python_Python 3.x_If Statement - Fatal编程技术网

如何让if语句接受三个参数中的任意一个,而在Python中所有参数都不为true

如何让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

所以,我正在做一个小项目。我正在制作一个基于文本的温度计算器,但我在程序中遇到了一个if语句的问题,正如这个问题的标题所示

这就是我遇到问题的代码

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的答案