有时候需要将分数化简,比如:3/12就应该表示为:1/4
12/3就应该表示为:4
等等,今天就简单使用python实现一下,思想很简单:
1.判断分母是否为0,为0则终止,输入错误
2.判断分子是否可以整除分母,是这说明输入的形式实际为一个整数,化简输出即可
3.找到二者中较小的数字,以此为基准,遍历从1到该数,看原始数字分母分子是否可以同时整数遍历到的数字,若能则更新分子分母,否则继续遍历
实现如下:
#!usr/bin/env python
#encoding:utf-8
'''
__Author__:沂水寒城
功能:输入两个整数,转化为不可约分数形式
'''
import random
def random_pair_num_generator(total_num=20, max_value=1000):
'''
生成随机数对作为分子分母,用于测试
'''
num_list=[]
for i in range(total_num):
num1=random.randint(1,max_value)
num2=random.randint(1,max_value)
num_list.append([num1,num2])
return num_list
def transform_num2_ratio(num1, num2):
'''
输入:分子,分母
输出:不可约分数形式
'''
if num2==0:
print '分母不能为0,重新输入!'
elif num2%num1==0:
print num2/num1
else:
temp=min(num1, num2)
for i in range(1,temp):
if num1%i==0 and num2%i==0:
num1/=i
num2/=i
print str(num1)+'/'+str(num2)
def main_func(num_list):
'''
主调用函数
'''
for i in range(len(num_list)):
one_num=num_list[i]
print '------------------------------------------------------------------'
transform_num2_ratio(one_num[0], one_num[1])
if __name__ == '__main__':
transform_num2_ratio(4,6)
transform_num2_ratio(4,12)
transform_num2_ratio(4,0)
num_list=random_pair_num_generator(total_num=20, max_value=1000)
main_func(num_list)
结果如下:
2/3
3
分母不能为0,重新输入!
------------------------------------------------------------------
49/45
------------------------------------------------------------------
127/60
------------------------------------------------------------------
190/473
------------------------------------------------------------------
951/254
------------------------------------------------------------------
47/313
------------------------------------------------------------------
676/387
------------------------------------------------------------------
255/563
------------------------------------------------------------------
124/87
------------------------------------------------------------------
325/43
------------------------------------------------------------------
694/293
------------------------------------------------------------------
369/295
------------------------------------------------------------------
311/317
------------------------------------------------------------------
89/91
------------------------------------------------------------------
13/103
------------------------------------------------------------------
74/149
------------------------------------------------------------------
5/48
------------------------------------------------------------------
759/277
------------------------------------------------------------------
721/125
------------------------------------------------------------------
979/644
------------------------------------------------------------------
179/38
[Finished in 0.3s]