2017-09-24 69 views
-1

我需要驗證用戶名,以便它只包含字母。爲此,我使用了一段時間的真實陳述。我也想要用戶名被寫入一個文本文件,一旦它是有效的我將如何改變我的代碼來做到這一點。我如何更改我的代碼,如果用戶輸入無效的名稱,他們必須再次嘗試,如果它是有效的,它將被寫入文本文件。Python驗證循環

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

的可能的複製[問計於用戶輸入,直到他們給出有效的響應](https://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response) – wwii

回答

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() 
0

documention

str.isalpha()

返回true,如果字符串中的所有字符是字母,並至少有一個字符,假的除此以外。字母 字符是在Unicode字符 數據庫中被定義爲「Letter」的那些字符,即具有一般類別屬性的那些字符是「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') 
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') 

所有()聲明驗證每一個字符字符串中; 爲輸入中的每個字符運行lambda函數。要創建一個迭代一個字符串,你可以使用ITER(名稱)

0

希望這有助於

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