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

    程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

    案例代码:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. for i in range(1,5):
  5. for j in range(1,5):
  6. for k in range(1,5):
  7. if( i != k ) and (i != j) and (j != k):
  8. print i,j,k

    以上实例输出结果为:

  1. 1 2 3
  2. 1 2 4
  3. 1 3 2
  4. 1 3 4
  5. 1 4 2
  6. 1 4 3
  7. 2 1 3
  8. 2 1 4
  9. 2 3 1
  10. 2 3 4
  11. 2 4 1
  12. 2 4 3
  13. 3 1 2
  14. 3 1 4
  15. 3 2 1
  16. 3 2 4
  17. 3 4 1
  18. 3 4 2
  19. 4 1 2
  20. 4 1 3
  21. 4 2 1
  22. 4 2 3
  23. 4 3 1
  24. 4 3 2

    还有一些别的方法,大家一起来看下。首先是使用列表形式,并计算总结:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. # 原答案没有指出三位数的数量,添加无重复三位数的数量
  5.  
  6. d=[]
  7. for a in range(1,5):
  8. for b in range(1,5):
  9. for c in range(1,5):
  10. if (a!=b) and (a!=c) and (c!=b):
  11. d.append([a,b,c])
  12. print "总数量:", len(d)
  13. print d

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

  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. list_num = [1,2,3,4]
  5.  
  6. list = [i*100 + j*10 + k for i in list_num for j in list_num for k in list_num if (j != i and k != j and k != i)]
  7.  
  8. print (list)

    设置最大,最小值:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. line=[]
  5. for i in range(123,433):
  6.     a=i%10
  7.     b=(i%100)//10
  8.     c=(i%1000)//100
  9.     if a!=b and b!=c and a!=c and 0<a<5 and 0<b<5 and 0<c<5 :
  10.         print (i)
  11.         line.append(i)
  12. print('the total is :',len(line))

    python3 下参考方案:

  1. num=[1,2,3,4]
  2. i=0
  3. for a in num:
  4. for b in num:
  5. for c in num:
  6. if (a!=b) and (b!=c) and (c!=a):
  7. i+=1
  8. print(a,b,c)
  9. print('总数是:',i)

    用集合去除重复选项:

  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-
  3.  
  4. #用集合去除重复元素
  5. import pprint
  6.  
  7. list_num=['1','2','3','4']
  8. list_result=[]
  9. for i in list_num:
  10. for j in list_num:
  11. for k in list_num:
  12. if len(set(i+j+k))==3:
  13. list_result+=[int(i+j+k)]
  14. print("能组成%d个互不相同且无重复数字的三位数: "%len(list_result))
  15. pprint.pprint(list_result)

    python自带这个函数:

  1. #!/usr/bin/env python3
  2. #coding:utf-8
  3.  
  4. from itertools import permutations
  5.  
  6. for i in permutations([1, 2, 3, 4], 3):
  7. print(i)

    再来补充下上面的案例,自带函数那个:

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3.  
  4. #补充一下
  5.  
  6. from itertools import permutations
  7.  
  8. for i in permutations([1, 2, 3, 4], 3):
  9. k = ''
  10. for j in range(0, len(i)):
  11. k = k + str(i[j])
  12. print (int(k))

    还有没事找事之位运算:

  1. # coding:utf-8
  2. #从 00 01 10 到 11 10 01
  3. for num in range(6,58):
  4. a = num >> 4 & 3
  5. b = num >> 2 & 3
  6. c = num & 3
  7. if( (a^b) and (b^c) and (c^a) ):
  8. print a+1,b+1,c+1

    考虑减少冗余判断和循环,做如下优化:

  1. for i in range(1, 5):
  2. for j in range(1, 5):
  3. if (j==i) :
  4. continue;
  5. for k in range(1, 5):
  6. if (k==i or k==j):
  7. continue;
  8. print(i,j,k);

    Python3 测试实例:

  1. #!/usr/bin/python3
  2.  
  3. list = [1,2,3,4]
  4. for i in list:
  5. list1 = list.copy()
  6. list1.remove(i)
  7. for j in list1:
  8. list2 = list1.copy()
  9. list2.remove(j)
  10. for k in list2:
  11. print(i, j, k)

    加入了format函数:

  1. #!/usr/bin/python
  2. #-*- coding: UTF-8 -*-
  3.  
  4. list_num = [1,2,3,4]
  5. list = [i*100 + j*10 + k for i in list_num for j in list_num for k in list_num if ( i != j and i != k and j != k)]
  6. d = len(list)
  7. print('1,2,3,4能组成 %d 个互不相同且无重复数字的三位数。' % d)
  8. print('他们各是:%s' % list)

    数量统计用个做自加:

  1. #!/usr/bin/env python3
  2. #coding=utf-8
  3.  
  4. from itertools import permutations
  5. t = 0
  6. for i in permutations('1234',3):
  7. print(''.join(i))
  8. t += 1
  9.  
  10. print("不重复的数量有:%s"%t)

    再来一个:

  1. #encoding=utf8
  2. #有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
  3. d = []
  4. for j in range(1,5):
  5. for k in range(1,5):
  6. for l in range(1,5):
  7. if l!=j!=k!=l:
  8. d.append(int(str(j)+str(k)+str(l)))
  9. print d
  10. print len(d)

    直接用列表推导式:

  1. #直接用列表推导式
  2. [(x,y,z) for x in range(1,5) for y in range(1,5) for z in range(1,5) if(x!=y)and(x!=z)and(y!=z)]

    再来看一个:

  1. #coding=utf-8
  2.  
  3. print("----------递归法 -------------")
  4. #递归法
  5. def f01(i):
  6. if i==123:
  7. print(i)
  8. return
  9. else:
  10. if (set('567890') & set(str(i))==set()) and (len(set(str(i)))==3):
  11. print(i)
  12. f01(i-1)
  13. f01(432)
  14.  
  15. print("----------生成器法-------------")
  16. #生成器法
  17. def f02():
  18. for i in range(123,433):
  19. if (set('567890') & set(str(i))==set()) and (len(set(str(i)))==3):
  20. yield i
  21.  
  22. for i in f02():
  23. print(i)

    最后再来看一个:

  1. import itertools
  2.  
  3. DataIn = list('1234')
  4. TmpList = []
  5. for x in list(itertools.combinations(DataIn,3)):
  6. TmpList = TmpList + list(itertools.permutations(x,3))
  7. for i in TmpList:
  8. print(''.join(i))

    不得不说,网上的各位大神的奇思妙想非常之多啊。。。上面的实例是本人在网上寻找的,各位可以来看下大神们的思路,有助于提高自己的编码水平。。。

    如果感觉不错的话,请多多点赞支持哦。。。

