我需要验证用户的名字,因此它只包含字母。为此我正在使用一段时间的真实陈述。我还希望用户名一旦有效就写入文本文件,我将如何更改我的代码来执行此操作。我如何更改我的代码,如果用户输入无效的名称,他们必须再次尝试,如果有效则将其写入文本文件。
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")
答案 0 :(得分: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()
答案 1 :(得分:0)
来自documention:
<强> str.isalpha()强>
如果字符串中的所有字符都是字母并且至少有一个字符,则返回true,否则返回false。拼音 字符是Unicode字符中定义的字符 数据库为“Letter”,即具有一般类别属性的那些 “Lm”,“Lt”,“Lu”,“Ll”或“Lo”中的一个。请注意,这是不同的 来自Unicode标准中定义的“字母”属性。
以下几行应该可以解决这个问题:
from datetime import datetime
def keyfunc(value):
return datetime.strptime(value, "rate_%Y_%j.txt")
rate_file_list = sorted(glob.glob('rate_201*.txt'), key=keyfunc)
答案 2 :(得分:0)
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 为输入中的每个char运行 lambda 函数。要从字符串中创建迭代器,可以使用 iter(name)
答案 3 :(得分:0)
希望这有帮助
{{1}}
答案 4 :(得分:0)
我对许多其他人的解决方案:
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