Python验证循环

时间:2017-09-24 19:59:02

标签: python python-3.x validation loops text-files

我需要验证用户的名字,因此它只包含字母。为此我正在使用一段时间的真实陈述。我还希望用户名一旦有效就写入文本文件,我将如何更改我的代码来执行此操作。我如何更改我的代码,如果用户输入无效的名称,他们必须再次尝试,如果有效则将其写入文本文件。

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")

5 个答案:

答案 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