具有数学运算符的字符串在这里不起作用

时间:2018-09-23 08:21:51

标签: python math

我是Python的新手,所以我似乎无法运行以下程序

    import random
num1=0
num2=0

num1=int(random.randint(1,20))
num2=int(random.randint(1,20))
result=0
opr = ("*", "-", "+", "/")
print(random.choice(opr))
print(num1,num2)

if opr=="*":
    result = num1 * num2
if opr=="+":
    result = num1 + num2
if opr=="-":
    result = num1 - num2
if opr=="/":
    result = num1 / num2    
    print(result)

6 个答案:

答案 0 :(得分:1)

opr始终是运算符的列表。因此,您的if语句永远不会评估为true。更改此:

opr = ("*", "-", "+", "/")
print(random.choice(opr))

对此:

opr_list = ("*", "-", "+", "/")
opr = random.choice(opr_list)
print(opr)

您的代码将起作用。

答案 1 :(得分:0)

opr仍指4个运算符的整个元组-因此它不会通过任何if检查。您需要将一个新变量(甚至是opr本身)设置为random.choice(opr)并在if语句中使用它。

答案 2 :(得分:0)

代码中的一些内容:


首先,您无需初始化变量即可立即影响值。您可以更改:

num1=0
num2=0

num1=int(random.randint(1,20))
num2=int(random.randint(1,20))

num1=int(random.randint(1,20))
num2=int(random.randint(1,20))

,实际上,我将名称num1num2更改为其他名称,因为它们的含义很广)。


第二,您用opr初始化tuple,并且只打印随机选择,而不会影响它。

代替:

opr = ("*", "-", "+", "/")
print(random.choice(opr))

您应该这样做:

opr = ("*", "-", "+", "/")
chosen_operator = random.choice(opr)
print(chosen_operator)

实际上,您可以这样做:

chosen_operator = random.choice(("*", "-", "+", "/"))
print(chosen_operator)

最后,仅在选择/的情况下才打印结果:

if opr=="*":
    result = num1 * num2
if opr=="+":
    result = num1 + num2
if opr=="-":
    result = num1 - num2
if opr=="/":
    result = num1 / num2    
    print(result)

这应该更改为:

if opr=="*":
    result = num1 * num2
if opr=="+":
    result = num1 + num2
if opr=="-":
    result = num1 - num2
if opr=="/":
    result = num1 / num2    

# Note that it is not on the same level of indentation than in your code    
print(result)

答案 3 :(得分:0)

此代码应该可以解决问题

import random
num1=0
num2=0

num1=int(random.randint(1,20))
num2=int(random.randint(1,20))
result=0
opr = ("*", "-", "+", "/")
print(num1,num2)

newOpr = random.choice(opr)

print(newOpr)

if newOpr=="*":
    result = num1 * num2
if newOpr=="+":
    result = num1 + num2
if newOpr=="-":
    result = num1 - num2
if newOpr=="/":
    result = num1 / num2    
print(result)

您遇到问题的原因是因为random.choice(opr)并未将opr设置为来自元组的随机值。它只会生成一个,而对此不执行任何操作。将其分配给变量可以让您比较/更改其值等。

答案 4 :(得分:0)

我对您的代码进行了两项更改,并且按预期工作。

  1. 您没有将随机opr保存到新变量。你是 尝试使用此命令打印随机opr print(random.choice(opr)),它将打印随机的opr,但 它的值一直是元组。

  2. 我只是将条件更改为if and elf,以便如果第一个条件匹配,它将不会检查其他

import random
num1=0
num2=0

num1=int(random.randint(1,20))
num2=int(random.randint(1,20))
result=0
opr = ("*", "-", "+", "/")

print(num1,num2)
new_opr = random.choice(opr)
print(new_opr)


if new_opr=="*":
    result = num1 * num2
elif new_opr=="+":
    result = num1 + num2
elif new_opr=="-":
    result = num1 - num2
elif new_opr=="/":
    result = num1 / num2    
print(result)

答案 5 :(得分:0)

您缩进了它:

...
if opr=="/":
    result = num1 / num2    
    print(result)

应成为:

if opr=="/":
    result = num1 / num2    
print(result) # !!!