【问题标题】:error with small integer in fraction both arguments should be Rational instances小数中的小整数错误,两个参数都应该是 Rational 实例
【发布时间】:2021-04-23 16:55:06
【问题描述】:

python 中有两个小数字,如@9​​87654321@,但出现错误both should be rational parameters,如果它转换为整数,它会变为零。

from fractions import Fraction
import math
pole=input('which pole is your choosen ? monopole , dipole , quadpole : ')
e=1602e-22
epsi=885e-14
#pi=314e-2
if pole=='monopole':
   x=input("Enter value for 'x' parameter : ")
   x=int(x)
   y=input("Enter value for 'y' parameter : ")
   y=int(y)
   z=input("Enter value for 'z' parameter : ")
   z=int(z)
   n=input("Enter value for n in 'q=n*e' sentence : ")
   n=int(n)
   q=n*(e)
   r=math.sqrt(pow(x,2)+pow(y,2)+pow(z,2))
   g=(4*math.pi*epsi)  #g=1.1121237993707868e-10
   v=fractions.Fraction((-1),(g)) * fractions.Fraction((q),(r))  
   print('v=',v,'r=',r,'q=',q,sep='\n')

收到此错误:

  --> 174             raise TypeError("both arguments should be "
      175                             "Rational instances")
      176 

如果以这种形式计算'v'参数:

      v=Fraction(('-1'),('1.1121237993707868e-10')) * Fraction((q),(r))

还是有同样的错误。

【问题讨论】:

  • 您应该包含一个最低限度的工作示例作为您的代码,以便我们帮助解决它。
  • Pi 不是理性的,所以事情看起来不太好。

标签: python integer fractions


【解决方案1】:
  1. 您使用的 python 包仅支持整数输入, or it converts into integers.

    link for the source code

    这就是为什么错误说;两个参数都必须是有理数。

  2. 在python中,默认为浮点数,四舍五入到最接近的小整数。这就是为什么你在使用 int() 后得到零的原因。

  3. 你可以使用名为decimal的python库

【讨论】:

    【解决方案2】:

    将我的代码更改为下面的形式,它起作用了!

    from fractions import Fraction
    import math
    pole=input('which pole is your choosen ? monopole , dipole , quadpole : ')
    e=1602e-22
    epsi=885e-14
    #pi=314e-2
    if pole=='monopole ': 
        x=input("Enter value for 'x' parameter : ")
        x=int(x)
        y=input("Enter value for 'y' parameter : ")
        y=int(y)
        z=input("Enter value for 'z' parameter : ")
        z=int(z)
        n=input("Enter value for n in 'q=n*e' sentence : ")
        n=int(n)
        q=n*(e)
        r=math.sqrt(pow(x,2)+pow(y,2)+pow(z,2))
        g=(4*math.pi*epsi)
        v=(Fraction( Fraction(-1),Fraction(4*math.pi*epsi) )) * (Fraction(Fraction(q),Fraction(r) )) 
        print('v=',v,'r=',r,'q=',q,sep='\n')
    

    这是结果:

      which pole is your choosen ? monopole , unipole , quadpole : monopole 
      Enter value for 'x' parameter : 2
      Enter value for 'y' parameter : 3
      Enter value for 'z' parameter : 4
      Enter value for n in 'q=n*e' sentence : 5
      v= -23258980343779986243584/17390428744443997208254875991145
      r= 5.385164807134504
      q= 8.01e-19
    

    希望这是有用的并且是正确的!

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      相关资源
      最近更新 更多