鱼C论坛

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

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

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

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

使用道具 举报

发表于 2017-4-1 20:39:10 | 显示全部楼层
def calc(n):
        return sum([1.0/(n-i) for i in xrange(0,n,2)])
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 | 显示全部楼层
#coding=cp936
from __future__ import division
def together(x,y):
    y+=1/x
    x-=2
    return (x,y)
#两函数的共同代码

def fun1(n):
    sum=0
    while n!=0:
        sum=together(n,sum)[1]
        n=together(n,sum)[0]
    return sum
#计算偶数所需调用的函数

def fun2(n):
    sum=0
    while n!=-1:
        sum=together(n,sum)[1]
        n=together(n,sum)[0]
    return sum
#计算奇数所需调用的函数
        
try :
    num=int(raw_input('请输入一个非零数:'))
except ValueError:
    num=int(raw_input('您输入的不是非零数,请重新输入:'))
if  num == 0:
    num=int(raw_input('您输入的不是非零数,请重新输入:'))
#进行输入值的类型判断
    
if num%2==0:
    print(fun1(num))
#为偶数时的结果
else:
    print(fun2(num))
#为奇数时的结果

评分

参与人数 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
def a():
    x = int(input("number"))
    sum = 0
    while x%2 == 0:
        sum += 1/x
        x -= 2
        if x <= 0:
            break
    while x % 2 != 0:
        sum += 1/x
        x -= 2
        if x <= 0:
            break

    print(sum)

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

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

    result = sum(list)
    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 | 显示全部楼层
def f(n):
        if n%2 == 0:
                i = n
                s = 0
                while i >0:
                        s =s+ (1/i)
                        i = i-2
                return s
                
        else :
                j = n
                s = j
                while j >=0:
                        s = s+1/j
                        j = j-2
                return s
                
n = int (input(("please input:")))
print (f(n))

评分

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

查看全部评分

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

使用道具 举报

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

if __name__ == '__main__':
        temp = input('输入一个数字')
        num = int(temp)
        if num % 2 == 0:
                sum(2,num)
        else:
                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, 2025-1-16 06:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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