2016-09-13 18 views
0
import random 
guess = input("What is your guess?") 
answer = random.randint(0,100) 

while guess != answer: 
    try: 
     guess = float(guess) 
     if guess > answer: 
      print ("Your guess is too high!") 
     elif guess < answer: 
      print ("Your guess is too low!") 
     elif guess == answer: 
      print ("Congratulations!") 
      break 
     guess = input("What is your guess?") 
     continue 
    except ValueError: 
     print ("Bad input. Try again!") 
     guess = input("What is your guess?") 

私のコードは、例えば推測= 30と入力すると、入力が無効と思われる以外は機能します...どうすれば正しい推測として受け入れることができますか?数字の推測ゲーム:数値の前に "推測="という入力を受け入れるにはどうすればよいですか?

ここにpythonの初心者です:) ありがとうございました。

+1

、あなたは文字通り '推測= 30'、または単に' 30'を入力していますか? – TigerhawkT3

+0

whileループの先頭には、入力を受け取る行が1つしかないはずです。入力する前に推測= -1を設定してください。 floatではなくintを使用することができます。 –

答えて

0

あなたのコードをPython 3.5にコピーして貼り付けました。while文の後にすべてをインデントする必要はありませんが、うまくいきました。 30

...または "推測= 30":

は、あなただけの番号を入力していますか?それは数字ではないので、問題を引き起こすからです。 番号を入力するだけです。 :)

あなたが「= 30推測」を受け入れる場合:

import random 
import re ###<-Add this 

guess = input("What is your guess?") 
answer = random.randint(0,100) 

while guess != answer: 
    try: 
     guess = re.sub("[^0-9]", "", guess) ###<- Add this 
     guess = float(guess) 
     if guess > answer: 
      print ("Your guess is too high!") 
     elif guess < answer: 
      print ("Your guess is too low!") 
     elif guess == answer: 
      print ("Congratulations!") 
      break 
     guess = input("What is your guess?") 
     continue 
    except ValueError: 
     print ("Bad input. Try again!") 
     guess = input("What is your guess?") 

この2行が処理する前に、任意の非数値文字の入力を取り除くために正規表現を使用します。

+0

ねえ、私はwhileステートメントの後にインデントする必要がありますが、これは私のクラスの練習であり、チャレンジの質問の1つは特別なケースがXDで動作することを確認することでした。この全部が完了するのに約1時間かかりました。うまくいけばそれほど遅くはない。 –

+0

本当に "guess = 30"を受け入れるには、次のようにします:import re:guess = re.sub( "[^ 0-9]"、 ""、推測)入力。 –

+0

まあ私はそれを学んだことはありません....私の先生が期待していたので、idk?彼女は、私たちが試してみることを習得したいと言っていました。 –

0

それはあなたがそのクラスで学んできたどのくらいに依存しますが、次の行を追加すると、あなたは30guess = 30(あるいはfoo=bar=30)の両方を受け入れることを許可する必要があります。

... 
while guess != answer: 
    guess = guess.split('=')[-1] # Add this line 
    try: 
     guess = float(guess) 
     ... 

それは単に=を使用して入力を分割デリミタとして使用し、最後の部分([-1])のみを使用します。

0

だから私はあなたのコードを並べ替え:

  • それがこのexceptブロックが処理しようとしている特定のものを誤り、それが明確になるため、私は、とValueErrorを引き起こす可能性がありますちょうどラインまでtry/exceptを狭め - エラーを置きますエラーの原因の近くで処理してください。これはまた、continueを持っている正当な理由になります。コードではなく、「高すぎる/低すぎる」コードをスキップするためです。

  • whileループ条件を変更して、無限ループにするようにwhile True:と言いました。あなたのコードでは、while guess != answerは、推測が正しいときにブレークすることを意味しますが、実際にはbreakを使用してループを終了するので、誤解を招きます。 while guess != answerを使用することは賢明で、breakはありませんが、割り当ての一部としてbreakを使用する必要がある場合、私のコードにはそれを使用するためのいくつかの「理由」(無限ループを壊す)があります。

  • エラー処理の上部または内部で重複する必要がないため、guess = input(...)コードをループ内に移動しました。 (テキストを変更しなければならないとしたら、3つの場所が1つの場所よりも面倒です)。

  • guess = 30入力を処理する方法はたくさんあります。あなたは文字通りそれを扱うことができ、その場合にはif "guess = " in guess:を探して、そのテキストが一致する場合は、数字だけを残して置き換えるためにguess = guess.replace("guess = ", "")を使用します。また、正規表現を使用することもできます。もう1つの答えは、テキストを削除して数字を残したり、文字列split()を使用しています。私の答えはfilter()です。これはテストを使って何かをフィルタリングします。この場合、何かが数字であるかどうかをテストし、数字だけを許可するので、すべてのテキストが削除されます。正規表現がやっているのと同じですが、実際は別のアプローチです。

コード:プログラムが入力に推測を入力を求められたら

import random 

answer = random.randint(0,100) 

while True: 
    guess = input("What is your guess?") 

    # filters out only the numbers 
    # and makes them into a string, e.g. 
    # 1) "guess = 30" 
    # 2) [3,0] 
    # 3) "30" 
    guess = ''.join(filter(str.isdigit, guess)) 

    try: 
     guess = float(guess) 
    except ValueError: 
     print ("Bad input. Try again!") 
     continue 

    if guess > answer: 
     print ("Your guess is too high!") 
    elif guess < answer: 
     print ("Your guess is too low!") 
    else: 
     print ("Congratulations!") 
     break 

Try it online at repl.it

+0

こんにちは。ありがとう!!!!!もし私がそれを私の方法で書いたのであれば、それは悪いコードと見なされますか?私はそれを習得しなかったので、私はフィルタ方法をしなかった。 –

+0

@XVocalz全く悪くない、いいえ(私の意見では)。これはきちんと整っていて、 "x"の代わりに "推測"という変数名があり、フルネームで 'random.randint()'を使うと、エラー処理ができてクラッシュするだけでなく、それは動作します(!)、彼らはすべて良いものです。私はたいていちょうど遊んでいます。コードを書く方法がたくさんありますし、決して正しい方法ではありません。そして、「おそらくもっと良いかもしれません」という無限のものがあります。 – TessellatingHeckler

関連する問題