2017-05-18 11 views
2

4秒間待っていると、「あなたは時間が無かった」というメッセージが表示されます。しかし、ループを続けるためには、続行するにはenterキーを押す必要があります。入力のタイムアウトを設定する方法

ちょうどタイプするのではなく、 "時間が足りなくなってしまった"というメッセージが表示された場合、 "Type 'attack'のような入力文が表示され、

from threading import Timer 
import time 

monsterhp = int(800) 
y = 150 
while monsterhp > 0: 
    timeout = 4 
    t = Timer(timeout, print, ['You ran out of time.']) 
    t.start() 
    print(" ") 
    prompt = "You have %d seconds Type 'attack' to hit the monster\nType here: " % timeout 
    answer = input(prompt) 
    t.cancel() 

    if answer == "attack": 
     print("You strike the monster") 
     time.sleep(1) 
     monsterhp = monsterhp - y 
     print("War Lord Health:", monsterhp) 
+0

をImはあなたが私に何を言うことができるスレッドために、新しいスレッドまだ彼の応答イムから取る何を意味するのか全くわからないイムを@abccdどこに行く必要がありますか?ありがとう、それは機能を持っている必要がありますか私はまだ私のバージョンのほとんどを使用することはできますか? – mykill456

+0

あなたはどのOSを使用していますか? – abccd

+0

Mac OSの最新のpython – mykill456

答えて

1

あなたが提案したタスクを行うことは、あなたが推測したほど簡単ではありません。これを行うためにsignalモジュールを使用する方が簡単です(私は答えI linkedの修正版を使用してコードが組み込まれている)

import signal, time 

def TimedInput(prompt='', timeout=20, timeoutmsg = None): 
    def timeout_error(*_): 
     raise TimeoutError 
    signal.signal(signal.SIGALRM, timeout_error) 
    signal.alarm(timeout) 
    try: 
     answer = input(prompt) 
     signal.alarm(0) 
     return answer 
    except TimeoutError: 
     if timeoutmsg: 
      print(timeoutmsg) 
     signal.signal(signal.SIGALRM, signal.SIG_IGN) 
     return None 

monsterhp = int(800) 
y = 150 
while monsterhp > 0: 
    timeout = 4 
    timeoutmsg = 'You ran out of time.' 
    print(" ") 
    prompt = "You have %d seconds Type 'attack' to hit the monster\nType here: " % timeout 
    answer = TimedInput(prompt, timeout, timeoutmsg) 

    if answer == "attack": 
     print("You strike the monster") 
     time.sleep(1) 
     monsterhp = monsterhp - y 
     print("War Lord Health:", monsterhp) 

注:これは唯一、すべてのUNIX/MACシステム上

に動作しますあなたはあなたのコードの改良版のために、これまであなたのwhileループを変更することができます

:)

while monsterhp > 0: 
     timeout = 4 
     timeoutmsg = 'You ran out of time.' 
     print(" ") 
     prompt = "You have %d seconds Type 'attack' to hit the monster\nType here: " % timeout 
     answer = TimedInput(prompt, timeout, timeoutmsg) 

     if answer == "attack": 
      print("You strike the monster") 
      time.sleep(1) 
      monsterhp = monsterhp - y 
      print("War Lord Health:", monsterhp) 
     elif answer == None: 
      print("The War Lord has killed you, you're now dead") 
      print("Thanks for playing, \nGAME OVER") 
      break 
+0

うわー私はまったくそれを期待していませんでした。ところで、私はそのバージョンのコードを簡略化して理解しやすくなりました。 https://pastebin.com/mbYgyucJ。あなたの2番目の答えahaに近いです。しかし、私はちょうど忙しい1時間でTimedInputをテストする必要があります。とにかく返事をくれてありがとう。 – mykill456

+0

うわーありがとうございました。再び感謝 – mykill456

+0

あなたは大歓迎です、楽しんでください:) – abccd

関連する問題