冬雪雪冬 发表于 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])) {:10_243:}
可以边调试边看相乘的因子
本帖最后由 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)) 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:21
def fun(n):
result = 1
i=2
为什么这个那么像我写的呢 #!/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
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) gopythoner 发表于 2017-4-20 16:38
使用eval直接计算N = 50000大概需要10秒左右
我试了一下其他用循环计算的,我一个帖子都发完了,还没 ...
其实一般来讲代码量和运行时间是成反比的,也就是代码越长,运行时间越短(一般情况下)。
就好比如果你会汇编语言,来写这么个计算程序,速度应该远快于我们用python写的,但是代码量要多得多。
另外,对于这题,理论上循环应该比直接eval计算要快。因为eval实际计算时,也是先转换成数字,再累乘,再累加的。循环事实上只要后2步就可以了。 jerryxjr1220 发表于 2017-4-21 10:51
其实一般来讲代码量和运行时间是成反比的,也就是代码越长,运行时间越短(一般情况下)。
就好比如果你会 ...
{:9_218:}
原来如此
那这样看来使用eval最主要的还是可以节省一点代码量,不过在构造公式的时候还是需要一定的代码来支持的 gopythoner 发表于 2017-4-21 10:58
原来如此
那这样看来使用eval最主要的还是可以节省一点代码量,不过在构造公式的时候还是需 ...
其实我解这题的时候也根本没考虑运行时间,不然不应该用列表的pop的来做循环,直接用index指针要快得多,其实我也是图方便,省事。
所以说,往往代码越是省事,运行时间就越不省时了…{:10_254:} 1
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) kankan 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
>>> #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
给力给力 怎么获得鱼币? 看看 呵呵 我就是来看回复的