2014-10-16 26 views
1

我看到你的位解释如何导入这些东西,并使用它们生成一个随机数,但你能解决这个问题。这是我的程序(的起始阶段):Python程序,用户友好查询

import random 
from operator import add, sub, mul 
for x in range(10): 
    ops = (add, sub, mul) 
    op = random.choice(ops) 
    num1, num2 = random.randint(1,10), random.randint(1,10) 
    int(input("What is %s %s %s?\n" % (num1, op, num2))) 
    ans = op(num1, num2) 

然而,当我执行此代码,这是印刷:什么是8 1? 我想知道如何以一种用户友好的方式高效地打印此文件,例如: “什么是8加1?”

谢谢你,如果你解决这个问题!

+2

@Cyber​​虽然应该指出,该重复的相关答案是[yours](http://stackoverflow.com/a/26261125/1599111),而不是接受的答案。 OP已经看到了灯光,并且正在使用'operator'模块而不是'eval',因此将函数映射到字典中的符号是下一个逻辑步骤;-) – 2014-10-16 20:37:56

+0

您希望它作为“**什么是8加1?**“或”什么是8加1?“因为它工作正常。 [ideone.link](http://ideone.com/o1jIEN) – ABcDexter 2014-10-16 20:46:50

回答

0

简单地改变

(num1, op, num2)

(num1, op.__name__, num2)

做你问什么。当然,您可能需要打印+,-*,这将需要一个简单的if/elif结构。我会让你弄清楚这一点; D

1

正如卢克所言,op。 名称将打印使用的操作员。如果你想明确的+/-/*或/从你减去可以参考IDEONE

if op == mul: 
     int(input("What is %s %s %s?\n" % (num1, 'multiplied by', num2))) 
elif op == add: 
     int(input("What is %s %s %s?\n" % (num1, 'added to', num2))) 
elif op == sub: 
     int(input("What is %s %s %s?\n" % (num1, 'subtracted from', num2))) 
else: 
     print ("randomise error, sorry.") 
2

也许使用的,而不是一个元组的字典添加,相乘。

import random 
from operator import add, sub, mul 
for x in range(10): 
    ops = {'+': add, '-': sub, '*': mul} 
    op = random.choice(ops.keys()) 
    num1, num2 = random.randint(1,10), random.randint(1,10) 
    int(input("What is %s %s %s?\n" % (num1, op, num2))) 
    ans = ops[op](num1, num2) 
+0

在将此解决方案粘贴到python后,出现此错误:Traceback(最近调用最后一次): 文件“/Users//Documents/Random.py”,第5行,在 op = random.choice(ops.keys()) 文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/random.py”,第256行,选择 return seq [i] TypeError:'dict_keys'对象不支持索引这是怎么回事? – DaSweatyGooch 2014-11-04 19:40:11

+0

在Python3中,将'opts.keys()'改为'list(opts.keys())',因为在py3中'dict.keys'是一个迭代器,'random.choice'需要知道长度,而不是自动评估迭代器(因为它不应该)。 – Cuadue 2014-11-05 17:58:59