2016-05-11 136 views
-3
name = "" 
name = input("Hi there, what is your name? ") 
while name.isalnum(): 
    name = input("Hi there, what is your name? ") 
while name.isdigit(): 
    name = input("Hi there, what is your name? ") 

這是代碼的樣子,但我只希望它只接受字母。然而,當我運行這段代碼時,出現了一個問題,程序會不斷詢問用戶的名字以提供任何輸入,程序繼續執行的唯一方法就是按下'space(bar)'。這有什麼問題?爲什麼使用.isalnum的這段代碼不起作用?

+0

爲什麼有兩個迴路的名字呢? –

+0

正如在回答的評論中所看到的,你沒有準確解釋你想要接受什麼以及拒絕什麼。你想接受僅包含英文/ ASCII字母表中的空格和字母的名字,我假設?撇號和奧馬利一樣呢?等等。你的問題不能回答,直到你說清楚。 –

回答

3
while name.isalnum(): 

就是說循環將繼續運行只要名字是字母數字。你想:

while not name.isalnum(): 
+0

我已經試過了,但它不起作用,但我希望程序不接受字母數字的名稱,但即使我用'while'代替'while',代碼仍然無法正常工作 –

+1

@AukukAwes:你可能誤解了術語「字母數字」,除非你想確保你的程序只被那些名字那樣的人使用,比如王子開始自稱的怪異東西。 'isalnum'並不意味着「包含字母和數字」;這意味着字符串中的每個字符都是字母數字(至少有一個字符)。 – user2357112

0

你的目標可以更好地通過regex實現:

import re 
p=re.compile(r'[a-zA-Z\s]+$') 
name="user0000" 
while not p.match(name): 
    name = input("Hi there, what is your name? ") 

這會接受像「喬治·史密斯」,而不是「Smith1980」

相關問題