鱼C论坛

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

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

[复制链接]
发表于 2018-3-19 09:06:58 | 显示全部楼层
  1. a = 2
  2. b = 1
  3. result = 0
  4. for i in range(20):
  5.     if i < 19:
  6.         print("{}/{}+".format(a, b), end='')
  7.     else:
  8.         print("{}/{} = ".format(a, b), end='')
  9.     result += a/b
  10.     temp = a
  11.     a = a + b
  12.     b = temp
  13. 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 | 显示全部楼层
  1. fib=[0 for i in range(1,22)]
  2. fib[0],fib[1]=1,2
  3. s,ss=2,'2/1'
  4. for k in range(2,21):
  5.   fib[k]=fib[k-1]+fib[k-2]
  6.   ss+='+'+str(fib[k])+'/'+str(fib[k-1])
  7.   s+=fib[k]/fib[k-1]
  8. print(ss+'=',round(s,2))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-19 10:59:26 | 显示全部楼层
  1. def feb(s1=1,s2=1):
  2.         while True:
  3.                 yield s2
  4.                 s1, s2 = s2, s1+s2
  5. a, b = feb(), feb(1,2)
  6. s = "+".join([str(next(b))+"/"+str(next(a)) for _ in range(20)])
  7. 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 | 显示全部楼层
  1. def fun(n):
  2.         if n == 1:
  3.                 return 1
  4.         elif n == 2:
  5.                 return 2
  6.         else:
  7.                 return (fun(n-1)+fun(n-2))

  8. def summary(n):
  9.         sum = 0
  10.                        
  11.         for i in range(1, n+1):
  12.                 sum += fun(i+1)/fun(i)
  13.                 if i <= (n-1):
  14.                         print (str(fun(i+1)) + '/' + str(fun(i)) + ' + ' , end = '')
  15.                 else:
  16.                         print (str(fun(i+1)) + '/' + str(fun(i)) + ' = ' , end = '')
  17.                        
  18.         print (('%.2f')%sum)
  19.        
  20. if __name__ == '__main__':

  21.         while True:
  22.                 n = input('计算前n项的和(输入q退出计算):')
  23.                
  24.                 if n.isdigit():
  25.                         summary(int(n))
  26.                 elif n == 'q':
  27.                         break
  28.                 else:
  29.                         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 编辑
  1. def fib_itr(n):
  2.     if n < 0: return None
  3.     if n <= 1: return (0, 1)[n]
  4.     a, b = 1, 1
  5.     for i in range(n-1):
  6.         a, b = b, a + b
  7.         yield a, b


  8. sum = 0
  9. str1 = ''
  10. for i, j in fib_itr(21):
  11.     sum += j/i
  12.     str1 += str(j)+'/'+str(i)+'+'

  13. print(str1[:-1], end='')
  14. 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 编辑
  1. den = [1,2]
  2. num = [2,3]
  3. i = 0
  4. temp = 1
  5. result = 0

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

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

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

  14. 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~~~~

  1. list1 =[]
  2. list2 =[]
  3. z =0
  4. for i in range(22):
  5.     if i ==0 or i ==1:
  6.         list1.append(1)
  7.     else:
  8.         list1.append(list1[i-2]+list1[i-1])
  9. try:
  10.     for x in range(len(list1)):
  11.         if x>1:
  12.             list2.append((int(list1[x])/int(list1[x-1])))
  13. except IndexError:
  14.     pass
  15. try:
  16.     for y in range(len(list1)):
  17.         z = float(list2[y]) + z

  18. except IndexError:
  19.     pass
  20. try:
  21.     for a in range(len(list1)):
  22.         b = list1[a+1]
  23.         print('%s/%s '%(str(list1[a+2]),str(list1[a+1])),end='')
  24.         if str(list1[a + 2]) != '17711':
  25.             print(end='+ ')
  26.         if str(list1[a+2]) == '17711' :
  27.             print(' =%.2f '%z)
  28.         continue
  29. except IndexError:
  30.     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 | 显示全部楼层

  1. listFib = []
  2. listSum = []
  3. def createFiblist(molecular, denominator, count):
  4.     if count > 0:
  5.         listFib.append(r'%s/%s'%(molecular, denominator))
  6.         listSum.append(molecular/denominator)
  7.         createFiblist(molecular+denominator, molecular, count-1)
  8.     return [listFib, listSum]
  9.          
  10. def calcFib(list1):
  11.     result = 0
  12.     for i in range((len(list1[0])-1)):
  13.         print(list1[0][i] + '+', end=' ')
  14.     print(list1[0][-1]+ '=', end=' ')
  15.         
  16.     for each in list1[1]:
  17.         result += each
  18.     return '%.2f' % result
  19.    
  20. def main():
  21.     molecular = 2
  22.     denominator = 1
  23.     count = 20

  24.     list1 = createFiblist(molecular, denominator, count)
  25.     result = calcFib(list1)
  26.     print(result)

  27. if __name__ == '__main__':
  28.     main()
复制代码

评分

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

查看全部评分

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

使用道具 举报

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


  9. func(20)

  10. #结果
  11. 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 | 显示全部楼层

  1. def fab(n):
  2.     if n == 1:
  3.         return 1
  4.     elif n == 2:
  5.         return 2
  6.     else:
  7.         return fab(n-1) + fab(n-2)

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

  15. if __name__ == '__main__':
  16.     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 | 显示全部楼层
  1. def fibonacci(num):
  2.     a, b, result = 1, 1, 0
  3.     x, y = 0, 1
  4.     temp = ''
  5.     for i in range(num):
  6.         temp += str(a+b)+'/'+str(x+y)
  7.         if(i<num-1):
  8.             temp += '+'
  9.         result += (a+b)/(x+y)
  10.         c, z = a, x
  11.         a, x = b, y
  12.         b = c+b
  13.         y = z+y
  14.     temp += ('=' + str(round(result, 2)))
  15.     return temp
  16. print(fibonacci(20))
复制代码
  1. 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-4-27 02:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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