【问题标题】:Python IF statements with common ELSE带有常见 ELSE 的 Python IF 语句
【发布时间】:2018-09-23 01:56:06
【问题描述】:

我正在尝试验证用户输入,但是我的问题是,如果第一个 IF 语句为真,则当前代码将不会搜索其余的 ELIF 语句。这意味着如果第一个输入框中有错误,则其余输入框不会得到验证,这是我的代码:

            if (len(MemberID)) > 4:
                  self.MemberIDError.configure(fg = "red") 
            elif (len(Postcode)) > 7:
                  self.PostcodeError.configure(fg = "red")                      
            elif (len(Age)) > 3:
                  self.AgeError.configure(fg = "red")
            elif (len(Mass)) > 3:
                  self.MassError.configure(fg = "red")                        
            elif (Name == '') or (MemberID == '') or (Postcode == '') or (Age == '') or (Gender == '') or (Mass == ''):
                self.CreateError.configure(fg = "red")
                conn.commit()
            else:
                List = [Name, MemberID, Postcode, Age, Gender, Mass]
                cursor.execute("INSERT INTO memb(Name, MemberID, Postcode, Age, Gender, Mass) VALUES (?,?,?,?,?,?)",(Name, MemberID, Postcode, Age, Gender, Mass))
                conn.commit()

或者,如果我将“ELIF”语句更改为“IF”语句,错误的用户输入仍会添加到数据库中。我可以做些什么来确保正确验证用户输入,以及为什么不使用“ELIF”语句。

【问题讨论】:

  • ifelif 之间存在差异。
  • 那你为什么用elif呢?而不是第二个if 等?
  • 写多个if语句而不是elif
  • 这里所有的答案都可以请问题中的缩进错误吗。
  • 对每一个都使用 if 语句。如果您有一个程序,其中多个条件可以为 True,您总是希望使用 if 语句以便检查每个条件。

标签: python validation if-statement


【解决方案1】:

只需放置多个IF 语句,并跟踪它是否有效:

        valid=True

        if (len(MemberID)) > 4:
              self.MemberIDError.configure(fg = "red")
              valid=False 
        if (len(Postcode)) > 7:
              self.PostcodeError.configure(fg = "red") 
              valid=False                     
        if (len(Age)) > 3:
              self.AgeError.configure(fg = "red")
              valid=False
        if (len(Mass)) > 3:
              self.MassError.configure(fg = "red")
              valid=False                        
        if (Name == '') or (MemberID == '') or (Postcode == '') or (Age == '') or (Gender == '') or (Mass == ''):
              valid=False
            self.CreateError.configure(fg = "red")
            conn.commit()
        if valid:
            List = [Name, MemberID, Postcode, Age, Gender, Mass]
            cursor.execute("INSERT INTO memb(Name, MemberID, Postcode, Age, Gender, Mass) VALUES (?,?,?,?,?,?)",(Name, MemberID, Postcode, Age, Gender, Mass))
            conn.commit()

【讨论】:

  • 然而,这个问题是,如果超出其中一个限制,只要没有空值,它仍然会被插入到数据库中。
  • @NaracSnave 我们不知道您尝试使用 if 语句解决的逻辑,但 Artemis 的答案是您可以使用多个 if 语句。
  • @NaracSnave 我已经对其进行了编辑以跟踪有效性。
【解决方案2】:

当您使用elif 语句编写if 语句时,您所做的是告诉程序检查第一个if 语句,如果有效则不要检查下面的其他elif 语句。这将按顺序检查,直到 if/elif 之一有效或直到您用完 if/elif 语句。

如果您希望检查每个参数,而不管前面的if 语句是否有效,那么您需要将其编写为多个 if 语句。

类似这样的:

if (len(MemberID)) > 4:
    self.MemberIDError.configure(fg = "red") 
if (len(Postcode)) > 7:
    self.PostcodeError.configure(fg = "red")                      
if (len(Age)) > 3:
    self.AgeError.configure(fg = "red")
if (len(Mass)) > 3:
    self.MassError.configure(fg = "red")                        
if (Name == '') or (MemberID == '') or (Postcode == '') or (Age == '') or (Gender == '') or (Mass == ''):
    self.CreateError.configure(fg = "red")
    conn.commit()
if:
    List = [Name, MemberID, Postcode, Age, Gender, Mass]
    cursor.execute("INSERT INTO memb(Name, MemberID, Postcode, Age, Gender, Mass) VALUES (?,?,?,?,?,?)",(Name, MemberID, Postcode, Age, Gender, Mass))
    conn.commit()

【讨论】:

    【解决方案3】:

    您的问题是 elif 基本上说如果前一个 if 不起作用,并且它满足第二个条件,但是由于前一个条件确实有效,它永远不会激活第二个比较。这应该有效:

    x = 0
    y = 0
    While x == 0:
    
        if (len(MemberID)) > 4:
            self.MemberIDError.configure(fg = "red")
            y = 1
        if (len(Postcode)) > 7:
            self.PostcodeError.configure(fg = "red")
            y = 1
        if (len(Age)) > 3:
            self.AgeError.configure(fg = "red")
            y = 1
        if (len(Mass)) > 3:
            self.MassError.configure(fg = "red") 
            y = 1
        if (Name == '') or (MemberID == '') or (Postcode == '') or (Age == '') or (Gender == '') or (Mass == ''):
            self.CreateError.configure(fg = "red")
            conn.commit()
            y = 1
    
        if y != 0:
            print "Fix changes in red"
            break
        else:
            List = [Name, MemberID, Postcode, Age, Gender, Mass]
            cursor.execute("INSERT INTO memb(Name, MemberID, Postcode, Age, Gender, Mass) VALUES (?,?,?,?,?,?)",(Name, MemberID, Postcode, Age, Gender, Mass))
            conn.commit()
            break
    

    [编辑] 所以我想我明白你在做什么。您正在尝试输入验证。我所做的是我已经循环了所有内容。如果有错误,我将一个新变量“y”的值设置为1,代码会继续遍历并检查所有内容,但是当它到达底部时,即使输入错误,它也会告诉你修复红色的东西,然后打破循环。或者,如果没有任何损坏,它会将成员添加到数据库中。

    【讨论】:

    • 然而,这个问题是,如果超出其中一个限制,只要没有空值,它仍然会被插入到数据库中。
    • 好的编辑了,现在检查一下,如果这就是你要找的,请告诉我
    猜你喜欢
    • 2022-07-22
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多