鱼C论坛

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

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

  [复制链接]
 楼主| 发表于 2017-4-1 20:38:16 | 显示全部楼层

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

使用道具 举报

发表于 2017-4-1 20:39:10 | 显示全部楼层
  1. def calc(n):
  2.         return sum([1.0/(n-i) for i in xrange(0,n,2)])
  3. print calc(int(raw_input('Input a number:')))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
新手·ing + 2 + 2 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-1 20:40:04 | 显示全部楼层

python原生的支持分数和复数等数字类型,对数学运算很有利。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-1 21:30:19 | 显示全部楼层

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

使用道具 举报

发表于 2017-4-2 12:52:51 | 显示全部楼层
  1. #coding=cp936
  2. from __future__ import division
  3. def together(x,y):
  4.     y+=1/x
  5.     x-=2
  6.     return (x,y)
  7. #两函数的共同代码

  8. def fun1(n):
  9.     sum=0
  10.     while n!=0:
  11.         sum=together(n,sum)[1]
  12.         n=together(n,sum)[0]
  13.     return sum
  14. #计算偶数所需调用的函数

  15. def fun2(n):
  16.     sum=0
  17.     while n!=-1:
  18.         sum=together(n,sum)[1]
  19.         n=together(n,sum)[0]
  20.     return sum
  21. #计算奇数所需调用的函数
  22.         
  23. try :
  24.     num=int(raw_input('请输入一个非零数:'))
  25. except ValueError:
  26.     num=int(raw_input('您输入的不是非零数,请重新输入:'))
  27. if  num == 0:
  28.     num=int(raw_input('您输入的不是非零数,请重新输入:'))
  29. #进行输入值的类型判断
  30.    
  31. if num%2==0:
  32.     print(fun1(num))
  33. #为偶数时的结果
  34. else:
  35.     print(fun2(num))
  36. #为奇数时的结果
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-2 15:10:34 From FishC Mobile | 显示全部楼层
好人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-2 15:39:57 From FishC Mobile | 显示全部楼层
gopythoner 发表于 2017-4-1 20:22
这个题直接做的话,很简单,但是我觉得不能以分数的形式进行运行,从数学的意义来讲,不够精确

为什么我运行你的代码结果是0呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-2 15:45:29 | 显示全部楼层
n = input("请输入")
def dealodd(n):
    sum1=0
    if n==2:
      sum1=1/2
    else :
       sum1 += 1/n+dealodd(1/(n-2))
    return sum1

def deale(n):
     sum1=0
    if n<=1:
      sum1=1
        else :
       sum1 += 1/n+deale(1/(n-2))
    return sum1
   
if n%2==0:
    print(dealodd(n))
else:
    print(deale(n))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-2 15:50:50 | 显示全部楼层
哨子1122 发表于 2017-4-2 15:39
为什么我运行你的代码结果是0呢

因为你的Python版本是Python2,在Python2中3/2=1,1/2=0,直接取整数部分
想改进可以在开始时加一句:
from __future__ import division
#每个下划线都是双下滑线
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-2 15:58:27 From FishC Mobile | 显示全部楼层
加上就好了 。非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-2 16:03:25 | 显示全部楼层
运行25楼的程序显示如下:
Traceback (most recent call last):
  File "C:\Python34\Untitled2.py", line 26, in <module>
    num=int(raw_input('请输入一个非零数:'))
NameError: name 'raw_input' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-2 16:06:32 | 显示全部楼层
yuclta 发表于 2017-4-2 16:03
运行25楼的程序显示如下:
Traceback (most recent call last):
  File "C:\Python34%untitled2.py", lin ...

你用的到底是什么版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-2 16:14:43 | 显示全部楼层
#1
  1. def a():
  2.     x = int(input("number"))
  3.     sum = 0
  4.     while x%2 == 0:
  5.         sum += 1/x
  6.         x -= 2
  7.         if x <= 0:
  8.             break
  9.     while x % 2 != 0:
  10.         sum += 1/x
  11.         x -= 2
  12.         if x <= 0:
  13.             break

  14.     print(sum)
复制代码


#2
  1. def b():
  2.     x = int(input("number"))
  3.     list = []
  4.     while x%2 == 0:
  5.         list.append(1/x)
  6.         x -= 2
  7.         if x <= 0:
  8.             break

  9.         list.append(1/x)
  10.         x -= 2
  11.         if x <= 0:
  12.             break

  13.     result = sum(list)
  14.     print(result)
复制代码


好像第一种这样写会被人吐槽是吧,改变了bif函数了 小白请大神指导点评下

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
新手·ing + 5 + 5 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-2 16:29:08 From FishC Mobile | 显示全部楼层
一把钢刀斗群魔 发表于 2017-4-2 15:45
n = input("请输入")
def dealodd(n):
    sum1=0

为什么在循环调用dealodd的时候参数要用1/(n-2)而不是直接用n-2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-2 18:21:35 | 显示全部楼层
  1. def f(n):
  2.         if n%2 == 0:
  3.                 i = n
  4.                 s = 0
  5.                 while i >0:
  6.                         s =s+ (1/i)
  7.                         i = i-2
  8.                 return s
  9.                
  10.         else :
  11.                 j = n
  12.                 s = j
  13.                 while j >=0:
  14.                         s = s+1/j
  15.                         j = j-2
  16.                 return s
  17.                
  18. n = int (input(("please input:")))
  19. print (f(n))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-3 00:44:40 | 显示全部楼层
  1. def sum(min,max):
  2.         score = 0
  3.         title = ''
  4.         for i in range(min,max+2,2):
  5.                 score = score + 1 / i
  6.                 title = title + '1/'+str(i)
  7.                 if(i != max):
  8.                         title = title + '+'
  9.         print(title+"="+str(score))

  10. if __name__ == '__main__':
  11.         temp = input('输入一个数字')
  12.         num = int(temp)
  13.         if num % 2 == 0:
  14.                 sum(2,num)
  15.         else:
  16.                 sum(1,num)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-4-3 09:45:15 | 显示全部楼层
gopythoner 发表于 2017-4-1 20:22
这个题直接做的话,很简单,但是我觉得不能以分数的形式进行运行,从数学的意义来讲,不够精确

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

使用道具 举报

发表于 2017-4-3 12:33:16 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-3 17:03:44 | 显示全部楼层
向各位学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-4 22:43:04 | 显示全部楼层
答案:
def summarize(n):
    result = 0
    if n%2 != 0:
        for i in range(1,n+1,2):
            result =result + 1.0/i
        return result
    else:
        for i in range(2,n+1,2):
            result = result + 1.0/i
        return result

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
新手·ing + 3 + 3 支持楼主!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 19:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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