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个数相加),几个数相加由键盘控制. 程序分析: ...
随机推荐
- [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
[笔试题目] 使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符 ...
- ASP.NET MVC中错误处理方式
/// <summary> /// 标记了HandleError,并指明错误处理页为AboutError.aspx /// </summary> /// <returns ...
- 微信qq,新浪等第三方授权登录的理解
偶们常说的第三方是指的微信,qq,新浪这些第三方,因为现在基本每个人都有qq或者微信,那么我们就可以通过这些第三方进行登录.而这些网站比如慕课网是通过第三方获取用户的基本信息 它会有个勾选按钮,提示是 ...
- Python内置函数(55)——globals
英文文档: globals() Return a dictionary representing the current global symbol table. This is always the ...
- python 鸭子类型
首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不 ...
- j2ee基础(1)servlet的生命周期
Servlet的生命周期 Servlet 生命周期规定了 Servlet 如何被加载.实例化.初始化. 处理客户端请求,以及何时结束服务. 该生命周期可以通过 javax.servlet.Servle ...
- 启动Eclipse时An internal error occurred during: "Initializing Java Tooling".错误
解决方法一 重置窗口布局: windows > perspective > reset perspective 解决方法二: 如果上述方法不好使,采用下面的这种方法: 删除workspac ...
- 表单中各种input汇总
html表单 表单用于搜集不同类型的用户输入,表单由不同类型的标签组成,相关标签及属性用法如下: 1.<form>标签 定义整体的表单区域 action属性 定义表单数据提交地址 meth ...
- PDF之pdfkit
说起pdf就想到了一款很适用的工具,那就是pdfkit,在前几天的项目中,有一个功能要实现,为了实现这一个功能,于是我大海茫茫中查询各种百科,不负众望的让我找到了我心怡的工具,想必也就是它了.好了废话 ...
- Debian8搭建LEMP环境
LEMP环境指的是Linux+Nginx+MariaDB+PHP 这里我选择的版本是最新的MariaDB和PHP7 安装Nginx 相对于Apache,Nginx是一个轻量级的高性能web服务器并在近 ...