简体   繁体   中英

How would I assign the list of operators so that the random numbers are worked out to tell the user if they're correct or not?

How would I assign the list of operators so that the random numbers are worked out to tell the user if they're correct or not?

    # Controlled Assessment - Basic Times Table Test
import random

score = 0

print ("Welcome to the times table test")

name = input("Please type your name: ")


print ("How to play")
print ("Step 1: When you see a question work out the answer and type it in the space.")
print ("Step 2: Once you have typed your answer press the enter key.")
print ("Step 3: The program will tell you if you're right or wrong.")
print ("Step 4: The next question will load and you can repeat from step 1.")
print ("When you have answered all 10 questions your final score will be    printed.")




for q in range(10):
    Number1 = random.randint(1,12)
    Number2 = random.randint(1,12)
    ListOfOperator = ['+','-','*']
    Operator =random.choice(ListOfOperator)
    print ('what is' ,Number1,Operator,Number2)
    Answer= input ("Please Type Your Answer: ")

realanswer = (Number1,Operator,Number2)

if ListOfOperator:
    ListOfOperator=['+'] = Number1+Number2
    ListOfOperator=['-'] = Number1-Number2
    ListOfOperator=['*'] = Number1*Number2




if Answer==realanswer:
    print("Your answer is correct")
    score = score + 1
    print (score)
else:
    print("Your answer is incorrect, the correct answer is.",realanswer,".")
    print (score)

The code that needs to assign to the list of operators is...

    if ListOfOperator:
    ListOfOperator=['+'] = Number1+Number2
    ListOfOperator=['-'] = Number1-Number2
    ListOfOperator=['*'] = Number1*Number2

It should work out the answer to each question using the function I'm telling the program that if the operator from the operator list is * to work out Number1*Number2

The current output for telling them if the answer is correct or not prints

Your answer is incorrect, the correct answer is Number1*Number2.

when if the question is what is 10*3 it should be printing

Your answer is incorrect, the correct answer is 30.


Now that I have this code...

if Operator == '+':
    realanswer = Number1+Number2
elif Operator == '-':
    realanswer = Number1-Number2
elif Operator == '*':
    realanswer = Number1*Number2




if Answer==realanswer:
    print("Your answer is correct")
    score = score + 1
    print (score)
else:
    print("Your answer is incorrect, the correct answer is.",realanswer,".")
    print (score)

The program always prints that the question is incorrect even with the correct answer inputted, it will then print the correct answer, how would I make it so that It would tell them if it's correct too?

The operator module implements basic operations as functions. Define a dict that maps operator symbols such as "+" to the operator function then use that map to do the calculation.

import random
import operator

op_map = {'+':operator.add, '-':operator.sub, '*':operator.mul}
op_list = list(op_map.keys())

score = 0

print ("Welcome to the times table test")

name = input("Please type your name: ")

print ("How to play")
print ("Step 1: When you see a question work out the answer and type it in the space.")
print ("Step 2: Once you have typed your answer press the enter key.")
print ("Step 3: The program will tell you if you're right or wrong.")
print ("Step 4: The next question will load and you can repeat from step 1.")
print ("When you have answered all 10 questions your final score will be    printed.")

for q in range(10):
    Number1 = random.randint(1,12)
    Number2 = random.randint(1,12)
    Operator =random.choice(op_list)
    print ('what is' ,Number1,Operator,Number2)
    while True:
        try:
            Answer= int(input("Please Type Your Answer: "))
            break
        except ValueError:
            print("Must be an integer... try again...")

    realanswer = op_map[Operator](Number1, Number2)

    if Answer==realanswer:
        print("Your answer is correct")
        score = score + 1
        print (score)
    else:
        print("Your answer is incorrect, the correct answer is.",realanswer,".")
        print (score)

To perform multiple check like this you can use if, elif statements:

if Operator == '+':
    realanswer = Number1+Number2
elif Operator == '-':
    realanswer = Number1-Number2
elif Operator == '*':
    realanswer = Number1*Number2

For your reference: Python Docs

...

def realanswer(Num1, Op, Num2):
    return {
        '+': Num1 + Num2,
        '-': Num1 - Num2,
        '*': Num1 * Num2,
    }[Op]

for q in range(2):
    Number1 = random.randint(1,12)
    Number2 = random.randint(1,12)
    ListOfOperator = ['+','-','*']
    Operator =random.choice(ListOfOperator)
    print ('what is',Number1,Operator,Number2)
    userInput = input("Please Type Your Answer: ")
    Answer = 0
    try:
        Answer = int(userInput)
    except ValueError:
        print("Input not convertible to int!")
    rAnswer = realanswer(Number1,Operator,Number2)
    if Answer == rAnswer:
        print("Correct!")
    else:
        print("Incorrect...")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM