2012-02-15 13 views
0

私はPythonでHangmanのゲームに取り組んでいます。私は試してみた入力のユーザー検証が必要ですが、なぜ動作しないのか分かりません。Hangmanユーザー入力の検証

私の仕事は、1.空の入力、2.非整数、空でない入力、3.範囲外の入力のインデックスのための "エラー"メッセージを表示することでした。範囲外のインデックスでは、すでにプログラム内のリストから単語を選択するために、ユーザーに0〜9の整数を要求しています。

def getLetterFromUser(totalGuesses): 

    while True: 
     userInput = input("\nPlease enter the letter you guess:") 
     if userInput == '' or userInput == ' ': 
      print("Empty input.") 
     elif userInput in totalGuesses: 
      print("You have already guessed that letter. Try again.") 
     elif userInput not in 'abcdefghijklmnopqrstuvwxyz': 
      print("You must enter an alphabetic character.") 
     else: 
      return userInput 

明快にするために、getLetterFromUserの後続の呼び出しはwhileループ内にあり、これらの条件を繰り返し確認します。

編集:私は属していないものを取り出しました。ありがとうございました。しかし、私の問題は、入力がアルファベットではないことを私に伝えているということです。入力の長さ(1つの文字)は2で、ヌル文字を数えなければ理にかなっていません。

+1

あなたはどのような問題やエラーが発生していますか? – YXD

+0

なぜユーザーは単語を選択するのですか?「文字を推測する」プロンプトループでそのオプションがなぜループするのですか? – Edwin

+0

@エドウィン私の謝罪は、それが無意識にそこに貼り付けられたならば。他の場所と同じように無視してください。 他人に:私が受け取っているエラーは、私が入力したものであっても、それは正しいことではないということです。通常、「アルファベット文字を入力する必要があります」と表示されます。また、私は好奇心が強いので、入力の長さ(1文字)とその常に2を確認しました。理由はわかりません。 – trainreq

答えて

1

あなたの問題は、いくつかの検証ルールが他のものよりも優先されるということです。たとえば、userInputが空の文字列の場合、返される文字列はuserInput < 0です。空ではないが数字でない場合はどうすればよいでしょうか?

最初にどの条件を確認する必要があるか考えてください。あなたが読ん及び使用することをお勧めします 一部の機能:

"123".isdigit() # checks if a string represents an integer number 
" 123 ".strip() # removes whitespaces at the beginning and end. 
len("") # returns the length of a string 
int("123") # converts a string to an int 
0

ここで始まる2つのものがあります:

あなたが想定している場合はラインの目的

userInput = userInput.lower() 

あるものuserInputは整数です。 userInput = int(userInput)を試す必要があります。整数には、.lower()メソッドはありません。

次の行

if 0 > userInput or userInput > 9 

これは、ユーザ入力は、次のように立派に見える整数(あなたは0と9と比較されて、いない "0" と "9")

ある前提としています

if not 0<=userInput<=9 
0

あなたは整数の答えが必要だと言っていますが、入力をintにキャストしていませんが、入力がアルファベットでない場合、エラーメッセージが返されます。あなたは2つの異なることを求めています。

ユーザーは整数または文字を入力しますか?

0

これはあなたを助けることがあります。

>>> int(" 33 \n") 
33 
>>> int(" 33a asfd") 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '33a asfd' 
>>> try: 
...  int("adsf") 
... except ValueError: 
...  print "invalid input is not a number" 
...  
invalid input is not a number 
+0

CLIに複数行のコマンドを入力するにはどうすればいいですか? – trainreq

+0

私はpythonのIDEであるpyscripterにいました。 Enterを押すだけで次の行に移動します。 http://stackoverflow.com/questions/81584/what-ide-to-use-for-python –