1 问题描述
四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
2 解题思路
- 嵌套for循环使填在百位、十位、个位的数字都是1、2、3、4。
- 组成所有的排列后再去掉不满足条件的排列
- 用print函数输出结果
3 解题方法
方法一
total = 0 for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i != j and j != k and i != k: print(str(i)+str(j)+str(k), end=' ') total += 1 print(f"\n共有{total}个数")View Code
第1行: 创建变量total,用于存储1,2,3,4四个数字所组成三位数的个数,初始赋值位0
第3-5行: 用变量 i, j, k 分别表示这个三位数的百位、十位和个位的数字,用3重嵌套for循环分别遍历百位、十位和个位上 1 至 4 的整数
第6行: 因为要组成无重复数字的三位数,所以 i, j, k 两两不相等
第7行: 用print函数打印排列结果,end=' '将结果输出到同一行,以空格结尾
第8行: 每次循环后total在原有的基础上加 1
第10行: 用print函数打印组成三位数的个数,\n换行输出
方法二
from itertools import permutations total = 0 for i in permutations('1234', 3): print(''.join(i), end=' ') total += 1 print(f"\n共有{total}个数")View Code
第1行: 从itertools模块中导入permutations函数
itertools的官方描述:Functional tools for creating and using iterators,即用于创建高效迭代器的函数。
itertools是Python中的内置模块,一般用于创建自定义迭代器
第3行: 创建变量total,用于存储1,2,3,4四个数字所组成三位数的个数,初始赋值位0
第5行: 调用permutations排序函数,排序对象为字符串 '1234' ,指定长度参数为3,用for循环遍历每一个排序
第6行: 由于permutations函数排序后会产生一个元组序列,所以用join函数将元素合并成一个新的字符串,end=' '将结果输出到同一行,以空格结尾
第7行: 每次循环后total在原有的基础上加 1
第9行: 用print函数打印组成三位数的个数,\n换行输出
permutations函数
permutations函数返回可迭代对象的所有排列(顺序有关),排序后会产生一个元组序列
语法:
permutations(item [,r])
item为排序的对象
r为长度参数,用于指定长度的排列中
join()函数
join() 方法是非常重要的字符串方法,用来将列表、集合或元组中包含的多个字符串连接成一个字符串。
**语法: **
'sep'.join(sequence)
参数说明:
sep:分隔符。可以为空
sequence:要连接的元素序列
上面语法的意思是:以sep作为分隔符,将sequence的所有元素合并成一个新的字符串