鱼C论坛

 找回密码
 立即注册
楼主: 新手·ing

[技术交流] Python:每日一题 29(答题领鱼币)

[复制链接]
发表于 2018-3-11 13:27:05 | 显示全部楼层
  1. def gcd(x,y):
  2.     while y:
  3.         x,y = y,x%y
  4.     return x
  5. def add(a,b,c,d):
  6.     if b==d:
  7.         print("%d/%d" % ((a+c),b))
  8.     else:
  9.         z = gcd((a*d + c*b),b*d)
  10.         print("%d/%d" % ((a*d + c*b)//z,b*d//z))
  11.         
  12.    
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-4 10:50:11 | 显示全部楼层
#学习
def Dicisor(a,b):
    #最大公约数
    dicisor_list = [i for i in range(1,a+1) if a%i==0 and b%i==0]
    return max(dicisor_list)

def my_add(a,b,c,d):
    molecular = a*d +c*b
    denominator =b*d
    result = molecular/denominator
    if result == int(result):
        print(int(result))
    else:
        dicisor = Dicisor(molecular,denominator)
        molecular_new = int(molecular/dicisor)
        denominator_new = int(denominator/dicisor)
        print("%s/%s"%(molecular_new,denominator_new))
        
my_add(1,1,3,4)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-4 22:57:39 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-5 16:22:52 | 显示全部楼层
123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-11 22:42:49 | 显示全部楼层
  1. '''
  2. 编写一个简单的分数加法和减法函数,实现分数与分数,分数与整数的加减法。
  3. 如3/5 - 1/5 = 2/5    1/2 - 1/3 = 1/6    1/2 + 1/2 = 1  1- 1/3 = 2/3
  4. 函数的用法
  5. add(a, b, c, d):a, b为第一个分数的分子与分母,c, d 为第二个分数的分子与分母
  6. 减法类似。
  7. '''
  8. def foo(n,m):
  9.     for i in range(2,min(n,m)+1):
  10.         if n%i==0 and m%i==0:
  11.             while n%i==0 and m%i==0:
  12.                 n=n//i
  13.                 m=m//i
  14.     return str(n)+'/'+str(m)
  15.         
  16. def add(a,b,c,d):
  17.     stri='%d/%d+%d/%d=' %(a,b,c,d)
  18.     n=a*d+c*b
  19.     m=b*d
  20.     if n%m==0:
  21.         return stri+str(n//m)
  22.     else:
  23.         return stri+foo(n,m)

  24. def sub(a,b,c,d):
  25.     stri='%d/%d-%d/%d=' %(a,b,c,d)
  26.     n=a*d-c*b
  27.     m=b*d
  28.     if n%m==0:
  29.         return n//m
  30.     else:
  31.         strx=foo(abs(n),m)
  32.     if n<0:
  33.         return stri+'-'+strx
  34.     else:
  35.         return stri+strx

  36. print(sub(1,2,2,6))
  37. print(add(1,2,2,6))
  38.         
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-15 09:24:43 | 显示全部楼层
  1. def add(a,b,c,d):
  2.     print('%s/%s + %s/%s = '%(a,b,c,d),end='')
  3.     return (a/b)+(c/d)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-24 15:46:52 | 显示全部楼层
本帖最后由 萧丹夜 于 2018-5-24 16:02 编辑
  1. def add(a,b,c,d):
  2.     y1 = a * d + b * c
  3.     y2 = b * d
  4.     return simp(y1,y2)

  5. def sub(a,b,c,d):
  6.     y1 = a * d - b * c
  7.     y2 = b * d
  8.     return simp(y1,y2)

  9. def simp(y1,y2):
  10.     i = 2
  11.     while i <= y2:
  12.         if y1 % i == 0 and y2 % i == 0:
  13.             y1,y2 = y1 // i,y2 // i
  14.             i = 1
  15.         i += 1
  16.     return y1,y2

  17. def jug(x):
  18.     if ' ' not in x:
  19.         return int(x),1
  20.     else:
  21.         return map(int,x.split())

  22. x1 = input('请输入第一个数分子和分母:')
  23. x2 = input('请输入第二个数分子和分母:')
  24. a,b = jug(x1)
  25. c,d = jug(x2)
  26. k = input('请输入你想要做的运算(+/-):')
  27. if k == '+':
  28.     y1,y2 = add(a,b,c,d)
  29. elif k == '-':
  30.     y1,y2 = sub(a,b,c,d)
  31. else:
  32.     print('输入有误!')

  33. if y1 % y2 != 0:
  34.     if b == 1:
  35.         print('%d %c %d/%d = %d/%d ' %(a,k,c,d,y1,y2))
  36.     elif d == 1:
  37.         print('%d/%d %c %d = %d/%d ' %(a,b,k,c,y1,y2))
  38.     else:
  39.         print('%d/%d %c %d/%d = %d/%d ' %(a,b,k,c,d,y1,y2))
  40. else:
  41.     if b == 1:
  42.         print('%d %c %d/%d = %d ' %(a,k,c,d,y1//y2))
  43.     elif d == 1:
  44.         print('%d/%d %c %d = %d ' %(a,b,k,c,y1//y2))
  45.     else:
  46.         print('%d/%d %c %d/%d = %d ' %(a,b,k,c,d,y1//y2))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-30 17:26:00 | 显示全部楼层
  1. #求最大公约数:
  2. def gcd(a, b):
  3.     if b == 0:return a
  4.     return gcd(b, a % b)
  5. #最小公倍数
  6. def lcm(a,b):
  7.     return a*b//gcd(a,b)
  8. a,b,c,d =input('请输入4个数,空格隔开:').split()
  9. e = input('请输入‘+’或‘-’:')
  10. def caculating(a,b,c,d,e):
  11.     lcmNum = lcm(int(b),int(d))
  12.     S = a+'/'+b+e+c+'/'+d+'='
  13.     if e =='-':
  14.         x =int(int(a)*lcmNum/int(b)-int(c)*lcmNum/int(d))
  15.     else:
  16.         x =int(int(a)*lcmNum/int(b)+int(c)*lcmNum/int(d))
  17.     y=gcd(lcmNum,x)
  18.     x=int(x/y)
  19.     lcmNum = int(lcmNum/y)
  20.     return S+str(x)+'/'+str(lcmNum)
  21. print(caculating(a,b,c,d,e))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-14 19:31:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-2 21:03:15 | 显示全部楼层
  1. def add(a, b, c, d):
  2.     if b == d:
  3.         if a + c == b:
  4.             print("1")
  5.         else:
  6.             print((a + c), "/", b)
  7.     else:
  8.         if a * d + b * c == b * d:
  9.             print("1")
  10.         else:
  11.             print((a * d + b * c), "/", b * d)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 21:37:00 | 显示全部楼层
  1. from fractions import gcd

  2. def add(a,b,c,d):
  3.     #m、n表示加数和被加数的最简形式,下面的减法同理
  4.     m = a//b if a % b == 0 else str(a//gcd(a,b)) + '/' + str(b//gcd(a,b))
  5.     n = c//d if c % d == 0 else str(c//gcd(c,d)) + '/' + str(d//gcd(c,d))
  6.     k = a*d + b*c
  7.     fm = b*d
  8.     if k % fm == 0:
  9.         print(m,'+',n,'= %d' % (k//fm))
  10.     else:
  11.         result = str(k//gcd(k,fm)) + '/' + str(fm//gcd(k,fm))
  12.         print(m,'+',n,'= %s' % result)

  13. def sub(a,b,c,d):
  14.     m = a//b if a % b == 0 else str(a//gcd(a,b)) + '/' + str(b//gcd(a,b))
  15.     n = c//d if c % d == 0 else str(c//gcd(c,d)) + '/' + str(d//gcd(c,d))
  16.     k = a*d - b*c
  17.     fm = b*d
  18.     if k % fm == 0:
  19.         print(m,'-',n,'= %d' % (k//fm))
  20.     else:
  21.         result = str(k//gcd(k,fm)) + '/' + str(fm//gcd(k,fm))
  22.         print(m,'-',n,'= %s' % result)


  23. 测试结果
  24. >>> add(8,2,1,4)
  25. 4 + 1/4 = 17/4
  26. >>> add(6,10,2,7)
  27. 3/5 + 2/7 = 31/35
  28. >>> add(3,3,4,6)
  29. 1 + 2/3 = 5/3
  30. >>> sub(8,2,1,4)
  31. 4 - 1/4 = 15/4
  32. >>> sub(1,4,1,5)
  33. 1/4 - 1/5 = 1/20
  34. >>> sub(1,4,5,4)
  35. 1/4 - 5/4 = -1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 08:43:42 | 显示全部楼层
我做的也是不符合规定的
import fractions
def add(a, b, c, d):
    #a, b为第一个分数的分子与分母
    #c, d 为第二个分数的分子与分母
    x = fractions.Fraction(a, b)
    y = fractions.Fraction(c, d)
    print(x + y)
def subtraction(a, b, c, d):
    # a, b为第一个分数的分子与分母
    # c, d 为第二个分数的分子与分母
    x = fractions.Fraction(a, b)
    y = fractions.Fraction(c, d)
    print(x - y)

z = add(1, 5, 3, 5)
print(z)
q = subtraction(3, 5, 1, 5)
print(q)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-23 09:37:26 | 显示全部楼层
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-9 16:18:58 | 显示全部楼层
  1. def add(a,b,c,d):
  2.     str1 = str(a)+'/'+str(b)+' + '+str(c)+'/'+str(d)+' = '
  3.     fz = a*d + c*b
  4.     fm = b*d
  5.     if fz == 0:
  6.         return str1+'0'
  7.     elif fz == fm:
  8.         return str1+'1'
  9.     elif fz > fm:
  10.         if fz % fm == 0:
  11.             return str1+str(int(fz/fm))
  12.         else:
  13.             n = fz % fm
  14.             m = int(fz // fm)
  15.             for i in range(n,0,-1):
  16.                 if fm % i == 0 and n % i == 0:
  17.                     return str1+str(m)+'('+str(int(n/i))+'/'+str(int(fm/i))+')'
  18.     else:
  19.         for i in range(fz,0,-1):
  20.             if fm % i == 0 and fz % i == 0:
  21.                 return str1+str(int(fz/i))+'/'+str(int(fm/i))

  22. def sub(a,b,c,d):
  23.     str1 = str(a)+'/'+str(b)+' - '+str(c)+'/'+str(d)+' = '
  24.     fz = a*d - c*b
  25.     fm = b*d
  26.     if fz == 0:
  27.         return str1+'0'
  28.     elif fz == fm:
  29.         return str1+'1'

  30.     elif fz > fm:
  31.         if fz % fm == 0:
  32.             return str1+str(int(fz/fm))
  33.         else:
  34.             n = fz % fm
  35.             m = int(fz // fm)
  36.             for i in range(n,0,-1):
  37.                 if fm % i == 0 and n % i == 0:
  38.                     return str1+str(m)+'('+str(int(n/i))+'/'+str(int(fm/i))+')'
  39.     else:
  40.         for i in range(fz,0,-1):
  41.             if fm % i == 0 and fz % i == 0:
  42.                 return str1+str(int(fz/i))+'/'+str(int(fm/i))
复制代码


1/2 + 1/2 = 1
6/2 + 9/3 = 6
6/2 + 8/3 = 5(2/3)
1/2 + 1/3 = 5/6
1/2 - 1/3 = 1/6
1/2 - 3/6 = 0
4/2 - 2/3 = 1(1/3)
9/5 - 4/5 = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-3 14:20:26 From FishC Mobile | 显示全部楼层
持之以恒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-5 10:40:36 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-15 14:39:57 | 显示全部楼层
  1. def simplify(zi, mu):
  2.     x = 2
  3.     while x <= mu:
  4.         if zi % x == 0 and mu % x == 0:
  5.             zi = zi / x
  6.             mu = mu / x
  7.             return simplify(zi, mu)
  8.         else:
  9.             x += 1
  10.     if mu == 1:
  11.         print(zi)
  12.     else:
  13.         print(zi, "/", mu)


  14. def add(a, b, c, d):
  15.     zi = a * d + b * c
  16.     mu = b * d
  17.     simplify(zi, mu)


  18. def sub(a, b, c, d):
  19.     zi = a * d - b * c
  20.     mu = b * d
  21.     simplify(zi, mu)
复制代码

  1. add(1, 3, 1, 2)

  2. 5 / 6

  3. Process finished with exit code 0
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-8 21:59:53 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-20 12:17:07 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-8-20 12:18 编辑
  1. from math import gcd
  2. def add(a,b,c,d):a=a*d+c*b;b=b*d;k=gcd(a,b);return f'{a//k}/{b//k}'
  3. def sub(a,b,c,d):return add(a,b,-c,d)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 12:20:44 | 显示全部楼层
zhhmms 发表于 2017-4-17 08:59
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""

老哥上来就抄的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表