【问题标题】:Adding two numbers using a randomised operator使用随机运算符添加两个数字
【发布时间】:2018-02-21 11:51:47
【问题描述】:

以下是我的代码,它可以工作。它创建两个随机数,一个随机运算符并将它们放在一起,但是在这样做之后它不会对它们求和。我需要的是让程序将其识别为一个方程,而不是简单地打印出各个变量。

所以,为了避免混淆;我的问题是:我如何将 firstNumbersecondNumber 加在一起,无论选择什么 operator,而不是简单地将它们一起打印出来?

from random import choice
from random import randint

ranOperator = ["*", "/", "+", "-"]

def askQuestion():
    firstNumber = randint(1,10)
    secondNumber = randint(1,10)
    operator = choice(ranOperator)

    generateQuestion = ' '.join((str(firstNumber), operator, str(secondNumber)))
    print(generateQuestion)

askQuestion()

当前输出(示例):

4 + 3

使用上面相同的数字,我想要发生的事情:

7

【问题讨论】:

标签: python math random


【解决方案1】:

不依赖eval 的一种方法是使用operator 模块来表示操作。

from random import choice
from random import randint
from operator import add, sub, truediv, mul

ranOperator = [add, sub, truediv, mul]

def askQuestion():
    firstNumber = randint(1,10)
    secondNumber = randint(1,10)
    the_operator = choice(ranOperator)

    result = the_operator(firstNumber, secondNumber)
    print(result)

【讨论】:

  • 加1,因为它更安全
【解决方案2】:

你需要的是eval()

eval()评估作为 Python 表达式传递的字符串并返回结果。

from random import choice
from random import randint

ranOperator = ["*", "/", "+", "-"]

def askQuestion():
    firstNumber = randint(1,10)
    secondNumber = randint(1,10)
    operator = choice(ranOperator)

    generateQuestion = ' '.join((str(firstNumber), operator, str(secondNumber)))
    print(eval(generateQuestion))

askQuestion()

演示:

>>> eval('1+1')
2
>>> eval('5-3')
2
>>> eval('2*3')
6
>>> eval('6/3')
2

【讨论】:

  • 幸运的是,在这种情况下,eval 的所有输入都由程序控制。 (不过,当operator 模块可用时,这不是使用 eval 的借口)
  • @quamrana @Matt。 Stroh 在这种情况下,您是否使用eval 并不重要——正如您所说的那样并不危险。毕竟,我们希望我们的工作能够完成。如果可以做到(这里是安全的),何必担心危险!
  • @theausome 不幸的是,这不是关于 this 的情况,而是关于将来程序“扩展”并包含不受控制的输入的情况。
【解决方案3】:

扩展 dseuss 的答案以合并任何函数并通过使用字典将函数映射到其符号来打印类似数学的方程

from random import choice
from random import randint

add = lambda x,y: x+y
substract = lambda x,y: x-y
divide = lambda x,y: x/y
multiply = lambda x,y: x*y

ranOperator = {"*":multiply, "/":divide, "+":add, "-":substract}

def askQuestion():
    firstNumber = randint(1,10)
    secondNumber = randint(1,10)
    operator_key = choice(list(ranOperator.keys()))

    answer = ranOperator[operator_key](firstNumber,secondNumber)
    print("{} {} {} = {}".format(firstNumber, operator_key, secondNumber, answer))

askQuestion()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多