import sys
import random
Num1 = str(random.randint(1,109))
Num2 = str(random.randint(1,109))
Opp = ["+", "-", "*", "^", "/"]
secure_random = random.SystemRandom()
Operator = secure_random.choice(Opp)
if Operator == "^":
Num2 = "2"
print ("som:", Num1 , Operator , Num2, "= ")
我创建了一些变量,其中一个是opperator,我打印但现在我必须计算它... 我尝试使用eval() 但我无法让这个工作 我该如何计算这笔金额?
答案 0 :(得分:0)
在这种特殊情况下,您确实可以使用eval
,尽管通常您希望尽可能避免使用它,因为没有安全检查执行什么字符串表达式。
您的锻炼是s = Num1+Operator+Num2
。你可以通过字符串eval(s)
的中间声明,或者通过在eval中键入右边来s
。{/ p>
答案 1 :(得分:0)
您还可以在Python中使用类似堆栈的功能来创建自己的计算器。下面是计算器的一个简单示例:
它可以计算这些表达式:
"1 - 2 * 3 + 4 * 2 - 1 - 2"
"8 / 2 + 1 / 2 * 2 / 2 - 1"
在这个简单的实现中,空格用于分隔标记。下面的源代码中提供了更多测试:
def calc(str):
tokens = str.split(" ")
vals = []
ops = []
i = 0
while i < len(tokens):
t = tokens[i]
if t == "+":
processPlus(ops, vals)
elif t == "*":
ops.append(t)
elif t == "-":
processPlus(ops, vals)
i, t = incrementAndGet(i, t, tokens)
vals.append(float(t) * -1)
elif t == "^":
previousVal = vals.pop()
i, t = incrementAndGet(i, t, tokens)
vals.append(pow(previousVal, float(t)))
elif t == "/":
previousVal = vals.pop()
i, t = incrementAndGet(i, t, tokens)
vals.append(previousVal / float(t))
else:
vals.append(float(t))
i += 1
while len(ops) > 0:
processOp(vals, ops)
return sum(vals)
def incrementAndGet(i, t, tokens):
i += 1
t = tokens[i]
return i, t
def processPlus(ops, vals):
if len(ops) > 0:
processOp(vals, ops)
ops.append("+")
def processOp(vals, ops):
op = ops.pop()
if op == "+":
vals.append(vals.pop() + vals.pop())
elif op == "*":
vals.append(vals.pop() * vals.pop())
# Test section
def check(expr, expected):
res = calc(expr)
print(res)
assert res == expected
check("8 / 2 / 2 / 2", 1.0)
check("8 / 2 + 1 / 2 / 2", 4.25)
check("8 / 2 + 1 / 2 * 2 / 2", 4.5)
check("8 / 2 + 1 / 2 * 2 / 2 - 1", 3.5)
check("1 + 2", 3)
check("1 - 2", -1)
check("2 * 3", 6)
check("1 + 2 * 2", 5)
check("2 * 3 + 2", 8)
check("1 * 2 + 2 * 3", 8)
check("1 * 2 + 2 * 3 + 1", 9)
check("1 * 2 + 2 * 3 + 1 + 2", 11)
check("1 * 2 + 2 * 3 + 1 + 2 * 2", 13)
check("1 - 2 * 3 + 4 * 2 - 1 - 2", 0.0)
check("1 - 2 * 3 + 4 * 2 - 1 - 2 * 2", -2.0)
check("1 - 2 * 3 + 4 * 2 - 1 - 2 * 2 - 3", -5.0)
check("2 ^ 2", 4.0)
check("2 + 3 ^ 2", 11.0)
check("2 + 3 ^ 2 - 1", 10.0)
check("2 + 3 ^ 2 - 1 * 3", 8.0)
答案 2 :(得分:0)
eval()
不支持运营商^
,但您可以使用它。
import sys
import random
Num1 = str(random.randint(1,109))
Num2 = str(random.randint(1,109))
Opp = ["+", "-", "*", "^", "/"]
secure_random = random.SystemRandom()
Operator = secure_random.choice(Opp)
if Operator == "^":
Operator = "*"
Num2 = Num1
result = eval(Num1+Operator+Num2)
print ("som:", Num1 , Operator , Num2, "= ", result)