18

ユーザーからの入力に基づいて if-test を使用してプログラムを再起動しようとしています。

このコードは機能しませんが、おおよそ次のようになります。

answer = str(raw_input('Run again? (y/n): '))

if answer == 'n':
   print 'Goodbye'
   break
elif answer == 'y':
   #restart_program???
else:
   print 'Invalid input.'

私がやろうとしていることは次のとおりです。

  • y と答えると、プログラムは最初から再起動します。
  • n と答えた場合 - プログラムは終了します (その部分は機能します)。
  • それ以外を入力すると、「無効な入力です。y または n...' などを入力して、もう一度新しい入力を求めてください。

「while true」ループを使用したソリューションに非常に近づきましたが、プログラムは何を押しても(nを除く)再起動するか、何を押しても終了します(yを除く)。何か案は?

4

6 に答える 6

15

これを試して:

while True:
    # main program
    while True:
        answer = str(input('Run again? (y/n): '))
        if answer in ('y', 'n'):
            break
        print("invalid input.")
    if answer == 'y':
        continue
    else:
        print("Goodbye")
        break

内側の while ループは、入力が'y'またはになるまでループします'n'。入力が の場合'y'、while ループが再び開始されます (continueキーワードは残りのコードをスキップし、次の反復に直接進みます)。入力が の場合'n'、プログラムは終了します。

于 2013-02-16T04:54:05.977 に答える
3

while ループを 1 つ使用する:

In [1]: start = 1
   ...: 
   ...: while True:
   ...:     if start != 1:        
   ...:         do_run = raw_input('Restart?  y/n:')
   ...:         if do_run == 'y':
   ...:             pass
   ...:         elif do_run == 'n':
   ...:             break
   ...:         else: 
   ...:             print 'Invalid input'
   ...:             continue
   ...: 
   ...:     print 'Doing stuff!!!'
   ...: 
   ...:     if start == 1:
   ...:         start = 0
   ...:         
Doing stuff!!!

Restart?  y/n:y
Doing stuff!!!

Restart?  y/n:f
Invalid input

Restart?  y/n:n

In [2]:
于 2013-02-16T05:11:49.273 に答える
3

これは、関数を使用して簡単に行うことができます。例えば:

def script():
    # program code here...
    restart = raw_input("Would you like to restart this program?")
    if restart == "yes" or restart == "y":
        script()
    if restart == "n" or restart == "no":
        print "Script terminating. Goodbye."
script()

もちろん、ここで多くのことを変更できます。言われていること、スクリプトが有効な入力として受け入れるもの、変数と関数の名前。プログラム全体をユーザー定義関数にネストするだけで (もちろん、余分なインデント内にすべてを指定する必要があります)、次のコード行を使用していつでも再起動できます: myfunctionname(). 詳細はこちら。

于 2015-06-10T15:34:13.180 に答える
1

これはデコレータを使った楽しい方法です:

def restartable(func):
    def wrapper(*args,**kwargs):
        answer = 'y'
        while answer == 'y':
            func(*args,**kwargs)
            while True:
                answer = raw_input('Restart?  y/n:')
                if answer in ('y','n'):
                    break
                else:
                    print "invalid answer"
    return wrapper

@restartable
def main():
    print "foo"

main()

最終的に、2 つの while ループが必要だと思います。ユーザーが間違った入力をした場合に再度プロンプトを表示できるように、回答を求めるプロンプトの部分を囲む 1 つのループが必要です。現在の答えが であることを確認し'y'、答えがそうでなくなるまでコードを実行し続けるには、少し時間が必要'y'です。

于 2013-02-16T04:54:41.110 に答える