要求 2 个 while 语句为真

Requiring 2 while statments to be true

import string
import re

r = re.compile(r'[a-zA-Z]+')
name = input("Enter your name: ")

while not r.match(name):
    print("Name must be in letters!")
    name = input("Enter your name: ")

while len(name) > 12 or len(name) < 3:
    print("Name must be between 3 and 12 letters!")
    name = input("Enter your name: ")

print("Welcome,",name+".")

这工作正常,但如果我输入一个满足第一个要求但不满足第二个要求的名称,然后输入一个长度在 3 到 12 个字符之间的数字,它会接受它。例如:第一个输入是 xx,然后是消息:“名称必须介于 3 到 12 个字母之间!”,第二个输入 1111,它被接受为:“欢迎,1111。”

您可以将它们压缩成一个 while 循环,这样您就可以同时检查两个条件:

import string
import re

r = re.compile(r'[a-zA-Z]+')
name = input("Enter your name: ")

while not r.match(name) or len(name) < 3 or 12 < len(name):
    if not r.match(name):
        print("Name must be in letters!")
    if len(name) < 3 or 12 < len(name):
        print("Name must be between 3 and 12 letters!")
    name = input("Enter your name: ")

print("Welcome,", name+".")

检查 while 循环中的两个条件,并根据条件打印一条消息:

while not r.match(name) or len(name) > 12 or len(name) < 3:
    if len(name) > 12 or len(name) < 3:
        print("Name must be between 3 and 12 letters!")
    
    if not r.match(name):
        print("Name must be in letters!")
    name = input("Enter your name: ")

如果您使用的 python 版本具有 walrus operator,则可以避免条件的第二次计算:

while (letters := not r.match(name)) or (length := (len(name) > 12 or len(name) < 3)):
    if length:
        print("Name must be between 3 and 12 letters!")
    
    if letters:
        print("Name must be in letters!")
    name = input("Enter your name: ")

请注意,您可以跳过正则表达式,因为 str.isalpha() 做同样的事情。

最简单的方法是编写一个函数,将消息与循环条件分开:


def is_valid(name):
    # You don't need a regular expression for this!
    if not name.isalpha():
        print("Name must be in letters!")
        return False
    if len(name) > 12 or len(name) < 3:
        print("Name must be between 3 and 12 letters!")
        return False
    # No issues, so name is valid
    return True

name = input("Enter your name: ")

while not is_valid(name):
    name = input("Enter your name: ")

print("Welcome,", name + ".")