Python:每日一题 124
本帖最后由 冬雪雪冬 于 2017-11-19 15:17 编辑先我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。
题目:
上一天难度有点大,为了让更多的鱼油参与,这回来个简单的。
定义一个函数,参数为两个分数,返回值为这两个分数之和,也用分数的型式表示。
注:python本身有分数的数据类型,为了考察大家的能力,就不要用本身的分数类型了。
def fracAdd(分子1, 分母1, 分子2, 分母2):
#你的程序
return (分子3, 分母3)
例如:
1/6 + 2/3 = 5/6
fracAdd(1, 6, ,2, 3)
#返回 (5, 6)
注意如果碰到一又四分之三,显示 7/4
def fracAdd(分子1, 分母1, 分子2, 分母2):
def 约分(x,y):
公因数 = ({i for i in range(2,int(x**.5)+1)if x%i==0} &
{i for i in range(2,int(y**.5)+1)if y%i==0})
for 因子 in 公因数:
x //= 因子
y //= 因子
return x,y
分子3, 分母3 = 约分((分子1*分母2 + 分子2*分母1), 分母1*分母2)
return 分子3, 分母3
print(fracAdd(1, 6, 2, 3))
#(5, 6)
print(fracAdd(18, 24, 1, 1))
#(7, 4)
def get_gcd(x, y):
if y == 0:
return x
else:
return get_gcd(y, x%y)
def fracAdd(molecular1, denominator1, molecular2, denominator2):
gcd = get_gcd(denominator1, denominator2)
denominator = denominator1 * denominator2 / gcd
molecular = (molecular1 * denominator2 / gcd) + (molecular2 * denominator1 / gcd)
new_gcd = get_gcd(molecular, denominator)
return
print(fracAdd(1, 2, 1, 3))
执行结果: 本帖最后由 口可口可 于 2017-11-14 14:10 编辑
def gcd(x, y):
# 计算最大公约数,运用欧几里得算法,即两个数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
return x if y == 0 else gcd(y, x % y)
def fracAdd(n_1, d_1, n_2, d_2): # 输入 分子1, 分母1, 分子2, 分母2
# 通分成同分母,然后分子相加
d_3 = d_1 * d_2
n_1 *= d_2
n_2 *= d_1
n_3 = n_1 + n_2
# 除以最大公约数
factor = gcd(d_3, n_3)
d_3 //= factor
n_3 //= factor
return n_3, d_3
n_1, d_1, n_2, d_2 = map(int, input('请分别输入分子1, 分母1, 分子2, 分母2:').split(','))
print(fracAdd(n_1, d_1, n_2, d_2)) def fracAdd(n1,d1,n2,d2):
n = n1 * d2 + n2 * d1
d = d1 * d2
x,y = max(n,d),min(n,d)
while y:
x, y = y, x % y
return n // x, d // x
print(fracAdd(1, 6, 2, 3)) def hcf(x, y):
"""该函数返回两个数的最大公约数"""
if x > y:
smaller = y
else:
smaller = x
for i in range(1,smaller + 1):
if((x % i == 0) and (y % i == 0)):
hcf = i
return hcf
def fracAdd(a,b,c,d):
e,f = a*d + b*c , b*d
hc = hcf(e,f)
e //= hc
f //= hc
return (e,f) def fracAdd(top,bottom,up,down):
a = max(bottom, down)
n = min(bottom, down)
if a % n == 0:
if a == bottom:
return (top+up*int(a/n), a)
return (up+top*int(a/n), a)
return (top*down+bottom*up, bottom*down) 本帖最后由 solomonxian 于 2017-11-14 18:50 编辑
分数加减貌似前面做过了,当时先找最大公约数
现在不管效率了{:10_319:}
def fracAdd(a, b, c, d):
r1, r2 = a*d + b*c, b*d
for i in range(r2, 0, -1):
if not (r1 % i or r2 % i):
return r1//i, r2//i def fracAdd(a,b,c,d):
num=2
if b%d==0 or d%b==0:
if b%d==0:
f=a+c*(b//d)
g=b
if d%b==0:
f=a*(d//b)+c
g=d
else:
if b>d:
t=b
while t*num%d !=0:
num +=1
else:
t=d
while t*num%b !=0:
num +=1
f= a*(t*num//b)+c*(t*num//d)
g=t*num
return(f,g)
歐拉計畫的題目有些是真的要數學系的才知道...
def gcd(a, b):
while b:
a, b = b, a%b
return a
def lcm(a, b):
return a * b // gcd(a, b)
def fracAdd(nu1,de1,nu2,de2):
x=lcm(de1, de2)#通分
y=nu1*(x//de1)+nu2*(x//de2)
return (y,x)
print(fracAdd(1, 6, 2, 3)) 加完了,还要求最大公约数:
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 15 12:02:30 2017
"""
def fracAdd(n1, d1, n2, d2):
n3 = d1*n2 + d2*n1
d3 = d1*d2
c3 = commonDivisor2(n3, d3)
return (int(n3/c3), int(d3/c3))
def commonDivisor2(num1,num2):
if num1==num2:return num1
elif num1 < num2:
temp = num1
num1 = num2
num2 = temp
if num1 - num2 == num2:
return num2
else:
temp = num1
num1 = num2
num2 = temp - num2
#print (num1,' ', num2)
return commonDivisor2(num1,num2)
test = fracAdd(1, 6, 2, 3)
print ('1 / 6 + 2 / 3 = ', test,'/',test)
test = fracAdd(1, 4, 7, 8)
print ('1 / 4 + 7 / 8 = ', test,'/',test)
test = fracAdd(1, 6, 1, 3)
print ('1 / 6 + 1 / 3 = ', test,'/',test)
1 / 6 + 2 / 3 =5 / 6
1 / 4 + 7 / 8 =9 / 8
1 / 6 + 1 / 3 =1 / 2 def fracAdd(a,b,c,d):
yueshu = []
if b == 0 or d == 0:
return '分母不能为零'
elif a == 0 :
return (c,d)
elif c == 0:
return (a,b)
else:
i = (a*d)+(b*c) #分子
j = (b*d) #分母
if i == j:
return (1,1)
elif i == 1 or j == 1:
return(i,j)
else:
x,y = i,j
while x % y != 0:#求最大公约数
if y > x:
x,y=y,x
z = y
y = x%y
x = z
i = i//y
j = j//y
return (i,j)
def fracadd(a,al,b,bl):
fenzi=a*bl+b*al
fenmu=al*bl
c=gongyue(fenzi,fenmu)
print(fenzi//c,fenmu//c)
def gongyue(a,b):
c=0
d=max(a,b)
for i in range(1,d):
if (not a%i) and (not b%i):
c=i
return c
fracadd(1,7,2,3) def fracAdd(fz1,fm1,fz2,fm2):
fz3 = fz1*fm2+fz2*fm1
fm3 = fm1*fm2
a=fz3
b=fm3
while b:
temp = a%b
a = b
b =temp
gcd = a
print(gcd)
return (fz3/a,fm3/a)
print(fracAdd(1,6,2,3))
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 17 11:26:53 2017
FishC 习题2017-11-17
@author: Creative EveryDay
"""
def Factorization(N):
N = int(N)
FactorList = []
for count in range(2,N+1):
while N%count ==0:
N = N/count
FactorList.append(count)
return FactorList
def FracAdd(num1,den1,num2,den2):
CommonFactor = 1
num = den2*num1 + den1*num2
den = den1*den2
ListN = Factorization(num)
ListD = Factorization(den)
if num%den == 0:
num = num/den
den = 1
else:
for i in ListN:
if i in ListD:
CommonFactor = CommonFactor*i
ListD.remove(i)
num = int(num/CommonFactor)
den = int(den/CommonFactor)
return (num,den) 先看看 def fracAdd(分子1,分母1,分子2,分母2):
分母3 = 分母1 * 分母2
分子3 = 分子1*分母2+分子2*分母1
return(分子3,分母3)#不能够化简为最简式,有待改进 谢谢谢谢 import fractions
def fracADD(a1,a2,b1,b2):
a = fractions.Fraction((fractions.Fraction(a1,a2)+fractions.Fraction(b1,b2)))
print(a)
return a
print(fracADD(1,6,2,3))
1
页:
[1]
2