python2.7练习小例子(一)的更多相关文章

  1. python2.7练习小例子(二十九)

        29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...

  2. python2.7练习小例子(十二)

        12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...

  3. python2.7练习小例子(八)

        8):题目:输出 9*9 乘法口诀表.     程序分析:分行与列考虑,共9行9列,i控制行,j控制列.     程序源代码: #!/usr/bin/python # -*- coding: ...

  4. python2.7练习小例子(七)

        7):题目:将一个列表的数据复制到另一个列表中.     程序分析:使用列表[:].     程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...

  5. python2.7练习小例子(二十七)

        27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.      #!/usr/bin/python # -*- coding: UTF-8 -* ...

  6. python2.7练习小例子(二十八)

    28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母.     程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...

  7. python2.7练习小例子(二十四)

        24):1.题目:利用递归方法求5!.     程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...

  8. python2.7练习小例子(二十三)

        23):题目:求1+2!+3!+...+20!的和.     程序分析:此程序只是把累加变成了累乘. #!/usr/bin/python # -*- coding: UTF-8 -*- n = ...

  9. python2.7练习小例子(十八)

    19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数.      #!/usr/bin/python # -*- ...

  10. python2.7练习小例子(十七)

        17):题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制.     程序分析: ...

随机推荐

  1. linux cenots7安装mysql

        1.下载mysql 下载的话先确认好版本. system:centos7 mysql:5.7 下面的版本自己选择,一般是86位的. 下载好的文件 2.上传到服务器 soft文件夹,终端也进入了 ...

  2. MSIL实用指南-生成if...else...语句

    if...else...语句是非常重要的选择语句,它的生成一般需要ILGenerator的DefineLabel方法和MarkLabel方法,以及Brtrue_S和Br_S指令. 一.DefineLa ...

  3. NHibernate的基本使用

    一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码 针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(B ...

  4. JavaScript利用数组原型,添加方法实现遍历多维数组每一个元素

    原型就是提供给我们为了让我们扩展更多功能的. 今天学习了用js模拟底层代码,实现数组多维的遍历.思想是在数组原型上添加一个方法. // js中的数组forEach方法,传入回掉函数 能够帮助我们遍历数 ...

  5. 翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

    4.4.7. The CONSTANT_Utf8_info Structure The CONSTANT_Utf8_info structure is used to represent consta ...

  6. React-Native(六):React Native完整的demo项目

    该项目在http://www.lcode.org/study-react-native-opensource-two/上发现 更有意思的发现这个网站https://juejin.im/是采用vue.j ...

  7. 使用MFC创建C++程序

    编译环境:VS2017 MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. ...

  8. tkinter的冷却技能

    validatecommand=(f,s1,s2,s3) f就是冷却后的验证函数名,s1,s2,s3这些时额外的选项,这些选项会作为参数依次传给f函数. register()冷却作用:register ...

  9. 处理异常、常用类、反射、类加载与垃圾回收、java集合框架

    异常处理概述 检查异常:检查异常通常是用户错误或者不能被程序员所预见的问题.(cheched) 运行时异常:运行时异常是一个程序在运行过程中可能发生的.可以被程序员避免的异常类型.(Unchecked ...

  10. java同时连接db2和mysql的程序

    db2的jar包安装参见:http://www.cnblogs.com/zifeiy/p/7918554.html 代码: package com.anbank.datafetch; import j ...