Python:如果声明不起作用?

时间:2015-10-31 17:22:10

标签: python csv

我有一段不起作用的代码。

if difficulty=="Easy" or "easy" or "1":
    with  open("EasyQs.csv") as f:
        allData = [line.strip().split(",") for line in f]
        questions  = [data[0] for data in allData]
        answers = [data[1] for data in allData]
    print(questions)
if difficulty=="Hard" or "hard" or "2":
    with  open("MediumQs.csv") as f:
        allData = [line.strip().split(",") for line in f]
        questions  = [data[0] for data in allData]
        answers = [data[1] for data in allData]
    print(questions)

我尝试输入2,硬或硬,但它始终打印来自'简单'CSV的问题? 为什么是这样?以及如何解决?

5 个答案:

答案 0 :(得分:2)

在Python中,如果要检查某些内容是否是某组值之一,请使用以下命令:

if difficulty in ("Easy", "easy", "1"):

原因是你现在正在做的事情并不像你认为的那样有效。你有条件:

if difficulty == "Easy" or "easy" or "1":

实际上评估如下:

if (difficulty == "Easy") or ("easy") or "1":

因为or是一个比==更松散的绑定运算符。所以这个整体组合条件总是正确的,因为"easy"是一个真值,所以即使(difficulty == "Easy")为假,or运算符也会将其右侧评估为true并返回

这就是为什么现在你的“简单”案件总会触发。

答案 1 :(得分:1)

if "string"True

试试这个:

if difficulty=="Easy" or difficulty=="easy" or difficulty=="1":

答案 2 :(得分:1)

在python中,你不能在if中使用超过1 if-statement。您需要在第一个elif之后对所有ifs使用if。然后in难以解决问题。并且.lower()会让用户输入小写,因此您不必执行" Hard"在选择中,因为它将其更改为" hard"。

if difficulty.lower() in ("easy", "1"):
            with  open("EasyQs.csv") as f:
                allData = [line.strip().split(",") for line in f]
                questions  = [data[0] for data in allData]
                answers = [data[1] for data in allData]
            print(questions)
elif difficulty.lower() in ("hard", "2"):
            with  open("EasyQs.csv") as f:
                allData = [line.strip().split(",") for line in f]
                questions  = [data[0] for data in allData]
                answers = [data[1] for data in allData]
            print(questions)

答案 3 :(得分:1)

您的陈述

if difficulty=="Easy" or "easy" or "1":

被视为

if (difficulty=="Easy") or ("easy") or ("1"):

非空字符串被解释为True,因此您的表达式实际上是:

if difficulty=="Easy" or True or True:

始终为True。要解决此问题,请使用以下内容:

if difficulty.lower().strip() in ('easy', '1'):

这会将测试转换为小写,关闭前导空格和尾随空格,并查看它是否适合给定元组值中的项目。

答案 4 :(得分:-1)

你的第二个if语句必须是' elif'您已经创建的语句和if语句。