4

私はプログラミングに不慣れで、Pythonを独学しようとしています。私は小さなフラッシュカードスクリプトを書き始めました。私の考えでは、ユーザーに問題が発生し、回答の送信を求められます。答えが正しくない場合、ユーザーは再試行するように求められ、正しい答えが入力されるまで続けます。これまでのところ計画通りに動作していますが、正解を入力してからやり直す方法がわかりません。また、ユーザーがゲームを終了できるようにするための手段も含める必要があると思います。これについての提案を提出したい場合は、その方法もわかりません。:-)

PS-私のコードが不完全な場合、私は提案を受け入れます。しかし、私は主に私の元の質問に対する答えを探しています。これはコーディングへの私の最初の進出なので、時間が経つにつれて、よりエレガントなコードを書くのが上手になると確信しています。

ありがとう!

def add():
   from random import randint
   a = randint(1, 5)
   b = randint(1, 5)
   c = a + b
   print a,  '+',  b
   print 'What\'s the sum?'
   d = input()
   while d != c:
     print 'Wrong, try again!'
     d = input()
   else:
     print "Correct!"
4

2 に答える 2

3

まず、raw_inputの代わりにを使用inputしてから、それを整数に変換します。ただし、質問に答えるには、次のようにユーザー入力を求めます。

play_again = raw_input('Play again? (y/n)')
if play_again.lower().startswith('y'):
    add()
return

inputネイティブコードとして評価されるため安全ではありません。そのため、熟練した個人がシステムに侵入できる可能性があります。raw_input入力を文字列として扱い、int()結果を呼び出すことができます。

ただし、これはPython2にのみ適用されます。Python 3の場合inputは問題ありませんが、Python2に取って代わりましたraw_input

また、関数には再帰があります。スタックオーバーフローを引き起こすほど永続的なものはおそらくないでしょうが、他のアプリケーションでは、反復が最良の方法です。

これを反復ループに変換するのは簡単です(また、お勧めします)。インポート以外のすべてをwhile Trueループ内に配置します。次に、ループの最後に、次のコードを追加します。

play_again = raw_input('Play again? (y/n)')
if play_again.lower().startswith('y'):
    continue
break

'n'もちろん、の代わりにチェックして'y'削除し、単純なステートメントcontinueに置き換えることもできます。break

ifステートメントを読みにくいものに置き換えることもできることに注意してください。

if raw_input('Play again? (y/n)').lower().startswith('y'):  # or 'n'

play_againそして、中間変数を取り除きます。可読性を犠牲にしてコンパクト化するつもりはありませんが。

于 2013-01-17T05:48:09.853 に答える
0

Python 3 の場合 (入力用):

コードを少し変更しました(印刷用に「()」を追加し、機能と比較するためにintを追加しました。int以外を入力したかどうかを確認しませんでした)

def add():
   from random import randint
   a = randint(1, 5)
   b = randint(1, 5)
   c = a + b
   print (a,  '+',  b)
   d = int(input('What\'s the sum?'))
   while d != c:
     print ('Wrong, try again!')
     print (a,  '+',  b,' ? ')
     d = int(input())
   else:
     print ("Correct!")


while True:
    add()
    if input('Continue (O/N) ? ') == 'N':
        break

多くの間違った答えが最初の質問をクリアする可能性があるため、ループに追加も印刷しました。

前述のように、最初のループでは「N」と入力するまで関数が実行されます。ユーザーが終了したい場合は、追加ループに正しい答えを追加できます。

于 2015-12-08T18:19:48.617 に答える