jerryxjr1220
发表于 2017-9-5 15:57:35
古堡主人。 发表于 2017-9-5 14:52
感觉这句好复杂,能不能讲讲这个句话怎么执行的
from itertools import product
print(len(['^_^' for each in product(range(1,19), repeat=3) if sum(each)==20]))
这句吗?
len()函数里面包含的是一个列表推导式,计算所有符合条件的数量。
这个列表推导式由一个for循环构成,把满足条件的子项挑选出来标记为"^_^",其实无论标记什么都是可以不影响最终结果。而这个for循环的可迭代对象是调用了itertools库的product函数生成由3个1~18的数字组成的集合。
a512540
发表于 2017-9-5 16:29:54
每天一题,提高自己。
古堡主人。
发表于 2017-9-5 17:12:36
jerryxjr1220 发表于 2017-9-5 15:57
这句吗?
len()函数里面包含的是一个列表推导式,计算所有符合条件的数量。
这个列表推导式由一个for ...
谢谢你,回答很详细
古堡主人。
发表于 2017-9-5 17:31:46
jerryxjr1220 发表于 2017-9-5 15:57
这句吗?
len()函数里面包含的是一个列表推导式,计算所有符合条件的数量。
这个列表推导式由一个for ...
大概可以理解成只要符合if条件就往列表中存放一个^_^然后统计列表个数
一个热爱学习的
发表于 2017-9-5 18:22:22
看看
liyaya
发表于 2017-9-5 18:41:32
初学者路过
jerryxjr1220
发表于 2017-9-5 20:23:31
古堡主人。 发表于 2017-9-5 17:31
大概可以理解成只要符合if条件就往列表中存放一个^_^然后统计列表个数
是的
siemens2
发表于 2017-9-6 08:40:41
num= 0
for a in range(1,19):
for b in range(1,19):
for c in range(1,19):
if( a+b+c )== 20:
print("%d %d %d" % (a,b,c))----------只到这一步可打印全部符合条件的数组
num+=1
print("符合条件的数组共有%d种"%num)
qlm0216
发表于 2017-9-6 16:38:49
def count():
for i in range(1,20):
for m in range(1,20):
for x in range(1,20):
if i+m+x==20:
print(i,m,x,sep=' ')
print(count())
qlm0216
发表于 2017-9-6 16:42:46
count = 0
for i in range(1, 19):
for j in range(1, 20 - i):
print(i, j, 20 - i - j)
count += 1
print('总共有%d种排列'%count)
这样做减少了一次循环啊,我只想了加,没想到减
lihuayuan
发表于 2017-9-11 19:33:27
还是不知道
谱写未来
发表于 2017-9-13 09:20:52
看答案
风中风中
发表于 2017-9-27 00:45:35
suloman 发表于 2017-8-31 16:49
t = 0
for i in range(1,19):
for j in range(1,19):
这个效率会不会很低
风中风中
发表于 2017-9-27 01:33:57
n = 20
count=0
for a in (1,n-1):
k=n -a
for b in (1,k):
c = k-b
count+=1
print("(%d,%d,%d)\n" %(a,b,c))
print("一共%d次" %count)
shigure_takimi
发表于 2017-12-4 16:21:09
def getAll(targetSum):
## 三种情况:
## 1.a+a+a = targetSum
## 2.a+b+b = targetSum
## 3.a+b+c = targetSum
result = []
if (targetSum//3) * 3 == targetSum:
result.append((targetSum//3,targetSum//3,targetSum//3))
for i in range(1,targetSum-1):
if ((targetSum-i)//2) * 2 == targetSum - i:
result.append((i, (targetSum-i)//2,(targetSum-i)//2))
for i in range(1, targetSum):
for j in range(1, targetSum):
for k in range(1, targetSum):
if i<j<k and i+j+k == targetSum:
result.append((i,j,k))
return result
s = getAll(20)
print('共有{}种不重复的组合。'.format(len(s)))
for i in s:
print(i)
## 共有33种不重复的组合。
## (2, 9, 9)
## (4, 8, 8)
## (6, 7, 7)
## (8, 6, 6)
## (10, 5, 5)
## (12, 4, 4)
## (14, 3, 3)
## (16, 2, 2)
## (18, 1, 1)
## (1, 2, 17)
## (1, 3, 16)
## (1, 4, 15)
## (1, 5, 14)
## (1, 6, 13)
## (1, 7, 12)
## (1, 8, 11)
## (1, 9, 10)
## (2, 3, 15)
## (2, 4, 14)
## (2, 5, 13)
## (2, 6, 12)
## (2, 7, 11)
## (2, 8, 10)
## (3, 4, 13)
## (3, 5, 12)
## (3, 6, 11)
## (3, 7, 10)
## (3, 8, 9)
## (4, 5, 11)
## (4, 6, 10)
## (4, 7, 9)
## (5, 6, 9)
## (5, 7, 8)
shigure_takimi
发表于 2017-12-4 16:22:29
你的解法好像有重复。
yjsx86
发表于 2018-1-29 12:05:44
from itertools import product
it = product(range(1,21),repeat=3)
rs = []
for x in it:
if sum(x) == 20 and sorted(x) not in rs:
rs.append(sorted(x))
print(len(rs))
43731370
发表于 2018-1-29 14:23:49
看高手答案
咕咕鸡鸽鸽
发表于 2019-3-2 15:43:59
def fun88(sum1):
array = []
for i in range(1,sum1):
for j in range(1,sum1):
temp = sum1 - i - j
if temp > 0 and sorted() not in array:
array.append()
for each in array:
print(each)
print("数字{}一共有{}种可能排列".format(sum1,len(array)))
fun88(20)
Geoffreylee
发表于 2020-3-18 16:55:39
def f_88():
return len([ for i in range(1, 20) for j in range(1, 20-i)])
print(f_88())