2015-02-24 4 views
0

Я хочу, чтобы мои вопросы были случайными все время, однако они продолжают повторяться. Наряду с этим, оператор if, который исправляет пользователя, если ответ неверен, по-прежнему исправляет пользователя, если он правильный.Python - Случайные вопросы продолжают повторяться

FirstNo=random.randint(1,12) 
SecondNo=random.randint(1,12) 
ops=[['+', operator.add], ['-', operator.sub], ['*', operator.mul]] 
op=random.choice(ops) 

for i in range(1,11): 
    print('Question '+str(i)) 
    pupilAns=input('What is '+str(FirstNo)+str(op[0])+str(SecondNo)+'? ') 
    realAns=op[1](FirstNo, SecondNo) 
    if pupilAns==realAns: 
     score=score+1 
     print('Well Done '+FN+'!') 
    else: 
     print("Wrong Answer "+FN+'. It was '+str(realAns)) 

Вот полный код

import random 
import operator 
score=0 #Score for Quiz 

FN=input(str('What is your First Name:')) 
while FN=='': 
    FN=input(str('Please enter your First Name:')) 
    DigitFound=True 
    while DigitFound==True: 
     FN=input(str('Please enter your First Name:')) 
     for digit in FN: 
      if digit.isdigit(): 
       DigitFound=True 
       break 
      else: 
       DigitFound=False 

LN=input(str('What is your Last Name:')) 
while LN=='': 
    LN=input(str('Please enter your Last Name:')) 
    DigitFound=True 
    while DigitFound==True: 
     LN=input(str('Please enter your Last Name:')) 
     for digit in LN: 
      if digit.isdigit(): 
       DigitFound=True 
       break 
      else: 
       DigitFound=False 

Status=False 
CN=input('What is your Class Name? Class 1, Class 2, or Class 3:') 
while Status==False: 
    if CN=='Class 1' or CN=='Class 2' or CN=='Class 3': 
     Status=True #Break out of the loop and continue to the quiz 
    else: 
     CN=input('What is your Class Name? Class 1, Class 2, Class 3:') 

FirstNo=random.randint(1,12) 
SecondNo=random.randint(1,12) 
ops=[['+', operator.add], ['-', operator.sub], ['*', operator.mul]] 
op=random.choice(ops) 

for i in range(1,11): 
    print('Question '+str(i)) 
    pupilAns=input('What is '+str(FirstNo)+str(op[0])+str(SecondNo)+'? ') 
    realAns=op[1](FirstNo, SecondNo) 
    if pupilAns==realAns: 
     score=score+1 
     print('Well Done '+FN+'!') 
    else: 
     print("Wrong Answer "+FN+'. It was '+str(realAns)) 
+0

Вы начали()? – zubergu

ответ

0

Чтобы избежать ваших вопросов от повторения, вы должны поместить свои random.randint и random.choice звонки в петлю for. Функции в Python (и каждый другой язык afaik) оцениваются по вызову, поэтому переменные FirstNo, SecondNo и op заполнены значением, возвращаемым их соответствующими функциями.

Затем на каждой итерации в for -loop значения никогда не изменяются. Поэтому они остаются неизменными.

+1

Благодарим вас за помощь. – UserIsMe

2

Вы должны выбрать случайные числа внутри цикла. Все, что вы делаете, выбирает случайные числа один раз, а затем задает вопрос 10 раз.

1

Другие ответили, почему вопрос не случайный, поэтому я не буду рассматривать эту часть вашего вопроса.

Вы получаете "Wrong Answer "... распечатывается, даже если пользователь дает правильный ответ, потому что вы сравниваете строку с номером: pupilAns является строкой, но realAns целое. Поэтому вам нужно либо конвертировать pupilAns в int, либо конвертировать realAns в str, прежде чем вы выполните тест if pupilAns==realAns:. Я бы, вероятно, сделал первый, и напечатал сообщение об ошибке, если pupilAns не может быть преобразован в int.

+0

Увы! Он работает, спасибо за вашу помощь. – UserIsMe

Смежные вопросы