鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 166

[复制链接]
发表于 2018-3-19 09:06:58 | 显示全部楼层
a = 2
b = 1
result = 0
for i in range(20):
    if i < 19:
        print("{}/{}+".format(a, b), end='')
    else:
        print("{}/{} = ".format(a, b), end='')
    result += a/b
    temp = a
    a = a + b
    b = temp
print(round(result, 2))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 09:47:35 | 显示全部楼层
str1 = ''
float1 = 0

def fib(max):
        global str1
        global float1
        n, a, b = 0, 1, 1
        while n < max:
                a, b = b, a + b
                n = n + 1
                if n < 20:
                        float1 += b/a
                        str1 += str(b) + '/' + str(a) + '+'
                if n == 20:
                        float1 += b/a
                        str1 += str(b) + '/' + str(a) + ' = ' + '%0.2f' %float1 #str(float1)
                yield b/a
        return 'done'
   
   

   
   
g = fib(20)

while True:
        try:
                x = next(g)
                #print('g:', x)
        except StopIteration as e:
                #print('Generator return value:', e.value)
                break

print(str1)               #现有程序改编,丑是丑了点,仅解本题用

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 10:33:59 | 显示全部楼层
fib=[0 for i in range(1,22)]
fib[0],fib[1]=1,2
s,ss=2,'2/1'
for k in range(2,21):
  fib[k]=fib[k-1]+fib[k-2]
  ss+='+'+str(fib[k])+'/'+str(fib[k-1])
  s+=fib[k]/fib[k-1]
print(ss+'=',round(s,2))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 10:59:26 | 显示全部楼层
def feb(s1=1,s2=1):
        while True:
                yield s2
                s1, s2 = s2, s1+s2
a, b = feb(), feb(1,2)
s = "+".join([str(next(b))+"/"+str(next(a)) for _ in range(20)])
print(s,"=","%.2f"%eval(s))
2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946 = 32.66

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 11:03:56 | 显示全部楼层
本帖最后由 luokaoge 于 2018-3-19 11:05 编辑

x = 1
y = 1
a = ''
l = []
r = []
for i in range(1,21):
    x , y = y , y + x
    s = y/x
    if i != 20:
        a = str(y) + '/' + str(x) + '+'
    else:
        a = str(y) + '/' + str(x)
    r.append(s)
    l.append(a)
d = str(sum(r))
f = d[:5]
print("".join(l) + '=' + f)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 13:25:51 | 显示全部楼层
def fun(n):
        if n == 1:
                return 1
        elif n == 2:
                return 2
        else:
                return (fun(n-1)+fun(n-2))

def summary(n):
        sum = 0
                        
        for i in range(1, n+1):
                sum += fun(i+1)/fun(i)
                if i <= (n-1):
                        print (str(fun(i+1)) + '/' + str(fun(i)) + ' + ' , end = '')
                else:
                        print (str(fun(i+1)) + '/' + str(fun(i)) + ' = ' , end = '')
                        
        print (('%.2f')%sum)
        
if __name__ == '__main__':

        while True: 
                n = input('计算前n项的和(输入q退出计算):')
                
                if n.isdigit():
                        summary(int(n))
                elif n == 'q':
                        break
                else:
                        print("输入错误,请重新输入一个正整数")

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 13:33:47 | 显示全部楼层
def SumFibonacci(num=20):
    i=3
    feibo = [1,1]
    a=1
    b=1
    j = 30
    while i<=j:
        c=a+b
        i=i+1
        feibo.append(c)
        a=b
        b=c
        
    k=0
    Result = 0
    while k<=(num-1):
        Result = Result + feibo[k+2]/feibo[k+1]
        k=k+1
    print ('Result='+('%.2f'%Result))
   

点评

除了结果还要打印算式  发表于 2018-3-19 21:25

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
冬雪雪冬 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 13:40:37 | 显示全部楼层
本帖最后由 graceasyi 于 2018-3-19 13:41 编辑
def fib_itr(n):
    if n < 0: return None
    if n <= 1: return (0, 1)[n]
    a, b = 1, 1
    for i in range(n-1):
        a, b = b, a + b
        yield a, b


sum = 0
str1 = ''
for i, j in fib_itr(21):
    sum += j/i
    str1 += str(j)+'/'+str(i)+'+'

print(str1[:-1], end='')
print("=%.2f" % sum)

结果:
2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946=32.66

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 15:35:51 | 显示全部楼层
本帖最后由 benzhj 于 2018-3-19 15:49 编辑
den = [1,2]
num = [2,3]
i = 0
temp = 1
result = 0

for i in range(18):
    den.append(den[temp-1] + den[temp])
    num.append(num[temp-1] + num[temp])
    temp +=1

for i in range(len(den)):
    result += num[i]/den[i]

for i in range(19):
    print("{0}/{1}".format(num[i], den[i]), end = '+')

print("{0}/{1}={2}".format(num[19], den[19], (int(result*100)/100)))


