python eval()无法正确乘以



我对我的代码有问题,出于某种原因"结果"有时会带有某些古怪的数字,这是没有意义的。有更好的方法吗?

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))

最新更新