2014-10-16 67 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