2

宿題がありますが、本当に解決策が必要です。私は昨日からこれをやろうとしていますが、方法がわかりません。

プログラムは文字または数字を生成して印刷する必要があり、ユーザーはそれをできるだけ早く入力してEnterキーを押す必要があります。ゲームは30秒後に終了します。

ゲームに時間制限を設ける方法がわかりません。私はstackoverflowを検索していましたが、有用なものは何も見つかりませんでした。私を助けてください。

**これが私がこれまでに行ったことです。SYSS.STDERの回答からコードを試しましたが、30秒が経過するとゲームも終了するはずなのでうまくいきませんが、このコードでは最後の文字を入力するとゲームが終了します。

ループは終了するまで停止せず、期限を過ぎていることを発見します。タスクは、時間が経過するにつれてすぐに進行中に中断される必要があります。

max_time =30
start_time = time.time()  # remember when we started
while (time.time() - start_time) < max_time:

    response = "a"      # the variable that will hold the user's response
    c = "b"             #the variable that will hold the character the user should type
    score = 0
    number = 0

    c = random.choice(string.ascii_lowercase + string.digits)
    print(c)
    number = number + 1

    response = input("Type a letter or a number: ") #get the user's response

    if response == c and (time.time() - start_time) < max_time:
         # if the response from the previous loop matches the character
         # from the previous loop, increase the score.
         score = score + 1
4

4 に答える 4

4

これが私のやり方です:

import string
import random 
import time   

response = "a"              # the variable that will hold the user's response
c = "b"                     #the variable that will hold the character the user should type
score = 0                   #the variable that will hold the user's score
start = time.time()         #the variable that holds the starting time
elapsed = 0                 #the variable that holds the number of seconds elapsed.
while elapsed < 30:         #while less than 30 seconds have elapsed  

    if response == c:       #if the response from the previous loop matches the character
        score += 1          #from the previous loop, increase the score.

    #c is a random character
    c = random.choice(string.ascii_lowercase + string.digits)
    print(c)               

    response = input("Type a letter or a number: ") #get the user's response

    elapsed = time.time() - start #update the time elapsed
于 2012-12-15T15:28:07.767 に答える
0

Windowsを使用しているので、このmsvcrt.kbhit関数を使用して、タイミングループ内のキー押下をチェックできます。

import msvcrt #### windows only ####
import os
import random
import string
import time

max_time = 15

def readch(echo=True):
    "Get a single character on Windows"
    ch = msvcrt.getch()
    while ch in b'\x00\xe0': # special function key?
        msvcrt.getch()       # get keycode & ignore
        ch = msvcrt.getch()
    if echo:
        msvcrt.putch(ch)
    return ch.decode()

def elapsed_time():
    global start_time
    return time.time() - start_time

number = 0
score = 0
start_time = time.time()  # initialize timer

while elapsed_time() < max_time:
    c = random.choice(string.ascii_lowercase + string.digits)
    print(c, end='')
    number += 1
    print("Type a letter or a number: ", end='')

    while elapsed_time() < max_time:
        if not msvcrt.kbhit():
            time.sleep(0.1) # don't hog processor
        else:
            response = readch(echo=False) # get the user's response
            if response == c:
                print(response) # only print if correct
                score += 1
                break
    else:
        print()

print()
print("Time's up")
print("You go  {} out of {}:".format(score, number))
于 2012-12-17T03:38:09.430 に答える
0

制限時間を超えたときに素数関数を終了するサンプルプログラム。

数学をインポートする

時間からインポート時間

start_time = time()max_time = 2

def prime(n):

    for i in range(2, int(math.sqrt(n))):
        if(time() - start_time) > max_time:
            return "TLE"
        if n % i == 0:
            return False
    return True

print(prime(3900000076541747077))

于 2022-02-21T09:38:15.863 に答える
-2

より良い結果を得るには、Pythonで利用可能な「timeit」モジュールを使用してください。

于 2016-11-03T07:22:16.090 に答える