让python从字符串中提问

时间:2016-03-16 08:59:11

标签: python string list random input

我想让python向用户提问 - 来自列表中的随机变量。 它需要询问需要用户输入的问题。

到目前为止,这是我的代码:

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) 
numbers = list(range(1, 50)) 
operators = ["+", "-", "*"] 
numbers1 = list(range(1,10)) 
print(str(random.choice(numbers)) + random.choice(operators) + str(random.choice(numbers1)))`

如何让最后一行代码提出问题并从用户那里获得输入?

另外我怎么做才能让python说当我不知道python会问什么时这是否正确?

2 个答案:

答案 0 :(得分:4)

答案已在您的代码中。

user_input = input(str(random.choice(numbers)) + random.choice(operators) + str(random.choice(numbers)) + "? ")应该有用。

numbers获取一个样本随机数,从operators获取一个随机运算符,从numbers获取另一个随机数,并将输入存储到变量user_input

要让Python检查你的答案,将随机生成的参数存储在变量中并检查它们。 (如果有更好的方法,如果有人向我指出,我会很感激。)

operand1 = random.choice(numbers)
operand2 = random.choice(numbers)
operator = random.choice(operators)

if operator == '+':
    answer = operand1 + operand2
elif operator == '-':
    answer = operand1 - operand2
else:
    answer = operand1 * operand2

user_input = input(str(operand1) + operator + str(operand2) + "? ")

if str(answer) == user_input:
    print('Correct!')
else:
    print('Wrong!')

编辑:@mhawke's answer有更好的存储和操作操作数的方法。不是将运算符存储在列表中,而是将它们存储在dict中,并将它们映射到相应的运算符函数,如下所示:

import operator

operators = {"+": operator.add, "-": operator.sub, "*": operator.mul}
operand1 = random.choice(numbers)
operand2 = random.choice(numbers)
op = random.choice(operators)
expected_answer = op(operand1, operand2)

operator的文档。

答案 1 :(得分:1)

对于问题的第二部分,如何确定用户是否输入了正确答案,您可以存储随机选择的值并评估结果表达式。然后将其与用户的值进行比较:

import operator

operators = {"+": operator.add, "-": operator.sub, "*": operator.mul}

operand1 = random.choice(numbers)
operand2 = random.choice(numbers1)
op = random.choice(operators)
expected_answer = op(operand1, operand2)

user_answer = input('{} {} {} = ?: '.format(operand1, op, operand2)
if int(user_answer) == expected_answer:
    print('Correct!')
else:
    print('Wrong. The correct answer is {}'.format(expected_answer)

运算符存储在字典中。运算符标记(+, - ,*)是此字典中的键,值是来自执行操作的operator模块的函数。使用这样的字典非常灵活,因为如果你想支持一个新的运算符,例如除法,你可以将它添加到operators字典:

operators = {"+": operator.add, "-": operator.sub, "*": operator.mul, '/': operators.div}