2017-12-02 151 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

相關問題