菜鸟教程例题---第一题:【1,2,3,4】组成无重复的3位数

来源:互联网 发布:网络报警平台网络诈骗 编辑:程序博客网 时间:2024/06/14 12:47

第一题:题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

分析:1.循环:由三位数推出:要做3层循环(定义3个变量,取值范围【1,2,3,4】)

          2.判断:由无重复推出:这3个变量要互不相同(i!=j,i!=k,k!=j)

方法一:简单的循环加判断(但是一定要注意格式:for之后的冒号)(因为Python中的冒号来代替大括号,所以错位尤为重要,错一个空格,输出就是有问题的)

for i in [1,2,3,4]:
    for j in [1,2,3,4]:
        for k in [1,2,3,4]:
            if i!=j and i!=k and j!=k:
                print i,j,k
                n+=1
print "总数为:",n#因为是输出所有符合要求的3位数之后,最后输出总个数,所有这一句在最后,而且是顶头写,不包括在任何语句中

方法二:用append()函数将三位数插入到空列表中
d=[]
for a in range(1,5):
    for b in range(1,5):
        for c in range(1,5):
            if (a!=b) and (a!=c) and (c!=b):
                d.append([a,b,c])
print "总数量:", len(d)#列表的长度就是总个数
print d

方法三:从最小值遍历到最大值,从而找出"个十百"位来,把符合“个十百”位各不相同要求的留下
line=[]
for i in range(123,433):#从123开始,到432结束,但是range中要432+1作为临界值
    a=i%10 #个位数
    b=(i%100)//10 #十位数
    c=(i%1000)//100 #百位数
    if a!=b and b!=c and a!=c and 0<a<5 and 0<b<5 and 0<c<5:
        print(i)
        line.append(i)
print("the total is:",len(line))

方法四:用set函数来去除重复的元素,len=3的符合条件
a=0
list_num=['1','2','3','4']#此处把1,2,3,4定义成字符类型,即不能进行数字间的运算
for i in list_num:
    for j in list_num:
        for k in list_num:
            if len(set(i+j+k))==3:#set(i+j+k)就是把(i,j,k)中重复的情况(如:232)去除掉了,所以set()函数就是这个作用,我也还没有深入了解
                 print(int(i+j+k))#上面定义成了字符型,所以(i+j+k)不会进行加法运算
                 a+=1
print("total is:% d"%a)#输出时有%d时:后面还要有%d

方法五:把for循环和if语句合成一句,(知道有这种表示形式就可以了,不必记住或者用到自己程序中)
listnum=[1,2,3,4]
list=[i*100+j*10+k for i in listnum for j in listnum for k in listnum if(j!=i and k!=j and k!=i)]
print(list)



阅读全文
0 0
原创粉丝点击