python3.0练习100题——001

本文通过Python3解答了一个经典组合数学问题:由1、2、3、4组成的无重复数字的三位数有多少种组合。提供了三种解决方案:使用三重循环、改进后的循环和利用itertools.permutations函数。对比了不同方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自学python3中,现在开始每天在python2.71 100例中做一道题,用python3实现,并写下一些思考~加油(ง •̀灬•́)ง

题目网站(http://www.runoob.com/python/python-100-examples.html)

 

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

我的答案:

def fun():
    n=0
    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):
                    print("%d%d%d"%(x,y,z))
                    n=n+1
    print("tatal:%d"%n)

fun()

 

思考:

1.用三个循环嵌套可以遍历所有可能的数值,再用if条件筛选出来。但是在数据量大的时候遍历,可能会延长时间。所以可以改进一下代码:

def fun():
    n=0
    for x in range(1,5):
        for y in range(1,5) :
            if y!=x:            #增加if条件语句,让循环要产生的数字减少,更省运行时间
                for z in range(1,5):
                    if  (x!=z) and (y!=z):
                        print("%d%d%d"%(x,y,z))
                        n=n+1
    print("tatal%d"%n)

fun()

 

2.用permutations的方法

 from itertools import permutations
 for i in permutations([1,2,3,4],3):
     print("%d%d%d" %(i[0],i[1],i[2]))

 itertools.permutations(iterable,r)

创建了一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同: 返回p中任意取r个元素做排列的元组的迭代器。

等于说是从列表[1,2,3,4]任意取三个元素,各种排列后,返回含有三个元素的tuple。最后输出的时候格式化一下就好了~

 

转载于:https://www.cnblogs.com/drifter/p/9059872.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值