在python中使用while进行错误检查

时间:2019-03-11 05:55:36

标签: python python-3.x

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循环进行错误检查。 如果我键入的不是碱性,中性,酸性,则打印“不是有效的土壤类型”,然后继续输入命令。如果我输入了正确的土壤类型之一,请退出循环并转到下一步。

但是没有用。即使我输入了正确的字母(例如“酸性”),它也显示“不是有效的土壤类型”。我想念什么? :)

4 个答案:

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

https://en.wikipedia.org/wiki/De_Morgan%27s_laws

答案 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变量。