2017-12-02 55 views
1
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一个这表明,除非你使用eval(这是不安全的,所以我不能建议)

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

有一个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 
2

Python不会计算分数。有喜欢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),或者是一个错误(如果> 2)。

使用一个班轮operator.truediv &直接传递ARGS:

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

(无语法检查可能在这里很明显)

+2

Python做,如果你问好听,像PM2Ring评估分数... –

+0

忘了那一个。好。我开始认为这可能是重复的。它是,在某种程度上:https://stackoverflow.com/questions/1806278/convert-fraction-to-float –

+0

谢谢你的帮助 – PL8YR

相关问题