Python 案例001 (有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数)

题目内容来自网络 ,加入了个人理解的过程 ,和点评


#!/usr/bin/python
# -*- coding: UTF-8 -*-

#Author : Wumi

#题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
#程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

# 如果四个数字中有个零  ,难度就稍微增加了
num =[] # list
for i in range(1,5): # range 的高位是不包括在内的
    for j in range(1,5):
        for k in range(1,5):
            if i!=j and i != k and  j!=k :
                print i,j,k
                print k,j,i # reverse num
                num.append([i,j,k])
print "how many num we have of the permutation and combination :",len(num)   # 24

# big tall up
#将for循环和if语句综合成一句,直接打印出结果

lists =[ (i*100+10*j+k) for i in range(1,5) for j in range(1,5) for k in range(1,5) if ( i!=j and i !=k and j!=k )]
print len(lists)
print len(lists),":",lists

# use set function to remove the duplicate numbers    ,set 是没有重复数据的
# one important tips is that the alphabet can uses join function +
alphabetList = ['1','2','3','4']
numberList = [ int(i+j+k) for i in alphabetList for j in alphabetList for k in alphabetList if (len(set(i+j+k)) ==3)]
print numberList ,":",len(numberList)
# question is why i != k and != j ? 也就是为什么没有重复位 ?? 譬如 111 or 122 等

# here is the core reason ::
lists =['1','2','3']
for i in lists:
    for j in lists:
        print set(i+j) # add memeber into set using plus +  ---> set(['1', '2'])  ,no replicate data
        print int(i+j)
"""
set(['1'])
11
set(['1', '2'])
12
set(['1', '3'])
13
set(['1', '2'])
21
set(['2'])
22
set(['3', '2'])
23
set(['1', '3'])
31
set(['3', '2'])
32
set(['3'])
33
"""


posted @ 2017-07-17 12:40  yuerspring  阅读(823)  评论(0编辑  收藏  举报