我对我的代码有问题,出于某种原因"结果"有时会带有某些古怪的数字,这是没有意义的。有更好的方法吗?
import random
number1 = random.randint(1,9)
operator = random.choice(r"+-*")
number2 = random.randint(1,9)
x1 = random.randint(1,9)
print(x1)
result = eval(str(number1)*int(x1) + operator + str(number2)*int(x1))
answer = x1
print("solve for x: {}x {} {}x = {}".format(number1, operator, number2, result))
print(number1*x1,operator,number2*x1,"=",result)
表达式 str(number1)*int(x1)
不做您认为的事情。它将number1
转换为字符串(一个数字从1到9),然后将其复制为x1
次,例如:
print(str(7)*3)
# '777'
因此,您需要在转换为字符串之前进行乘法,例如:
print(str(7*3))
# 21
或,将代码的主线更改为:
result = eval(str(number1*x1) + operator + str(number2*x1))
您应该知道eval
通常被视为危险工具。因此,您可能会做得更好:
import random, operator
operators = [
('+', operator.add),
('-', operator.sub),
('*', operator.mul)
]
number1 = random.randint(1, 9)
op_str, op_func = random.choice(operators)
number2 = random.randint(1, 9)
x1 = random.randint(1, 9)
print(x1)
result = op_func(number1 * x1, number2 * x1)
print("solve for x: {}x {} {}x = {}".format(number1, op_str, number2, result))
print(number1 * x1, op_str, number2 * x1, "=" , result)
import random
number1 = random.randint(1,9)
operator = random.choice(r"+-*")
number2 = random.randint(1,9)
x1 = random.randint(1,9)
print(x1)
result = eval(str(number1*x1) + operator + str(number2*x1))
answer = x1
print("solve for x: {}x {} {}x = {}".format(number1, operator, number2, result))
print(number1*x1,operator,number2*x1,"=",result)
我相信,原因是 eval
不起作用,将所有内容解释为字符串,并试图给出答案。在上面的代码中,我只是将eval
中所有内容的类型更改为字符串。
在此处阅读更多信息:在评估上
而不是做
result = eval(str(number1)*int(x1) + operator + str(number2)*int(x1))
我会做
result = eval(str(number1*x1) + str(operator) + str(number2*x1))