要求 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 + ".")
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 + ".")