冬雪雪冬 发表于 2017-4-20 20:45:09

本帖最后由 冬雪雪冬 于 2017-4-20 20:46 编辑

冬雪雪冬 发表于 2017-4-20 09:43
弄个笨办法的。

还是原来的思路,把程序简化了。
def func(n):
    list1 =
    str2 = ''.join(['+' + '*' * i for i in range(1, n // 2 +1)])
    sum1 = sum(zip(list1, str2), ())
    return eval(''.join(sum1[:-1]))

Play_with_you 发表于 2017-4-20 21:33:21

{:10_243:}

Play_with_you 发表于 2017-4-20 22:21:31

可以边调试边看相乘的因子

本帖最后由 Play_with_you 于 2017-4-20 22:23 编辑

def fun(n):
    result = 1
    i=2
    j=1
    while((i+j)<=(n)):      
      result+= reduce(lambda x, y: x * y, list(range(i,i + j+1)))
      print(list(range(i,i + j+1)))
      i=i+j+1
      j=j+1
    else:
      try:
            result += reduce(lambda x, y: x * y, list(range(i,n+1)))
            print(list(range(i,n+1)))
      except:
            pass
    return result   
print(fun(2))

Play_with_you 发表于 2017-4-20 22:25:37

def fun(n):
    result = 1
    i=2
    j=1
    while((i+j)<=(n)):
      
      result+= reduce(lambda x, y: x * y, list(range(i,i + j+1)))
      print(list(range(i,i + j+1)))
      i=i+j+1
      j=j+1
    else:
      try:
            result += reduce(lambda x, y: x * y, list(range(i,n+1)))
            print(list(range(i,n+1)))
      except:
            pass
    return result
   
print(fun(2))

ooxx7788 发表于 2017-4-20 22:28:12

Play_with_you 发表于 2017-4-20 22:21
def fun(n):
    result = 1
    i=2


为什么这个那么像我写的呢

type3d 发表于 2017-4-20 23:30:11

#!/usr/bin/env python
#-*-coding:UTF-8-*-
#Filename:getmulti.py

last_n = input("Please input a int number:\n")
last_n = int(last_n)
m_count = 1
n_count = 1
total = 0
while True:
    temp1 = 1
    for i in range(0,m_count):
      temp1 *= (n_count+i)
      n_count += 1
      if n_count > last_n:
            break
    total += temp1
    if n_count > last_n:
      break
print total

aassaa 发表于 2017-4-21 09:57:45

global m,n

def partK(k): #第k项
    global m,n
    res = 1
    for i in range (k):
      res = res*m
      m=m+1
      if m>n: break
    return res

if __name__ == "__main__":
    m=1 #计算位置
    n = int(input("输入自然数:\n"))            
    add = 0
    for j in range(1,n+1):
      add = add + partK(j)
      if m>n:break
    print(add)

jerryxjr1220 发表于 2017-4-21 10:51:39

gopythoner 发表于 2017-4-20 16:38
使用eval直接计算N = 50000大概需要10秒左右
我试了一下其他用循环计算的,我一个帖子都发完了,还没 ...

其实一般来讲代码量和运行时间是成反比的,也就是代码越长,运行时间越短(一般情况下)。
就好比如果你会汇编语言,来写这么个计算程序,速度应该远快于我们用python写的,但是代码量要多得多。
另外,对于这题,理论上循环应该比直接eval计算要快。因为eval实际计算时,也是先转换成数字,再累乘,再累加的。循环事实上只要后2步就可以了。

gopythoner 发表于 2017-4-21 10:58:46

jerryxjr1220 发表于 2017-4-21 10:51
其实一般来讲代码量和运行时间是成反比的,也就是代码越长,运行时间越短(一般情况下)。
就好比如果你会 ...

{:9_218:}
原来如此
那这样看来使用eval最主要的还是可以节省一点代码量,不过在构造公式的时候还是需要一定的代码来支持的

jerryxjr1220 发表于 2017-4-21 11:08:25

gopythoner 发表于 2017-4-21 10:58
原来如此
那这样看来使用eval最主要的还是可以节省一点代码量,不过在构造公式的时候还是需 ...

其实我解这题的时候也根本没考虑运行时间,不然不应该用列表的pop的来做循环,直接用index指针要快得多,其实我也是图方便,省事。
所以说,往往代码越是省事,运行时间就越不省时了…{:10_254:}

su666666 发表于 2017-4-21 14:46:46

1

sxencon 发表于 2017-4-23 09:50:53


number = input('请输入n: ')
num = int(number)
# 默认输入的数大于等于1
i = 1
string = ''
flag = False
for i in range(1, num + 1):
    if i == 1:
      string = string + '1'
      if i == num:
            flag = True
            break
    else:
      for j in range(int((i*(i -1) + 2)/2),int(((i*(i -1) + 2)/2) + i)):
            if j == (i*(i -1) + 2)/2:
                string = string + '+' + str(j)
            else :
                string = string + '*' + str(j)
            if j == num:
                flag = True
                break
    if flag:
      break
print(string)

Dx.Ssssssssss 发表于 2017-4-23 22:18:02

kankan

余欲渔 发表于 2017-4-28 19:09:45

n=13
a=[]
i=1
ii=0
nn=1
while i :
    x=1
    for j in range(i):
      x*=nn
      nn+=1
      if nn>n:
            ii=1
            break
    a.append(x)
    if ii :
      break
    i+=1
print(sum(a))

>>>
RESTART: C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\test.py
6883
>>> 1+2*3+4*5*6+7*8*9*10+11*12*13
6883
>>>

技术部-李宁 发表于 2017-5-3 10:43:55

#coding: gbk


def test(num):
    list1 = list(range(1, num+1))
    def warpper(alist, chengNum = 1, res = 0):
      alist =
      if len(alist) == 1:
            return int(alist)
      if len(alist) <= chengNum + 2:
            return int(alist) + eval('*'.join(alist))
      sub = int(alist) + eval('*'.join(alist))
      alist = + alist
      return warpper(alist, chengNum +1, res )
    return warpper(list1)

print(test(13))
print(1+2*3+4*5*6+7*8*9*10+11*12*13)
print(test(16))
print(1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+16)

结果
6883
6883
365543
365543

badaoqingchen 发表于 2017-5-3 15:59:04

给力给力

亚琪琪 发表于 2017-5-9 19:51:49

怎么获得鱼币?

star_smile 发表于 2017-5-14 14:47:31

看看

771374306 发表于 2017-5-16 18:32:06

呵呵

花开靡荼 发表于 2017-5-18 20:11:41

我就是来看回复的
页: 1 [2] 3 4
查看完整版本: Python:每日一题 31(答题领鱼币)