我有一段不起作用的代码。
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的问题? 为什么是这样?以及如何解决?
答案 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语句。