【问题标题】:How do I take a fraction as an input in Python, and use the fraction's value for arithmetic?如何在 Python 中将分数作为输入,并将分数的值用于算术?
【发布时间】:2020-08-24 04:48:01
【问题描述】:

这是我为说明我的问题而编写的示例代码。如果输入是整数或小数,则按预期工作。但是如果输入是一个分数,比如 4/5,它会抛出一个 ValueError,因为 4/5 是一个不能转换为浮点数的字符串。

myinput=input("Enter number. ")
doubleofmyinput=float(myinput)*2
print(doubleofmyinput)

不使用 input() 时这不是问题,因为 float(4/5) 有效,而 float("4/5") 无效,而 float("4.5") 和 float(4.5) 都有效.谢谢。

【问题讨论】:

  • 不,float("4/5") 不起作用!是什么让你认为它可能???大多数时候,人们只使用浮点变量,十进制或scientific notation。如果您愿意 - 无论出于何种原因 - 您始终可以通过将两个整数参数传递给您的函数来指定一个“分数”:例如myfunction(numerator, denominator)
  • 这能回答你的问题吗? Fractions in Python
  • @paulsm4 好吧,float(4/5) 确实 工作,但那是因为 4/5 不是“分数”,它是一个被评估为浮点数的表达式跨度>
  • 所以,一般来说,您必须根据您的期望解析您的输入。但是,我会注意到,fractions.Fraction 将处理您的输入并与其他 python 数字类型一起使用
  • @paulsm4 我只是指出 OP 说“因为 float(4/5) 有效,而 float("4/5") 无效”,他们没有说 float("4/5") 有效...

标签: python


【解决方案1】:

使用fractions library,您可以执行以下操作:

import fractions

myinput = input("Enter number. ")
try:
    if not myinput.isnumeric():
        myinput = fractions.Fraction(myinput)
except ValueError:
    throw ValueError(myinput + " is not a number")

doubleofmyinput=float(myinput)*2
print(doubleofmyinput)

【讨论】:

    【解决方案2】:

    如果您只想将值输入为分数而不是将其显示为分数,那么我建议使用 eval。

    myinput=float(eval(input("Enter number. ")))
    doubleofmyinput= myinput *2  
    print(doubleofmyinput)
    

    【讨论】:

      【解决方案3】:

      您希望在接受意见方面有多慷慨?

      如果它只是粗俗分数(或混合分数),您可以有一个特殊情况,使用.split('/') 或正则表达式将输入字符串分解为其组成部分,分别转换,然后将它们放在一起转换为 floatDecimalFraction(取决于您需要或可以容忍的舍入行为类型)。

      如果您想更普遍地接受任意表达式,最好寻找一个库来做到这一点;一个快速的谷歌建议simpleeval,但可能还有其他人。

      【讨论】:

      • 使用 Unicode 接受粗俗/混合分数作为练习留给读者:-)
      【解决方案4】:

      如果您想将输入值转换为适当的数据类型,则可以使用 eval

      sigma = eval(input("Enter the value of sigma: "))
      print(sigma)
      

      谢谢:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2018-09-04
        相关资源
        最近更新 更多