python2.7练习小例子(一)
1)题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
案例代码:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- for i in range(1,5):
- for j in range(1,5):
- for k in range(1,5):
- if( i != k ) and (i != j) and (j != k):
- print i,j,k
以上实例输出结果为:
- 1 2 3
- 1 2 4
- 1 3 2
- 1 3 4
- 1 4 2
- 1 4 3
- 2 1 3
- 2 1 4
- 2 3 1
- 2 3 4
- 2 4 1
- 2 4 3
- 3 1 2
- 3 1 4
- 3 2 1
- 3 2 4
- 3 4 1
- 3 4 2
- 4 1 2
- 4 1 3
- 4 2 1
- 4 2 3
- 4 3 1
- 4 3 2
还有一些别的方法,大家一起来看下。首先是使用列表形式,并计算总结:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- # 原答案没有指出三位数的数量,添加无重复三位数的数量
- 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
将for循环和if语句综合成一句,直接打印出结果:
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- list_num = [1,2,3,4]
- 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)]
- print (list)
设置最大,最小值:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- line=[]
- for i in range(123,433):
- 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))
python3 下参考方案:
- num=[1,2,3,4]
- i=0
- for a in num:
- for b in num:
- for c in num:
- if (a!=b) and (b!=c) and (c!=a):
- i+=1
- print(a,b,c)
- print('总数是:',i)
用集合去除重复选项:
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- #用集合去除重复元素
- import pprint
- list_num=['1','2','3','4']
- list_result=[]
- for i in list_num:
- for j in list_num:
- for k in list_num:
- if len(set(i+j+k))==3:
- list_result+=[int(i+j+k)]
- print("能组成%d个互不相同且无重复数字的三位数: "%len(list_result))
- pprint.pprint(list_result)
python自带这个函数:
- #!/usr/bin/env python3
- #coding:utf-8
- from itertools import permutations
- for i in permutations([1, 2, 3, 4], 3):
- print(i)
再来补充下上面的案例,自带函数那个:
- #!/usr/bin/env python3
- # -*- coding:utf-8 -*-
- #补充一下
- from itertools import permutations
- for i in permutations([1, 2, 3, 4], 3):
- k = ''
- for j in range(0, len(i)):
- k = k + str(i[j])
- print (int(k))
还有没事找事之位运算:
- # coding:utf-8
- #从 00 01 10 到 11 10 01
- for num in range(6,58):
- a = num >> 4 & 3
- b = num >> 2 & 3
- c = num & 3
- if( (a^b) and (b^c) and (c^a) ):
- print a+1,b+1,c+1
考虑减少冗余判断和循环,做如下优化:
- for i in range(1, 5):
- for j in range(1, 5):
- if (j==i) :
- continue;
- for k in range(1, 5):
- if (k==i or k==j):
- continue;
- print(i,j,k);
Python3 测试实例:
- #!/usr/bin/python3
- list = [1,2,3,4]
- for i in list:
- list1 = list.copy()
- list1.remove(i)
- for j in list1:
- list2 = list1.copy()
- list2.remove(j)
- for k in list2:
- print(i, j, k)
加入了format函数:
- #!/usr/bin/python
- #-*- coding: UTF-8 -*-
- list_num = [1,2,3,4]
- 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)]
- d = len(list)
- print('1,2,3,4能组成 %d 个互不相同且无重复数字的三位数。' % d)
- print('他们各是:%s' % list)
数量统计用个做自加:
- #!/usr/bin/env python3
- #coding=utf-8
- from itertools import permutations
- t = 0
- for i in permutations('1234',3):
- print(''.join(i))
- t += 1
- print("不重复的数量有:%s"%t)
再来一个:
- #encoding=utf8
- #有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
- d = []
- for j in range(1,5):
- for k in range(1,5):
- for l in range(1,5):
- if l!=j!=k!=l:
- d.append(int(str(j)+str(k)+str(l)))
- print d
- print len(d)
直接用列表推导式:
- #直接用列表推导式
- [(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)]
再来看一个:
- #coding=utf-8
- print("----------递归法 -------------")
- #递归法
- def f01(i):
- if i==123:
- print(i)
- return
- else:
- if (set('567890') & set(str(i))==set()) and (len(set(str(i)))==3):
- print(i)
- f01(i-1)
- f01(432)
- print("----------生成器法-------------")
- #生成器法
- def f02():
- for i in range(123,433):
- if (set('567890') & set(str(i))==set()) and (len(set(str(i)))==3):
- yield i
- for i in f02():
- print(i)
最后再来看一个:
- import itertools
- DataIn = list('1234')
- TmpList = []
- for x in list(itertools.combinations(DataIn,3)):
- TmpList = TmpList + list(itertools.permutations(x,3))
- for i in TmpList:
- print(''.join(i))
不得不说,网上的各位大神的奇思妙想非常之多啊。。。上面的实例是本人在网上寻找的,各位可以来看下大神们的思路,有助于提高自己的编码水平。。。
如果感觉不错的话,请多多点赞支持哦。。。
python2.7练习小例子(一)的更多相关文章
- python2.7练习小例子(二十九)
29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...
- python2.7练习小例子(十二)
12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...
- python2.7练习小例子(八)
8):题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 程序源代码: #!/usr/bin/python # -*- coding: ...
- python2.7练习小例子(七)
7):题目:将一个列表的数据复制到另一个列表中. 程序分析:使用列表[:]. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
- python2.7练习小例子(二十七)
27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. #!/usr/bin/python # -*- coding: UTF-8 -* ...
- python2.7练习小例子(二十八)
28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...
- python2.7练习小例子(二十四)
24):1.题目:利用递归方法求5!. 程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...
- python2.7练习小例子(二十三)
23):题目:求1+2!+3!+...+20!的和. 程序分析:此程序只是把累加变成了累乘. #!/usr/bin/python # -*- coding: UTF-8 -*- n = ...
- python2.7练习小例子(十八)
19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- ...
- python2.7练习小例子(十七)
17):题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制. 程序分析: ...
随机推荐
- linux cenots7安装mysql
1.下载mysql 下载的话先确认好版本. system:centos7 mysql:5.7 下面的版本自己选择,一般是86位的. 下载好的文件 2.上传到服务器 soft文件夹,终端也进入了 ...
- MSIL实用指南-生成if...else...语句
if...else...语句是非常重要的选择语句,它的生成一般需要ILGenerator的DefineLabel方法和MarkLabel方法,以及Brtrue_S和Br_S指令. 一.DefineLa ...
- NHibernate的基本使用
一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码 针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(B ...
- JavaScript利用数组原型,添加方法实现遍历多维数组每一个元素
原型就是提供给我们为了让我们扩展更多功能的. 今天学习了用js模拟底层代码,实现数组多维的遍历.思想是在数组原型上添加一个方法. // js中的数组forEach方法,传入回掉函数 能够帮助我们遍历数 ...
- 翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)
4.4.7. The CONSTANT_Utf8_info Structure The CONSTANT_Utf8_info structure is used to represent consta ...
- React-Native(六):React Native完整的demo项目
该项目在http://www.lcode.org/study-react-native-opensource-two/上发现 更有意思的发现这个网站https://juejin.im/是采用vue.j ...
- 使用MFC创建C++程序
编译环境:VS2017 MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. ...
- tkinter的冷却技能
validatecommand=(f,s1,s2,s3) f就是冷却后的验证函数名,s1,s2,s3这些时额外的选项,这些选项会作为参数依次传给f函数. register()冷却作用:register ...
- 处理异常、常用类、反射、类加载与垃圾回收、java集合框架
异常处理概述 检查异常:检查异常通常是用户错误或者不能被程序员所预见的问题.(cheched) 运行时异常:运行时异常是一个程序在运行过程中可能发生的.可以被程序员避免的异常类型.(Unchecked ...
- java同时连接db2和mysql的程序
db2的jar包安装参见:http://www.cnblogs.com/zifeiy/p/7918554.html 代码: package com.anbank.datafetch; import j ...