Простая математическая викторина в фитоне

#python

Вопрос:

Будучи абсолютным новичком, я столкнулся с некоторыми проблемами в своей простой математической викторине на python.

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

Вторая проблема: я объявляю переменную «оценка» и пытаюсь увеличить ее значение при каждом правильном ответе, но она не обновляется.

Третий вопрос : Я хочу прояснить предыдущий вопрос о выборе правильного варианта и задать новый вопрос.

Мой код таков :

 import random

def myFunction():
 score=0
 num1= random.randint(0,1000)
 num2= random.randint(1,1000)
 num2=num1
 if num1==num2:
   num2=num2 random.randint(0,50)
 print(num1, " " , num2, "= ?")
 result=num1 num2
 option1=result random.randint(1,25)
 option2=result random.randint(1,25)
 option3=result random.randint(1,25)
 d=result

 print("(a)", option1)
 print("(b)", option2)
 print("(c)", option3)
 print("(d)", result)
 value= input("Select the correct option n  Answer:")
 if value=="d":
  print("Correct Answer...!!")
  score =1                     #update score
  myFunction()
 else:
  result="d"
  print("Wrong Answer, Correct option is ","(",result,")")
  print("Your Score is : ", score)
  exit()

myFunction()
 

Комментарии:

1. по одному вопросу за раз, пожалуйста

2. Непонятно, чего вы здесь пытаетесь достичь. Вы могли бы сначала объяснить логику программы и показать, где вы застряли. (Узнайте, как задать вопрос…)

3. score сбрасывается каждый раз myFunction() , когда вызывается

4. Почему num2=num1 следует if num1==num2: ближе к началу программы (т. Е. Условное всегда будет истинным, так как вы установили num2 в num1)?

5. Можете ли вы объяснить, чего вы пытаетесь достичь, это непонятно. Объясните основную цель вашей программы и где она не работает, чтобы мы могли вам помочь.

Ответ №1:

Этот код работает со следующими изменениями:

  • Вы должны использовать цикл while для итеративного получения ответа от пользователя (в противном случае вы в конечном итоге превысите глубину рекурсии).
  • Это продолжается с неправильными ответами
  • Останавливается на первом правильном ответе
  • Если вы вводите пустую строку, она также останавливается (т. Е. предоставляет пользователю возможность выйти из программы).

Код

 import platform
import os
import sys
import random

def clear():
    '''
        Clears console
    '''
    system_ = platform.system()
    print('system_', system_)
    if system_ == 'Windows':
        os.system('cls')
    else:
        # Linux or Mac
        os.system('clear')
        
def myFunction():
     score=0
        
    # Use while loop rather than recusively calling function
     while True:
        # Select two numbers
        num1= random.randint(0,1000)
        num2= random.randint(1,1000)

        if num1==num2:
            num2=num2 random.randint(0,50)
           
        print('clear the screen')
        clear()                               # Clear console
        
        print(num1, " " , num2, "= ?")
        result = num1   num2                  # the answer for sum
        option1 = result   random.randint(1,25)
        option2 = result   random.randint(1,25)
        option3 = result random.randint(1,25)
    
        # options for sum
        options = [option1, option2, option3, result]   
        
        # Place options in random order
        random.shuffle(options)
        choices = "abcd"
        for choice, option in zip(choices, options):
            print(f"{choice} {option}")
        
        value= input("Select the correct option (or blank line to quit) n  Answer:")
        
        while value and value not in choices:   # checks for blank line and if entry in choices
            print("Select letter from ", *choices)
            value= input("Select the correct option (or blank line to quitn  Answer:")
            
        if value is None:
            # Blank line
            print(f'Final score was {score}')
            break   # done with while loop
            
        index = choices.index(value)

        if options[index] == result:
          print("Correct Answer...!!")
          score  = 1                     #update score
          print(f"Your Score is : {score}")

        else:
          print(f"Wrong Answer, Correct option is ({result})")
          print(f"Your Score is : {score}")
           
myFunction()
 

Ответ №2:

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

  import random

def myFunction():
 global score
 num1= random.randint(0,1000)
 num2= random.randint(1,1000)
 # num2=num1
 if num1==num2:
   num2=num2 random.randint(0,50)
 print(num1, " " , num2, "= ?")
 result=num1 num2
 option1=result random.randint(1,25)
 option2=result random.randint(1,25)
 option3=result random.randint(1,25)
 d=result
 
 choice = [option1,option2,option3,result]
 random.shuffle(choice)

 print("(a)", choice[0])
 print("(b)", choice[1])
 print("(c)", choice[2])
 print("(d)", choice[3])
 value= input("Select the correct option n  Answer:")
 if (value == "a" and d == choice[0]) or (value == "b" and d == choice[1]) or (value == "c" and d == choice[2]) or (value == "d" and d == choice[3]):
   print("Correct Answer...!!")
   score =1                     #update score
 else:
  result= d
  print("Wrong Answer, Correct option is ","(",result,")")
  print("Your Score is : ", score)
  exit()
score = 0
while True:
  myFunction()
  print("Score : ", score)enter code here
 

Ответ №3:

Этот код сначала сохраняет ответ в случайном варианте, а затем переменной ответа присваивается значение параметра, т. е. a,b,c или d. Я добавил переменную оценки в качестве параметра в функцию, и каждый раз, когда дается правильный ответ, значение параметра будет установлено равным баллу

 import random


def myFunction(score=0):
 
 num1 = random.randint(0,1000)
 num2 = random.randint(1,1000)
 if num1==num2:
   num2=num2 random.randint(0,50)
 print(num1, " " , num2, "= ?")
 result=num1 num2

 option1=result random.randint(1,25)
 option2=result random.randint(1,25)
 option3=result random.randint(1,25)
 option4=result random.randint(1,25)
 answer = random.randint(1,5)
 if answer==1:
   option1 = result
   answer = 'a'
 if answer==2:
   option2 = result
   answer = 'b'
 if answer==3:
   option3 = result
   answer = 'c'
 if answer==4:
   option4 = result
   answer = 'd'

 print("(a)", option1)
 print("(b)", option2)
 print("(c)", option3)
 print("(d)", option4)
 value= input("Select the correct option n  Answer:")
 if value==answer:
  print("Correct Answer...!!")
  score = score   1                     #update score
  myFunction(score)
 else:
  result=answer
  print("Wrong Answer, Correct option is ","(",result,")")
  print("Your Score is : ", score)
  exit()   

myFunction()
 

Комментарии:

1. Пожалуйста, объясните, что делает ваш код для решения проблем.

2. Сначала он сохраняет ответ в случайном варианте, а затем переменной ответа присваивается значение параметра, т. е. a,b,c или d. Я добавил переменную оценки в качестве параметра в функцию, и каждый раз, когда дается правильный ответ, значение параметра будет равно баллу.

3. Спасибо за помощь… в коде есть небольшая проблема, по первым двум или трем вопросам все идет гладко, но позже в коде появляется ошибка..