Как я могу использовать цикл while для многократного генерирования случайных вопросов? - PullRequest
2 голосов
/ 01 ноября 2019

Я начинающий программист, пытающийся создать свою маленькую забавную математическую игру, в которой генерируются два случайных числа и пользователю предлагается сложить их вместе. Если пользователь вводит правильный ответ на простой вопрос о сложении, цикл while повторяется. Проблема в том, что когда цикл сбрасывается, те же самые два числа из первого вопроса перерабатываются. Я хочу, чтобы числа менялись каждый раз при сбросе цикла, поэтому каждый раз, когда пользователь получает правильный ответ, задает уникальный вопрос.

Я извиняюсь за появление моего кода, если он плохой.

Я очень новичок в коде и не знаю, как объяснить, что я сделал в деталях. Я пытался использовать функцию def с randrange (1,1001), но это, похоже, не особо помогло. Я искал повсюду на различных форумах, и я действительно не знаю, что я могу сделать, чтобы это исправить.

import random

for x in range(1):
    Random = random.randint(1,1001)
    Random_two = random.randint(1,1001)
lit = (Random + Random_two)
answer = str(lit)

while answer == str(lit):
    print("What is " + str(Random) + " + " + str(Random_two) + "?")    
    userInput = input()

    if userInput == (str(lit)):
        print("Next question.")
        answer = str(lit)

    else:
        print("Game Over.")
        exit()

Типичные результаты будут выглядеть следующим образом:

What is 307 + 602?
909
Next question.
What is 307 + 602?
2
Game Over. #game will exit if the answer is wrong

Как видите, в вопросе совпадают два одинаковых числа, это повторяется бесконечно, если пользователь вводит правильныйответ.

Я ожидал, что результат будет примерно таким:

What is 307 + 602?
909
Next question.
What is 10 + 978? #new random numbers if the previous answer was correct

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Проблема здесь в коде:

for x in range(1):
     Random = random.randint(1,1001)
     Random_two = random.randint(1,1001)

Вы присваиваете случайные значения переменным только один раз за время выполнения программы. Таким образом, каждый раз, когда вы запускаете программу, вы получаете одинаковые значения. Посмотрите на программу ниже:

import random
while(True):
    rand1=random.randint(1,1001)
    rand2=random.randint(1,1001)    
    ans=int(input('what is '+str(rand1)+'+'+str(rand2)+'?\n'))
    if( ans == (rand1+rand2)):  
        print("The answer is \nNext Question correct:\n")
    else:
        print("Game Over\n")
        break

Здесь оператор while запускает бесконечный цикл, и поэтому на каждой итерации новым значениям присваиваются переменные, которые содержат случайные целые числа.

0 голосов
/ 01 ноября 2019

Ваша существенная проблема - поток управления. Вы должны спросить себя: какой код я хочу повторить? Вы хотите, чтобы каждый вопрос был уникальным, поэтому вы хотите, чтобы и генерация номера, и обработка вопроса повторялись.

Поскольку ваша петля while основана на том, что пользователь правильно ответил на вопрос, сначала вам нужно сгенерировать пару. Но вы можете основывать цикл на ничто (while True), а затем break вне цикла, если пользователь ответит на вопрос неправильно. Кроме того, for -иклуп совершенно не нужен:

while True:
    r1 = random.randint(1, 1001)
    r2 = random.randint(1, 1001)
    if input('What is ' + str(r1) + ' + ' + str(r2) + '? ') == str(r1 + r2)):
        print('Correct, next question.')
    else:
        print('Wrong. Game Over')
        break

Я просто немного сжал ваше состояние ради короче.

Надеюсь, это поможет.

PS: Да, мне было скучно, и мне было весело наблюдать за этим, так почему бы и нет.

...