Python 如何使用算术符号而不是内置函数

Python 如何使用算术符号而不是内置函数,python,math,Python,Math,我正在用python做一个数学测验,我正在使用3个操作符:加法、减法和乘法。我想使用算术运算符,但我发现这很困难,因为如果我只是打印它,python只是将其作为符号读取。我使用以下代码: import random import operator opslist = [ # This is the bit that I want to change, i also want operator.add, # the operators all on one lin

我正在用python做一个数学测验,我正在使用3个操作符:加法、减法和乘法。我想使用算术运算符,但我发现这很困难,因为如果我只是打印它,python只是将其作为符号读取。我使用以下代码:

import random
import operator
opslist = [          # This is the bit that I want to change, i also want 
    operator.add,    # the operators all on one line
    operator.sub,
    operator.mul
]

num1 = random.randint(1,10)  # These are two random numbers for my quiz
num2 = random.randint(1,10)
ops = random.choice(opslist) #Random operator for my quiz

total = (ops(num1,num2))    # Answer for my quiz

print (num1,ops,num2)       # Random question for my quiz
以下是输出:

6 <built-in function add> 5
65
1.)如何使输出为“6+5”


2.)另外,我如何使数字只进行小的计算,从而得到肯定的答案,这样问题就永远不会是“5-8”之类的问题。

您可以使用字典将操作映射到其符号表示形式。您还可以为减法添加一些逻辑,以确保
num2
低于
num1

import random
import operator
ops = {
    operator.add: '+', 
    operator.sub: '-',
    operator.mul: '*'
}
num1, num2 = random.randint(1, 10), random.randint(1, 10)
op = random.choice(ops.keys())
if op != operator.sub or num2 <= num1:
    print "%d %s %d = %d" % (num1, ops[op], num2, op(num1, num2))

我会在你的代码中使用字典。这就是我所做的

import random
import operator

opslist= {
    operator.add: "+",    # the operators all on one line
    operator.sub: "-",
    operator.mul: "x"
}

num1 = random.randint(1,10)  # These are two random numbers for my quiz
num2 = random.randint(1,10)
ops = random.choice(list(opslist.keys())) #Random operator from opslist keys

total = (ops(num1,num2)) # Answer for my quiz

print(num1,opslist[ops],num2)
打印问题时,程序会为操作员打印出标志。为确保不会出现负数,请将此项添加到“总计”下:

while total < 0:
    num1 = random.randint(1,10)
    num2 = random.randint(1,10)
    ops = random.choice(opslist)

    total = (ops(num1,num2))
总数<0时:
num1=random.randint(1,10)
num2=随机的随机数(1,10)
ops=随机选择(opslist)
总计=(运营(num1,num2))

您可以用其中一个替换打印以获得不带引号的“干净”输出:
打印(%d%s%d=%d”%(num1,ops[op],num2,op(num1,num2))
或者如果您不想破坏答案:
打印(%d%s%d%)(num1,ops[op],num2))
看起来不错!michealpri的答案有一种更好的方法,可以在不满足约束条件的情况下生成新的num1,num2集(例如num2op=random.choice(ops.keys())是问题所在。您正在使用python3。更改为
op=random.choice(list(ops.keys())
是否有方法将“opslist”和opslistsymbols”组合在一起,这样我就可以使用更少的行数并提高代码的效率?错误:打印(num1,opslistsymbols[ops],num2)NameError:name'opslistsymbols'未定义micheal你能回答我帐户上的其他问题吗?Michealpri你是负数代码对我来说效率不高。这是因为我在重复我之前声明的所有变量,如num1、num2等。有没有办法避免负数,而不重复代码,这样就可以了有效率的
while total < 0:
    num1 = random.randint(1,10)
    num2 = random.randint(1,10)
    ops = random.choice(opslist)

    total = (ops(num1,num2))