python分数类_python类分数

I made a code that makes the user input two fraction numbers in the form "d/n".

How can I make it print the reduced form of the fraction ?

ex: when I type 2/4 it prints 1/2?

import sys

class Rational:

def __init__(self,n,d):

self.numerator= n

self.denominator= d

def value(self):

return float(self.numerator)/float(self.denominator)

def __repr__(self):

return "%d/%d ~ %g" % (self.numerator,self.denominator,self.value())

def read(self):

while 1:

try:

s=raw_input("Enter fraction n/d: ")

n,d= s.split("/")

self.numerator= int(n)

self.denominator= int(d)

except KeyboardInterrupt:

print

exit()

except:

print sys.exc_info()[0]

print "bad input, try again."

else:

if int(d)==0:

print "The denominator cannot be zero. Try again."

elif int(d)<0:

print "The denominator cannot be negative. Try again."

else:

return

r1=Rational(1,1)

r1.read()

print r1

r2=Rational(1,1)

r2.read()

print r2

解决方案

Use the fractions.Fraction() class and have it do the work for you:

>>> import fractions

>>> fractions.Fraction(2, 4)

Fraction(1, 2)

To simplify fractions yourself, calculate the greatest common divisor:

def gcd(a, b):

while b:

a, b = b, a%b

return a

g = gcd(numerator, denominator)

numerator //= g

denominator //= g

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值