Tengo una tarea que hacer y realmente necesito una solución. He estado tratando de hacer esto desde ayer, pero no sé cómo.

Programa para generar e imprimir una letra o un número y, a continuación, un usuario tiene que escribir tan rápido como sea posible y presione ENTRAR. El juego termina después de 30 segundos.

Bueno, yo no sé cómo poner límite de tiempo para un juego. Yo estaba buscando a través de stackoverflow y no he encontrado nada útil. Por favor me ayude.

**Aquí es lo que he hecho hasta ahora. He probado el código de la respuesta por SYSS.STDER, pero no acaba de funcionar porque cuando los 30 segundos, el juego también debe ser largo, pero aquí en este código, el juego se acaba cuando yo escriba el último carácter.

BUCLE NO VA A PARAR HASTA QUE TERMINE Y DESCUBRIMOS QUE SOMOS MÁS ALLÁ DE NUESTRO LÍMITE. LA TAREA TIENE QUE SER INTERRUMPIDO EN EL PROGRESO TAN PRONTO COMO EL TIEMPO QUE TRANSCURRE.

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
  • Este es ahora el mejor enunciado de que original. Aún así, desde la que ya se llevó a la sugerencia de que se trate de un bucle, la pregunta sigue siendo: ¿Qué has intentado hasta ahora al respecto?
  • Puede alguien mirar mi código y me ayude por favor?
  • Así que aparte de un poco de re-factorizar sys.stderr la respuesta – en los últimos 21 horas – ¿qué has tratado de resolver esto?
  • Jon Clements. Soy nuevo en python y necesito un poco de ayuda. Por favor, usted puede resolver este problema que tengo. Yo estaría muy agradecido de ella.
  • Mantener con esta base de código. El juego terminará sólo cuando hay un último personaje porque input es el bloqueo, que significa que no va a volver hasta que algo se ha introducido, por lo que podría funcionar y no hacer nada por un par de horas… no te preocupes por eso (corto de utilizar el roscado/sondeo estás atascado con ella (y eso no es tarea de nivel de técnicas). Para la implementación se – comprobar en el momento de incremento de la puntuación que usted todavía está por debajo de max_time
  • Jon Clements. También he corregido la condición. Pero hay que termina el programa y no tiene para la entrada de algo?
  • como @Jon Clements señaló, conseguir alrededor de este problema requiere un poco más de Python que lo que has cubierto. Si usted no está familiarizado con el signal módulo, entonces yo no me preocuparía por eso. Esto es lo que el «(Después de 30 segundos programa debe ofrecer a los usuarios escribir una última carta/número, pero no puede ser contado en los resultados)» línea estaba tratando de decir que usted no tiene que interrumpir input(), usted simplemente tiene que asegurarse de que si el usuario pulsa enter después de 30 s de la puntuación no cuenta. Me gustaría que en lugar de empezar a trabajar en las partes de la pregunta relacionada con los archivos.
  • no muy seguro acerca de la cosa – que probablemente iba a trabajar en las estadísticas requeridas siguiente (mientras esta todavía está fresco para el OP) y, a continuación, al menos si se trata de una asignación incompleta, que va a ser auto-contenida y funcional en un sentido…
  • seguro, que va a funcionar también, y usted está probablemente en lo cierto en que tiene un mejor modo de fallo.
  • Qué sistema operativo estás usando. Una manera de resolver esto es, ser capaz de detectar si el usuario ha pulsado una tecla o no, y hacer que se OS dependientes.
  • Estoy usando Windows 7. Muchas gracias!

InformationsquelleAutor Miki | 2012-12-15

3 Comentarios

  1. 4

    Esta es mi manera de hacerlo:

    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
    • El OP de la tarea es el uso de Python 3, por lo que raw_input tiene que ser input lugar, creo.
    • Tendría que comprobar que, estoy actualmente usando python 2.7, en la que ìnput evaluará la entrada mientras que raw_input le dará la exacta cadena introducida por el usuario. en busca de la que hasta ahora.
    • Tienes razón, no hay raw_input en python 3. (docs.python.org/release/3.2.3/library/functions.html)
  2. 0

    Ya que usted está utilizando Windows, puede utilizar el msvcrt.kbhit función para comprobar las pulsaciones de teclas en el interior de temporización de bucles:

    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))

Dejar respuesta

Please enter your comment!
Please enter your name here