2016-05-11 8 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? ") 

これはコードの外観ですが、文字のみを受け入れるようにしてください。しかし、このコードを実行すると、問題があり、プログラムは入力されたすべての入力に対してユーザーの名前を要求し続けますが、プログラムが続行する唯一の方法は「スペース(小節)」が押された場合です。これには何が問題なのですか?なぜ.isalnumを使用するこのコードは機能しませんか?

+0

「ジョージ・スミス」のような名前を受け入れることはありませんでしょうか? –

+0

回答のコメントに見られるように、あなたが受け入れるものと拒否するものを正確に説明していません。英字/ ASCIIアルファベットの空白と文字のみを含む名前を受け入れたいと思いますか? O'Malleyのようにアポストロフィはどうですか?等々。質問を明確にするまで、あなたの質問に答えることはできません。 –

答えて

3
while name.isalnum(): 

はループがとして長い名前が英数字としてを実行し続けることを意味しています。あなたが欲しい:

while not name.isalnum(): 
+0

私はすでにそれを試してもうまくいきませんが、英数字の名前を受け入れないようにしたいのですが、 'while'を 'while'に置き換えても、コードは正しく動作しません –

+1

@AbukarAwes:王子様が奇妙な​​ことを言ったような名前の人があなたのプログラムを使用することを確実にしたいのでない限り、あなたはおそらく "英数字"という言葉を誤解しているでしょう。 'isalnum'は"文字と数字の両方を含む "という意味ではありません。文字列内の各文字が英数字であることを意味します(少なくとも1つの文字があります)。 – user2357112

0

あなたの目標は、より良いregexによって達成することができる2つのループがなぜ

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」

関連する問題