2016-04-01 19 views
2

クーポン/質問期限をPythonでどうすればできますか?私はこのオファーは、それがあればとのelif文を無視してまで似何かのように完全に新しい何かを出力する前に、私は最後の10秒を知らないと言うになるだろうどのようにpythonはタイムアウト後に入力プロンプトを期限切れにします

import time 
print("Hey there man.") 
test = input() 
if test == "Hey" or test == "Hi": 
    print("Hey there dude.") 
elif test == "Go away" or test == "Bye": 
    print("Cya dude.") 

...

import time 
print("Hey there.") 
test = input() 
if test == "Hey" or test == "Hi": 
    print("Hey there dude.") 
elif test == "Go away" or test == "Bye": 
    print("Cya dude.") 
else time.sleep == >5: 
    print("Nah your time has expired I'm out anyways.") 
+0

申し訳ありませんか?あなたは何の申し出を期限切れにしたいのですか? – TheRandomGuy

+0

この文脈では、「オファー」とは何ですか? –

+0

ああ、申し訳ありません。すべてのコマンドが一緒になって10秒間何も言わずに何かを自動的に印刷し、ifとelifのステートメントを無視します。 –

答えて

3

編集#2

よく傷ついてください。私は真剣にこの問題を複雑にしています。 Sci Progはずっと簡単な解決策を投稿しました。私はそういうものをいくつか変更しますが。

import time 

expires_in = 5 #in seconds  

start = time.time() 
test = input("Hey there.\n") #\n is a newline character 
end = time.time() 

if end - start > expires_in: 
    print("Nah your time has expired I'm out anyways.") 
elif test == "Hey" or test == "Hi": 
    print("Hey there dude.") 
elif test == "Go away" or test == "Bye": 
    print("Cya dude.") 


オリジナル回答

トリックを行い、この種の。ユーザーが応答するためのタイムアウト時間よりも時間がかかると、入力を待っているときよりも時間がかかるというメッセージが表示されます。

しかし、入力コマンドはユーザーからの入力がなくなるまでスクリプトの実行を一時停止するので、何か入力するまで簡単にメッセージを挿入することはできません。これには2つの方法があります。 1)入力を使用する代わりに、いくつかの低レベル関数を使用し、sys.stdoutを直接使用します。 2)スクリプトをマルチスレッド化します。これらの方法はどちらも複雑で、おそらく自分のものよりも多くの仕事があります。

import time 

def get_input(): 
    start_time = time.time() 
    expires_in = 5 #in seconds 
    got = "" 

    while (time.time() - start_time < expires_in): 
     if got: 
      print("you entered", got) 
      return got 
     got = input("enter something: ") 

    print("You took to long") 

編集: OPは、より良いが、彼が達成しようとしていたものを、次のことを例えば尋ねたので、ここにあります。私はコードの後に​​説明を追加しました。

import time 

print("Hey there.") 

def get_input(): 
    start_time = time.time() 
    expires_in = 5 #in seconds 
    user_input = "" 

    while (time.time() - start_time < expires_in): #keep looping if the time limit has not expired 
     if user_input: 
      return user_input 
     user_input = input() 
    print("Nah your time has expired I'm out anyways.") 

test = get_input() 
if test == "Hey" or test == "Hi": 
    print("Hey there dude.") 
elif test == "Go away" or test == "Bye": 
    print("Cya dude.") 

time.time()は現在の時刻を取得します。 (紀元前0秒からの秒数を表す大きな厄介な数字として返されます)。

whileループに入ると、まだユーザー入力がないので、入力ステートメントに直接スキップできます。その後、ユーザーのタイパーの速さに応じて、2つの結果を得ることができます。

a)ユーザーは時間内に応答します。この場合、whileループを再度実行します。今回はif user_input:というif節を入力し、ユーザーが入力したものをすぐに返します。

b)ユーザーは時間内に応答しません。この場合、whileループは再実行されません。結果として、print("Nah your time has expired I'm out anyways.") printステートメントに進みます。

入力文を私たちが行った場所に配置することが重要であることにご注目ください。ユーザーが使用を許可した後でユーザー入力を確認した場合、次のようなシナリオになります。質問は期限切れになりますが、ユーザーは引き続き入力を行います。ユーザーが入力を行ったので、入力を返します。そして、ユーザーに期限が切れたことを伝える機会は決してありません。

あなたが実装できる素晴らしいヒントです。input()の代わりにinput().lower()を使用して、入力を大文字と小文字を区別しないようにすることができます。 if文も小文字に変更する必要があります。ユーザーは、Heyまたはheyのいずれか、または実際には望む場合はhEyのような奇妙なものを入力することができます。

+0

私はpython 3.xを使用しているので、私はraw_inputを使うか、ちょうど入力しますか? –

+0

入力。ナイスキャッチ。私は私の答えを更新します。 –

+0

ありがとうございました。私はあなたが私に説明してくれたことをうれしく思っています。もし私がこれをやりたいのであれば、私の代わりに複雑になるでしょう。答えはトップのノックマンが投稿しました。私は物事を理解できませんでした。しかし、私は一度頼むことができますか?私の例をあなたの答えに代えて、その実行方法と実行方法をさらに理解することを学ぶことができます。ありがとう、たくさんの男。 –

3

datetimeオブジェクト(同じ名前のモジュールから)を使用できます。差異を計算するとtimedeltaオブジェクトが得られます。

最後に、応答を確認する前に遅延をテストする必要があります。

from datetime import datetime 
print("Hey there.") 
dt1 = datetime.now() 
test = input() 
dt2 = datetime.now() 
difference = dt2 - dt1 # this is a timedelta 

if difference.seconds > 10 or difference.days > 0: 
    print("Nah your time has expired I'm out anyways.") 
elif test == "Hey" or test == "Hi": 
    print("Hey there dude.") 
elif test == "Go away" or test == "Bye": 
    print("Cya dude.") 

(あなたの質問に指定されているのpython 3、で実行)

もちろん、それは非常に低く、誰かが長いことをお待ちしておりますことから、.days部分は、省略することができる:)

+0

私は真剣に過度に複雑なものです。私はあなたの答えを+1しました。 –

関連する問題