得数到是对了,但存在问题是,列表生成式,还是不会。。。。
还有保留两个小数,这个。。。我的解决方法应该不是python的解决方法。
期待别人的答案。

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 15:46:58 | 显示全部楼层
写的很low~~~~
list1 =[]
list2 =[]
z =0
for i in range(22):
    if i ==0 or i ==1:
        list1.append(1)
    else:
        list1.append(list1[i-2]+list1[i-1])
try:
    for x in range(len(list1)):
        if x>1:
            list2.append((int(list1[x])/int(list1[x-1])))
except IndexError:
    pass
try:
    for y in range(len(list1)):
        z = float(list2[y]) + z

except IndexError:
    pass
try:
    for a in range(len(list1)):
        b = list1[a+1]
        print('%s/%s '%(str(list1[a+2]),str(list1[a+1])),end='')
        if str(list1[a + 2]) != '17711':
            print(end='+ ')
        if str(list1[a+2]) == '17711' :
            print(' =%.2f '%z)
        continue
except IndexError:
    pass

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 16:22:37 | 显示全部楼层
本帖最后由 FTT100 于 2018-3-19 16:31 编辑

def fab(n) :
    a,b,c=0,1,1
    result = []
    result.append(1)
    while c < n :
        a,b = b,a+b
        result.append(b)
        c = c+1
    return result


def listn(listn) :
    a,b,c=0,0,1
    pstr = ''
    cnt=0
    while c < len(listn)-1 :
        if len(pstr) == 0 :
            pstr=pstr+str(listn[c+1])+'/'+str(listn[c])
        else :
            pstr=pstr+'+'+str(listn[c+1])+'/'+str(listn[c])
        cnt=cnt+round(listn[c+1]/listn[c],4)
        c = c+1
    print(pstr+'=%0.2f'%(cnt))

rel = fab(22)

print(len(rel))
print(rel)
#rel=[1,1,2,3]
listn(rel)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 16:43:47 | 显示全部楼层
def fib(x):
    if x == 1 or x == 2:
        return 1
    else:
        return fib(x - 1) + fib (x - 2)

ssum = 0
sumstr = ''
for i in range(2,22):
    ssum += fib(i + 1) / fib(i)
    sumstr += str(fib(i+1))+'/'+str(fib(i))
    if i != 21:
        sumstr += '+'
    else:
        sumstr += '='

print(sumstr,'%.2f' % ssum)
   

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 16:49:59 | 显示全部楼层
listFib = []
listSum = []
def createFiblist(molecular, denominator, count):
    if count > 0:
        listFib.append(r'%s/%s'%(molecular, denominator))
        listSum.append(molecular/denominator)
        createFiblist(molecular+denominator, molecular, count-1)
    return [listFib, listSum]
         
def calcFib(list1):
    result = 0
    for i in range((len(list1[0])-1)):
        print(list1[0][i] + '+', end=' ')
    print(list1[0][-1]+ '=', end=' ')
        
    for each in list1[1]:
        result += each
    return '%.2f' % result
    
def main():
    molecular = 2
    denominator = 1
    count = 20

    list1 = createFiblist(molecular, denominator, count)
    result = calcFib(list1)
    print(result)

if __name__ == '__main__':
    main()

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 16:55:54 | 显示全部楼层
def func(times):
    a, b = 2, 1
    string = '2/1'
    while times>1:
        a, b = a+b, a
        string += '+%d/%d' % (a,b)
        times -= 1
    print('%s = %.2f' % (string,eval(string)))


func(20)

#结果
2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946 = 32.66

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 19:24:10 | 显示全部楼层
ssum = 0
sumstr = ''
alist = [1,1]
for i in range(1,21):
    alist.append(alist[i-1]+alist[i])
    ssum += alist[i+1] / alist[i]
    sumstr += str(alist[i+1])+'/'+str(alist[i])
    if i != 20:
        sumstr += '+'
    else:
        sumstr += '='

print(sumstr,'%.2f' % ssum)


不用递归

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 19:34:25 | 显示全部楼层
def fab(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return fab(n-1) + fab(n-2)

def main():
    sum_ = 0
    result = ''
    for i in range(1, 21):
        sum_ += fab(i+1) / fab(i)
        result += (str(fab(i+1)) + "/" + str(fab(i)) + '+')
    print(result[:-1] + "=%.2f"%(sum_))

if __name__ == '__main__':
    main()

result:2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946=32.66

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-19 21:28:47 | 显示全部楼层
评分截至标记。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 21:46:25 | 显示全部楼层
def fibonacci(num):
    a, b, result = 1, 1, 0
    x, y = 0, 1
    temp = ''
    for i in range(num):
        temp += str(a+b)+'/'+str(x+y)
        if(i<num-1):
            temp += '+'
        result += (a+b)/(x+y)
        c, z = a, x
        a, x = b, y
        b = c+b
        y = z+y
    temp += ('=' + str(round(result, 2)))
    return temp
print(fibonacci(20))
2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946=32.66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2018-3-20 22:15:50 | 显示全部楼层

第一项在上边,就是result哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 18:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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