冬雪雪冬 发表于 2017-11-14 11:47:28

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

SixPy 发表于 2017-11-14 12:48:36

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)

wyp02033 发表于 2017-11-14 13:34:16

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:08:32

本帖最后由 口可口可 于 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))

BngThea 发表于 2017-11-14 14:52:32

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))

wc365 发表于 2017-11-14 17:13:08

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)

bush牛 发表于 2017-11-14 17:16:36

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:40:01

本帖最后由 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

lihw 发表于 2017-11-14 20:09:03

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)

aegis1417 发表于 2017-11-14 23:11:55

歐拉計畫的題目有些是真的要數學系的才知道...

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))

xindong 发表于 2017-11-15 13:55:33

加完了,还要求最大公约数:

# -*- 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

colinshi 发表于 2017-11-15 15:00:56

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)

cyz1993 发表于 2017-11-16 13:27:03

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)

jay_mu 发表于 2017-11-16 23:34:59

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))

Easonalan 发表于 2017-11-17 16:47:30

# -*- 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)

帅帅的平少 发表于 2017-11-17 17:21:08

先看看

Python玲玲 发表于 2017-11-17 21:28:26

def fracAdd(分子1,分母1,分子2,分母2):
    分母3 = 分母1 * 分母2
    分子3 = 分子1*分母2+分子2*分母1
    return(分子3,分母3)#不能够化简为最简式,有待改进

DoctorTai 发表于 2017-11-18 11:32:08

谢谢谢谢

17803160 发表于 2017-11-18 13:20:44

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))

qad0510 发表于 2017-11-18 15:18:38

1
页: [1] 2
查看完整版本: Python:每日一题 124