2015-11-28 7 views
-2

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

import random 
score = 0 
questions = 0 
loop = 0 
classnumber = ("1", "2", "3") 
name = input("Enter Your Username: ") 
print("Hello, " + name + ". Welcome to the Arithmetic Quiz") 

classno = input("What class are you in?") 
while classno not in classnumber: 
    print(
     "Enter a valid class. The classes you could be in are 1, 2 or 3.") 
    classno = input("What class are you in?") 
while questions < 10: 
    for i in range(10): 
     number1 = random.randint(1, 10) 
     number2 = random.randint(1, 10) 
     op = random.choice("*-+") 
     multiply = number1*number2 
     subtract = number1-number2 
     addition = number1+number2 

     if op == "-": 
      print("Please enter your answer.") 
      questions += 1 
      print(" Question", questions, "/10") 
      uinput = input(str(number1)+" - "+str(number2)+"=") 
      if uinput == str(subtract): 
       score += 1 
       print("Correct, your score is: ", score,) 
      else: 
       print("Incorrect, the answer is: " + str(subtract)) 
       score += 0 

     if op == "+": 
      print("Please enter your answer.") 
      questions += 1 
      print(" Question", questions, "/10") 
      uinput = input(str(number1)+" + "+str(number2)+"=") 
      if uinput == str(addition): 
       score += 1 
       print(" Correct, your score is: ", score,) 
      else: 
       print(" Incorrect, the answer is: " + str(addition)) 
       score += 0 

     if op == "*": 
      print("Please enter your answer.") 
      questions += 1 
      print(" Question", questions, "/10") 
      uinput = input(str(number1)+" * "+str(number2)+"=") 
      if uinput == str(multiply): 
       score += 1 
       print(" Correct, your score is: ", score,) 
      else: 
       print(" Incorrect, the answer is: " + str(multiply)) 
       score += 0 
+0

В принципе, вы можете просто добавить 'for game_num в диапазоне (3):' перед частью вашего кода, которую вы хотите повторить, и отступом линии под ним на один уровень. В качестве альтернативы вы можете сделать повторную часть функцией и вызвать ее три раза. – martineau

+1

Что именно вы хотите повторить? У вас уже есть две петли в основной части кода, цикл while и цикл 'for', хотя, поскольку они подсчитывают одни и те же вещи эффективно (' questions' всегда идентичны 'i'), вы надеваете Не получится. – Blckknght

+0

Я имел в виду вопросы, так что для меня в дальности вещь – jazzathecutts

ответ

0

Во-первых, пожалуйста, рассмотрите возможность использования функций в вашем коде. Функции делают все более аккуратным, а функции помогают сделать код многоразовым.

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

Тем не менее, здесь пересмотренный вариант кода с некоторыми из этих предложений, реализованных:

import random 

def RunQuiz(): 
    name = input("Enter Your Username: ") 
    print("Hello, " + name + ". Welcome to the Arithmetic Quiz") 

    score = 0 
    questions = 0 
    loop = 0 
    classnumber = ("1", "2", "3") 
    classno = input("What class are you in?") 
    while classno not in classnumber: 
     print("Enter a valid class. The classes you could be in are 1, 2 or 3.") 
     classno = input("What class are you in?\n>>> ") 
    # End while input 

    # Run the 10 question quiz 
    for questions in range(1,11): 
     number1 = random.randint(1, 10) 
     number2 = random.randint(1, 10) 
     op = random.choice("*-+") 
     multiply = number1*number2 
     subtract = number1-number2 
     addition = number1+number2 

     print("Please enter your answer.") 
     print(" Question" + str(questions) "/10") 
     if(op == "-"): 
      # Subtraction 
      uinput = input(str(number1)+" - "+str(number2)+"=") 
      # Make it an int for proper comparison 
      uinput = int(uinput) 
      if uinput == subtract: 
       score += 1 
       print("Correct, your score is: %d" %(score,)) 
      else: 
       print("Incorrect, the answer is: " + str(subtract)) 
       score += 0 
     elif(op == "+"): 
      # Addition 
      uinput = input(str(number1)+" + "+str(number2)+"=") 
      uinput = int(uinput) 
      if uinput == addition: 
       score += 1 
       print(" Correct, your score is: %d" % (score,)) 
      else: 
       print(" Incorrect, the answer is: " + str(addition)) 
       score += 0 
     elif(op == "*"): 
      # Multiplication 
      uinput = input(str(number1)+" * "+str(number2)+"=") 
      uinput = int(uinput) 
      if uinput == multiply: 
       score += 1 
       print(" Correct, your score is: %d" % (score,)) 
      else: 
       print(" Incorrect, the answer is: " + str(multiply)) 
       score += 0 
     # End if(op) 
    # End For 10 questions 
    print("\nFinal Score: %d/10" % (score,)) 
# End RunQuiz() 

def main(): 
    # Run the quiz 10 times 
    for RunCount in range(3): 
     print("Running quiz #%d\n" % (RunCount,)) 
     RunQuiz() 
    # End For 
# End main 

# Call main on script execution 
main() 

Очевидно, что вы можете изменить код, чтобы удовлетворить ваши потребности. (Например, я не знал, хотите ли вы вводить номер класса & каждый раз).

0

Если вы хотите, чтобы все это для запуска 3 раза, затем положите for i in xrange(3): над первой строкой викторины, затем отложите остальную часть кода в цикле. Если это то, что вы на самом деле хотите. Удачи!

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