編集#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
のような奇妙なものを入力することができます。
申し訳ありませんか?あなたは何の申し出を期限切れにしたいのですか? – TheRandomGuy
この文脈では、「オファー」とは何ですか? –
ああ、申し訳ありません。すべてのコマンドが一緒になって10秒間何も言わずに何かを自動的に印刷し、ifとelifのステートメントを無視します。 –