鱼C论坛

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

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

[复制链接]
发表于 2018-3-11 13:27:05 | 显示全部楼层
def gcd(x,y):
    while y:
        x,y = y,x%y
    return x
def add(a,b,c,d):
    if b==d:
        print("%d/%d" % ((a+c),b))
    else:
        z = gcd((a*d + c*b),b*d)
        print("%d/%d" % ((a*d + c*b)//z,b*d//z))
        
    
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层
'''
编写一个简单的分数加法和减法函数,实现分数与分数,分数与整数的加减法。
如3/5 - 1/5 = 2/5    1/2 - 1/3 = 1/6    1/2 + 1/2 = 1  1- 1/3 = 2/3
函数的用法
add(a, b, c, d):a, b为第一个分数的分子与分母,c, d 为第二个分数的分子与分母
减法类似。
'''
def foo(n,m):
    for i in range(2,min(n,m)+1):
        if n%i==0 and m%i==0:
            while n%i==0 and m%i==0:
                n=n//i
                m=m//i
    return str(n)+'/'+str(m)
        
def add(a,b,c,d):
    stri='%d/%d+%d/%d=' %(a,b,c,d)
    n=a*d+c*b
    m=b*d
    if n%m==0:
        return stri+str(n//m)
    else:
        return stri+foo(n,m)

def sub(a,b,c,d):
    stri='%d/%d-%d/%d=' %(a,b,c,d)
    n=a*d-c*b
    m=b*d
    if n%m==0:
        return n//m
    else:
        strx=foo(abs(n),m)
    if n<0:
        return stri+'-'+strx
    else:
        return stri+strx

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

使用道具 举报

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

使用道具 举报

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

def sub(a,b,c,d):
    y1 = a * d - b * c
    y2 = b * d
    return simp(y1,y2)

def simp(y1,y2):
    i = 2
    while i <= y2:
        if y1 % i == 0 and y2 % i == 0:
            y1,y2 = y1 // i,y2 // i
            i = 1
        i += 1
    return y1,y2

def jug(x):
    if ' ' not in x:
        return int(x),1
    else:
        return map(int,x.split())

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

if y1 % y2 != 0:
    if b == 1:
        print('%d %c %d/%d = %d/%d ' %(a,k,c,d,y1,y2))
    elif d == 1:
        print('%d/%d %c %d = %d/%d ' %(a,b,k,c,y1,y2))
    else:
        print('%d/%d %c %d/%d = %d/%d ' %(a,b,k,c,d,y1,y2))
else:
    if b == 1:
        print('%d %c %d/%d = %d ' %(a,k,c,d,y1//y2))
    elif d == 1:
        print('%d/%d %c %d = %d ' %(a,b,k,c,y1//y2))
    else:
        print('%d/%d %c %d/%d = %d ' %(a,b,k,c,d,y1//y2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

def add(a,b,c,d):
    #m、n表示加数和被加数的最简形式,下面的减法同理
    m = a//b if a % b == 0 else str(a//gcd(a,b)) + '/' + str(b//gcd(a,b))
    n = c//d if c % d == 0 else str(c//gcd(c,d)) + '/' + str(d//gcd(c,d))
    k = a*d + b*c
    fm = b*d
    if k % fm == 0:
        print(m,'+',n,'= %d' % (k//fm))
    else:
        result = str(k//gcd(k,fm)) + '/' + str(fm//gcd(k,fm))
        print(m,'+',n,'= %s' % result)

def sub(a,b,c,d):
    m = a//b if a % b == 0 else str(a//gcd(a,b)) + '/' + str(b//gcd(a,b))
    n = c//d if c % d == 0 else str(c//gcd(c,d)) + '/' + str(d//gcd(c,d))
    k = a*d - b*c
    fm = b*d
    if k % fm == 0:
        print(m,'-',n,'= %d' % (k//fm))
    else:
        result = str(k//gcd(k,fm)) + '/' + str(fm//gcd(k,fm))
        print(m,'-',n,'= %s' % result)


测试结果
>>> add(8,2,1,4)
4 + 1/4 = 17/4
>>> add(6,10,2,7)
3/5 + 2/7 = 31/35
>>> add(3,3,4,6)
1 + 2/3 = 5/3
>>> sub(8,2,1,4)
4 - 1/4 = 15/4
>>> sub(1,4,1,5)
1/4 - 1/5 = 1/20
>>> sub(1,4,5,4)
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 | 显示全部楼层
def add(a,b,c,d):
    str1 = str(a)+'/'+str(b)+' + '+str(c)+'/'+str(d)+' = '
    fz = a*d + c*b
    fm = b*d
    if fz == 0:
        return str1+'0'
    elif fz == fm:
        return str1+'1'
    elif fz > fm:
        if fz % fm == 0:
            return str1+str(int(fz/fm))
        else:
            n = fz % fm
            m = int(fz // fm)
            for i in range(n,0,-1):
                if fm % i == 0 and n % i == 0:
                    return str1+str(m)+'('+str(int(n/i))+'/'+str(int(fm/i))+')'
    else:
        for i in range(fz,0,-1):
            if fm % i == 0 and fz % i == 0:
                return str1+str(int(fz/i))+'/'+str(int(fm/i))

def sub(a,b,c,d):
    str1 = str(a)+'/'+str(b)+' - '+str(c)+'/'+str(d)+' = '
    fz = a*d - c*b
    fm = b*d
    if fz == 0:
        return str1+'0'
    elif fz == fm:
        return str1+'1'

    elif fz > fm:
        if fz % fm == 0:
            return str1+str(int(fz/fm))
        else:
            n = fz % fm
            m = int(fz // fm)
            for i in range(n,0,-1):
                if fm % i == 0 and n % i == 0:
                    return str1+str(m)+'('+str(int(n/i))+'/'+str(int(fm/i))+')'
    else:
        for i in range(fz,0,-1):
            if fm % i == 0 and fz % i == 0:
                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 | 显示全部楼层
def simplify(zi, mu):
    x = 2
    while x <= mu:
        if zi % x == 0 and mu % x == 0:
            zi = zi / x
            mu = mu / x
            return simplify(zi, mu)
        else:
            x += 1
    if mu == 1:
        print(zi)
    else:
        print(zi, "/", mu)


def add(a, b, c, d):
    zi = a * d + b * c
    mu = b * d
    simplify(zi, mu)


def sub(a, b, c, d):
    zi = a * d - b * c
    mu = b * d
    simplify(zi, mu)
add(1, 3, 1, 2)

5 / 6

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 编辑
from math import gcd
def add(a,b,c,d):a=a*d+c*b;b=b*d;k=gcd(a,b);return f'{a//k}/{b//k}'
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, 2025-1-16 13:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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