第14期-数字排列

1 问题描述

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

2 解题思路

  • 嵌套for循环使填在百位、十位、个位的数字都是1、2、3、4。
  • 组成所有的排列后再去掉不满足条件的排列
  • 用print函数输出结果

3 解题方法

方法一

第14期-数字排列
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换行输出

方法二

第14期-数字排列
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的所有元素合并成一个新的字符串

 

上一篇:Node.js学习三(path路径模块)


下一篇:4.DQL查询数据