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'
答案 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