【问题标题】:Python validation loopPython验证循环
【发布时间】:2017-09-24 19:59:02
【问题描述】:
我需要验证用户名,所以它只包含字母。为此,我使用了一个 while true 语句。我还希望将用户名写入文本文件,一旦它有效,我将如何更改我的代码来执行此操作。我将如何更改我的代码,以便如果用户输入无效名称,他们必须重试,如果有效,则将其写入文本文件。
import re
name=(input("Please enter your name: "))
while name is None or not re.match("[A-z]",name):
print("Invalid name. Try again")
else:
filename = ("name");
with open (filename, "a") as f:
f.write (name + "\n")
【问题讨论】:
标签:
python
python-3.x
validation
loops
text-files
【解决方案1】:
import re
def askName():
name = input("Please enter your name: ")
if re.match("[A-z]",name):
with open("filename", "w") as f:
f.write(name)
else:
askName()
askName()
【解决方案2】:
希望对你有帮助
Correct = True
while Correct == True:
name = input("Please enter your name: ")
if name.isalpha() == True:
file = open("filename.txt", "a")
file.write("\n" + name)
file.close
print("Wrote to file")
Correct = False
else:
print("Incorrect, Try again")
【解决方案3】:
我对许多其他人的解决方案:
while True:
name=(input("Please enter your name: "))
if name and name.isalpha():
filename = ("name.txt")
with open (filename, "a") as f:
f.write (name + "\n")
break
else:
print ("Invalid name. Try again")
continue
【解决方案4】:
name = raw_input('enter name\n')
while not all(map(lambda l: l.isalpha, iter(name)):
name = raw_input('invalid name. Please try again\n')
continue
with open('file_path', 'w') as f:
f.write(name + '\n')
all() 语句验证字符串中的每个字符; map 为输入中的每个字符运行 lambda 函数。要从字符串中创建迭代器,可以使用 iter(name)
【解决方案5】:
来自documention:
str.isalpha()
如果字符串中的所有字符都是字母并且至少有一个字符,则返回 true,否则返回 false。按字母顺序
字符是在 Unicode 字符中定义的那些字符
数据库为“字母”,即具有一般类别属性的那些
“Lm”、“Lt”、“Lu”、“Ll”或“Lo”之一。请注意,这是不同的
来自 Unicode 标准中定义的“Alphabetic”属性。
以下几行应该可以解决问题:
name = input('Enter name: ')
# if you want to take spaces into account, i.e. inputs like
# 'Spam Eggs', change the following line to:
# while any(x for x in name.split() if not x.isalpha()):
while not name.isalpha():
print('Invalid input!')
name = input('Enter name: ')
with open(filename, 'a') as f:
f.write(name + '\n')