循环嵌套里关于赋值的小坑

  • 题目:有1、2、3、4个数字,打印出所有每一位互不相同且无重复数字的三位数?
# 其实这用一个很简单的嵌套循环就可以写出来的,直接上代码。

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:
                x = str(x)
                y = str(y)
                z = str(z)
                print(x+y+z)

咋一看代码没有任何问题,但是运行出来结果不正确。要求每一位都互不相同,但是打印出的结果有相同的。


仔细看过代码,循环和判定条件都没有问题。后面终于看明白了,犯了一个很弱智的错误,在嵌套循环里面,最里面一级的循环结束了才会跳到上一级循环一次,再进入到最里面一级的循环,也就是,在第一次循环后,x,y,z 都被强制转换成了字符串,第二次循环时,只有 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:
                a = str(x)
                b = str(y)
                c = str(z)
                print(x+y+z)

注:在嵌套循环的时候一定要注意变量问题,因为下一次的循环开始,是按照上一次变量的赋值而进行的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值