如何利用多层循环找出对称的3位数数字?

找出对称的3位数数字?

题目详情:
利用 3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,因为从右到左倒过来还是 121。
题目拓展

如果随便给定一个数字,怎样去判断这个数字是对称数?
解题思路
3位对称数字的查找:

L = [x*100 + y*10 + z for x in range(1, 10) for y in range(0, 10)for z in range(0, 10) if z == x]
print(L)

运行结果

========= RESTART: C:/Users/lenovo/OneDrive/Python/多重for循环求三位对称数0.py =========
>>> 
[101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 606, 616, 626, 636, 646, 656, 666, 676, 686, 696, 707, 717, 727, 737, 747, 757, 767, 777, 787, 797, 808, 818, 828, 838, 848, 858, 868, 878, 888, 898, 909, 919, 929, 939, 949, 959, 969, 979, 989, 999]
>>> 

上面是使用多层循环来找出对称数字,
下面使用的是普通的方法找出对称数字:

L = range(100, 1000)
newL = []#找一个中间列表存放新的数字
for n in L:
    x = int( n/100 )#这里使用 int() 函数是将结果转换为整型,下同
    y = int( n%10 )
    if  x==y :
        newL.append(n)#列表的添加函数 append() 
                      #十位数不用去考虑,只考虑百位与各位相等就可以了
print(newL)

运行结果:

========= RESTART: C:/Users/lenovo/OneDrive/Python/多重for循环求三位对称数.py =========
[101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 606, 616, 626, 636, 646, 656, 666, 676, 686, 696, 707, 717, 727, 737, 747, 757, 767, 777, 787, 797, 808, 818, 828, 838, 848, 858, 868, 878, 888, 898, 909, 919, 929, 939, 949, 959, 969, 979, 989, 999]
>>> 

其实两个结果是一样的,当然是一样的啊!

随便给定n位数字的查找
判断n位数是否为对称数的关键是要分离出每一位上的数字,在与之相对称的位置进行比较,在没有传递这个数之前,程序是无法判断它是几位数的。

def fun( x ):
    y = x
    L = []
    while y:#将每一位数分离开,存在列表 L 里,并且是从低位到高位排序
        L.append( y%10 )
        y = int( y / 10)

    i = len( L )-1
    for n in L:#新生成一个数,把原来的低位便高位,高位变低位
        y = y+  n*pow(10,i)
        i = i - 1

    if x==y:#判断两数是否相等
        return print('此数为对称数!')
    else:
        return print('此数非对称数!')

运行调用函数的结果:

========== RESTART: C:\Users\lenovo\OneDrive\Python\随机给的数字是否为对称数.py ==========
>>> fun(123456654321)
此数为对称数!
>>> fun(1234566543211)
此数非对称数!
>>> 

下午想了比较久,在分离出数字得到 L 后,如何去把 L 的第一个元素与最后一个元素比较,第二个和倒数第二个,一直卡在这一关,突然发现可以使用 L 新生成一个数 y ,在对两者进行比较,这样会简单许多。

猜你喜欢

转载自blog.csdn.net/Huffie/article/details/81389223