如何取整数并在其上使用分数

时间:2017-12-02 20:57:19

标签: python python-3.x

def main():
    name=input("Enter your name: ") #just write our name nothin important
    print (name, "is Swag")
    value1=int(input("enter a value: ")) #takes in the number without doubt
    print(value1)
    value2=float(int("Enter a fraction: ")) #heres our problem but what?
    print(value2)
main()

只是一个我正在玩的简单程序,但它显示了这个错误,因为你们都想知道:

我写的是例如1/2,这表示

Traceback (most recent call last):
File "C:\Users\waliu\Documents\Waliur Uni stuff\Information 
systems\Python Programs\Samples\apparently fractions.py", line 8, in 
<module>
main()
File "C:\Users\waliu\Documents\Waliur Uni stuff\Information 
systems\Python Programs\Samples\apparently fractions.py", line 6, in main
value2=float(input("Enter a fraction: "))
ValueError: could not convert string to float: '1/2'

2 个答案:

答案 0 :(得分:2)

python不会评估分数,除非您使用eval(这是不安全的,所以我不推荐它)。还有其他表达式评估程序,如simpleeval,但在您的情况下,如果您确定输入了一个分数,您可以拆分,转换为整数并除以:

>>> fraction = "1 / 2"  # input("enter a fraction")
>>> f = [int(x) for x in fraction.split("/")]
>>> f[0]/f[1]
0.5
>>> 

只需检查len(f)==2即可处理非分数,否则它可以是简单整数(如果是len(f)==1),也可以是错误(如果&gt; 2)。

单行使用operator.truediv&amp;直接传递args:

operator.truediv(*(int(x) for x in fraction.split("/")))

(显然没有语法检查)

答案 1 :(得分:2)

标准库中有一个fractions模块。它可以解析包含分数表示的字符串。

from fractions import Fraction

s = input("Enter a fraction: ")
val = Fraction(s)
print(val, float(val))

<强>演示

Enter a fraction: 3/8
3/8 0.375

请注意,字符串不能包含内部空格,但可以在数据之前或之后包含空格。

如果你想用分数进行计算,那么将它们转换为浮点数是个好主意,因为它会失去精度。由于Fraction对象使用Python整数作为分子和分母对它们的准确程度没有限制(除RAM限制外)。这是一个简短的演示:

a = Fraction('2/3')
b = Fraction(3, 4)
c = a**2 + b**2
print(c)
print(c**10)

<强>输出

145/144
4108469075197275390625/3833759992447475122176