python 数字1,2,3,4,能生成多少个互不相同且无重复数字的四位数 使用for循环嵌套、if判断及range语句的优化

例题要求:

数字:1,2,3,4,

求这四个数字能生成多少个互不相同且无重复数字的四位数,
#符合要求的数字全部保存在一个空列表中
# (用代码计算得出所有数字以及所有数字的个数)

一层一层判断逻辑为:

①建立含有4个整数的列表

②循环组合

③判断是否重复

第一种方式:

 提前用IF判断每一层数不重复

a = [1,2,3,4]
nums = []
for i in a:
    for j in a:
        if j != i:          #如果千位与百位不重复,则继续输出第三位
            for k in a:
                if k !=i and k !=j:     #百位不与十位重复
                    for h in a:
                        if h != i and h != j and h != k:  #十位不与前三位重复
                            num = i*1000+j*100+k*10+h
                            nums.append(num)
print(nums)
print(len(nums))

第二种方式:

循环后去重,将判断条件合并

a = [1,2,3,4]
nums = []
for i in a:
    for j in a:
        for k in a:
            for h in a:    #四层循环
                #判断每个数字不相等
                if i != j and i != k and i != h and j != k and j != h and k != h:
                    num = 1000*i+100*j+10*k+h
                    nums.append(num)
print(nums)
print(len(nums))

还可以用range语句优化,好处是省略一次列表赋值。

range函数的格式为:

range(start, stop[, step])


start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)。
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5。
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)。
 

 解法最终格式:

nums = []
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            for m in range(1,5):
                if i != j and i != k and i != m and j != k and j != m and k != m:
                    a = 1000*i + 100*j + 10*k + m
                    nums.append(a)
print(nums)
print(len(nums))

还有一个比较有趣的解法:

利用集合自动去重的方式,只要判定len函数下集合数列可以=4,就完成了逻辑上的去重

a = [1,2,3,4]
nums = []
for i in a:
    for j in a:
        for k in a:
            for h in a:
                if len({i,j,k,h}) == 4:
                    num = i*1000+j*100+k*10+h
                    nums.append(num)
print(nums)
print(len(nums))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值