while True:
self.soil_type = input("Please choose soil type - alkaline, neutral, acidic: ")
print('-'*30)
print('')
if self.soil_type != "alkaline" and "neutral" and "acidic":
print("***NOT A VALID SOIL TYPE***")
continue
else:
False
我想用while循环进行错误检查。 如果我键入的不是碱性,中性,酸性,则打印“不是有效的土壤类型”,然后继续输入命令。如果我输入了正确的土壤类型之一,请退出循环并转到下一步。
但是没有用。即使我输入了正确的字母(例如“酸性”),它也显示“不是有效的土壤类型”。我想念什么? :)
答案 0 :(得分:2)
while True:
self.soil_type = input("Please choose soil type - alkaline, neutral, acidic: ")
print('-'*30)
print('')
if not(self.soil_type == "alkaline" or self.soil_type == "neutral" or self.soil_type == "acidic"):
print("***NOT A VALID SOIL TYPE***")
continue
else:
break
尝试使用此.....应该可以!
答案 1 :(得分:0)
您使用的if条件错误。
应该是-
while True:
self.soil_type = input("Please choose soil type - alkaline, neutral, acidic: ")
print('-'*30)
print('')
if (self.soil_type != "alkaline") and (self.soil_type != "neutral") and (self.soil_type != "acidic"):
print("***NOT A VALID SOIL TYPE***")
continue
else:
False
原因是因为您将其表示为-
if <condition> and "neutral" and "acidic":
...
由于“中性”和“酸性”仅是真实值,如果不是碱性,则第一个条件将为真实。这使整个条件成立,并且仅打印-
***NOT A VALID SOIL TYPE***
希望这会有所帮助。
答案 2 :(得分:0)
如果您选中if not something
,则代码将更易于阅读,而不是检查if something
:
while True:
self.soil_type = input("Please choose soil type - alkaline, neutral, acidic: ")
print('-'*30)
print('')
if self.soil_type == "alkaline" or self.soil_type == "neutral" or self.soil_type == "acidic":
print("**VALID**")
print self.soil_type
break
else:
print("***NOT A VALID SOIL TYPE***")
提醒(布尔代数):
规则可以用英语表达为:
析取式的取反是取反的合取;和
一个合取式的取反就是该取反的取和;或
两个集合的并集的补码与它们的补码的交点相同;和
- 两个集合的交集的补码与其补码的并集相同。
或
not (A or B) = not A and not B; and not (A and B) = not A or not B
答案 3 :(得分:0)
正如其他人已经说过的那样,“ if”语句在语法上是不正确的。此外,在if语句本身中列出有效污点集会使代码的可读性降低,也难以理解和维护。这是解决此问题的建议:
while True:
valid_types = ('alkaline','neutral','acidic')
self.soil_type = input("Please choose soil type - alkaline, neutral, acidic: ")
print('-'*30)
print('')
if self.soil_type not in valid_types:
print("***NOT A VALID SOIL TYPE***")
continue
else:
False
尽管我认为,鉴于您在此处给我们提供的值,有效土壤类型的列表不太可能会改变,但这仍然使这些值的来源更加清晰。
此外,为了清楚起见,您可以切换if语句,以便代替检查列表中的输入是否为 not ,而不是检查输入的 is < / em>。对于大多数人来说,这更自然,再次使代码更具可读性和可维护性:
while True:
valid_types = ('alkaline','neutral','acidic')
self.soil_type = input("Please choose soil type - alkaline, neutral, acidic: ")
print('-'*30)
print('')
if self.soil_type in valid_types:
False
else:
print("***NOT A VALID SOIL TYPE***")
continue
要获得额外的信用,请在input
上加上一点join
等,以在其中也使用valid_types
变量。