Skip to content
Advertisement

python quiz validation not working

The validation doesnt work. im not sure why, is there a way to validate a string. The questions asked are endless i need 10 questions to be asked

import random

name=(input("Please enter your name"))
print("welcome",name,"the arithmetic is about to start")

question=0


while question<10:
    number=random.randint(1,10)
    numbers=random.randint(1,10)
    arith=random.choice("+" "-" "/")

if arith=="+":
    print(number,arith,numbers)
    answer=number+numbers





if arith=="-":
    print(number,arith,numbers)
    answer=number-numbers



if arith=="/":
    print(number,arith,numbers)
    answer=number/numbers



while True:
        try:     
            usersanswer= int(input())
        except ValueError:
            print ("That is not a valid answer")
            continue
        if usersanswer==answer:
            print("correct")
            break
    else:
        print("incorrct")

The validation doesnt work. im not sure why, is there a way to validate a string

Advertisement

Answer

In the third line, you ask for input. But a name is a string, so you need raw_input. raw_input takes strings, input only takes numerical values. Python 2.7 getting user input and manipulating as string without quotations

Nowhere in your code do you update the variable questions, which I am guessing is a counter. You have to update that whenever a question is asked, using question += 1.

Finally, your code at the end does not really make sense. Based off the code, it checks for whether or not it is a string, but then compares it to the answer regardless. The if statement needs to be within the try.

The else statement does not match any outer indentation.

Finally, because of the while True: your code will never exit the loop unless the answer is wrong. At the point the entire program terminates. I see what kind of program you are trying to write, but the parameters for random number generation have to be within some kind of a while question <= 10 loop. As of now, only two lines in the program are being affected by that first while loop.

EDIT: I am working on a good example code. Hopefully this answer will help until I can finish it. EDIT: Here is code that shows how it works within a while loop.

import random
from random import randint

name = raw_input("Hi, what is your name?n") # Asks for name
print "Hi " +name+ " let's get started!"

score_count = 0
question_count = 0 # creates counter
while question_count <= 10: # Everything MUST BE WITHIN THIS LOOP
    # makes numbers and operator
    first_number = randint(1,10)
    second_number = randint(1,10)
    oper = random.choice("+""-""*")
    # determines the problem
    if oper == "+":
        answer = first_number + second_number
        print first_number,second_number,oper
    elif oper == "-":
        answer = first_number - second_number
        print first_number,second_number,oper
    elif oper == "*":
        answer = first_number*second_number
        print first_number, second_number, oper
    user_answer = int(raw_input("Your answer: "))
    if user_answer != answer: 
        print 'Wrong answer! try again!'
        user_answer = int(raw_input('Your answer: '))
    if user_answer == answer: # exits the while loop when the correct answer is given
        if question_count < 10:
            print 'Well done! Now onto question number {0}'.format(question_count+1)
            score_count += 1
        elif question_count == 10:
            print 'Well done! You are done!'
            score_count += 1
    else:
        print 'Something is wrong.'
    question_count += 1 # updates the variable
    # GOES BACK TO THE BEGINNING UNTIL question_count IS GREATER THAN OR EQUAL TO 10
print "Your score was: {}".format(score_count)

Happy coding! and best of luck!

Advertisement