Python: how to make python calculate a sum to make sure an input is correct?
Question: I want to make python ask 10 questions and a user to have to input their
answers which works. However I also want python to say whether this is correct
or not by using the code below but this does not work and only moves onto the
next question. Could anybody tell me why? Or what I need to change? Also how
do I make this ask 10 question specifically using the variables I have and a
while loop?

    
    
    import time
    import random
    question = 0
    score = 0
    name = input("What is your full name?")
    print ("Hello " + name, "welcome to The Arithmetic Quiz")
    time.sleep(2)
    operand1 = list(range(2, 12))
    operators = ["+"]
    operand2 = list(range(2, 12))
    
    while question < 10:
        user_answer=int(input(str(random.choice(operand1)) + random.choice(operators) + str(random.choice(operand2))))
        if operators=='+':
            expected_answer==operand1 + operand2
            if user_answer==expected_answer:
                print('This is correct!')
                score = score + 1
                question = question + 1
                time.sleep(2)
            else:
                print('This is incorrect!')
                question = question + 1
                time.sleep(2)
    


Answer: All of your comparisons in your `while` statement are being done against
`list`s instead of the randomly chosen element.

You likely want to do something like this:

    
    
    operands1 = list(range(2, 12))
    operators = ["+"]
    operands2 = list(range(2, 12))
    
    while question < 10:
        operand1 = random.choice(operands1)
        operand2 = random.choice(operands2)
        operator = random.choice(operators)
        user_answer = int(input('{} {} {} '.format(operand1, operator, operand2)))
        if operator == '+':
            expected_answer = operand1 + operand2
            if user_answer == expected_answer:
                print('This is correct!')
                score = score + 1
                question = question + 1
                time.sleep(2)
            else:
                print('This is incorrect!')
                question = question + 1
                time.sleep(2)
    

There are many other ways to improve the structure of the code, which might
make it look like this:

    
    
    import operator as ops
    import time
    import random
    
    NUM_QUESTIONS = 10
    OPERANDS = list(range(2, 12))
    OPERATORS = {'+': ops.add, '-': ops.sub, '*': ops.mul}
    
    def getInteger(prompt, errormsg='Please input an integer'):
        while True:
            try:
                return int(input(prompt))
            except ValueError:
                print(errormsg)
    
    def main():
        question = score = 0
    
        name = input('What is your full name? ')
        print('Hello {}, welcome to The Arithmetic Quiz'.format(name))
        time.sleep(2)
    
        for _ in range(NUM_QUESTIONS):
            operand1 = random.choice(OPERANDS)
            operand2 = random.choice(OPERANDS)
            operator = random.choice(list(OPERATORS))
    
            user_answer = getInteger('{} {} {} '.format(operand1, operator, operand2))
            expected_answer = OPERATORS[operator](operand1, operand2)
            if user_answer == expected_answer:
                print('This is correct!')
                score += 1
            else:
                print('This is incorrect!')
            time.sleep(2)
    
    if __name__ == '__main__':
        main()
    

This uses a dedicated `getInteger` function to handle invalid input, uses a
dictionary and functions being first-class objects to choose which "actual"
operator function to use, uses `+=`, uses `range` and `for`, instead of a
`while` loop, uses sane constants...the list of possible improvements is
large.

