KevinLee1234567 发表于 2020-11-8 17:43:40

判断是否为回文数

思路:拿数字的首尾位,正数第二位和倒数第二位,正数第三位和倒数第三位,......依此类推判断是否相等,如果对,则为回文数

问题是:都不是回文数

代码如下,恳请大佬看下问题出在何处,
1,是否最里面嵌套的循环或者break和continue语句有问题么?
2,为什么变量temp的值总是False



m = int(input('请输入次数:'))#程序运行次数
while m:
    print('请输入一共正整数:',end='')   
    a = input()   #输入的数字为字符串形式
    n = len(a)         #输入数字的位数
    temp = False
    for i in a:      #逐个拿出输入字符串数字的每一个位数上的值
      for x in range(1,n+1):#逐个拿出输入字符串数字长度的数的值
            if i != a[-x]: #将输入的字符串的第一个数和最后一个数对比是否相等
                break   #条件成立立马退出循环

            if i == a[-x]:#将输入的字符串的第一个数和最后一个数对比是否相等                           
                continue   #条件成立继续从头开始执行循环               
      
            temp = True                           
    if temp == True:
      print('是回文数')
      
    else:
      print('不是回文数')


    m -= 1

suchocolate 发表于 2020-11-8 18:08:54

def ck(x):
    return str(x) == str(x)[::-1]       


def main():
    m = input('请输入测试次数:')
    while m:
      a = input('请输入待判断的回文数:')
      if ck(a):
            print('是回文')
      else:
            print('不是回文')
      m -= 1


if __name__ == '__main__':
    main()

jackz007 发表于 2020-11-8 18:16:06

本帖最后由 jackz007 于 2020-11-8 19:19 编辑

m = int(input('请输入次数:')) #程序运行次数
while m:
    print('请输入一共正整数:',end='')   
    a = input()                  
    n = len(a)                  
    temp = True                  # 使用排除法,先假设 a 是回文数,因为在后续循环比较中,否定才是最为高效的判断,如果始终都无法否定,那自然就是了。
    for i in range(len(a) // 2): # 每次比较 2 个字符,只需要循环字符串 a 字符数量的一半次数就可以了
      if a != a[- 1 - i] :# 字符串 a 的首尾字符两两比较
            temp = False         # 如果不相同,那就修改 temp 为 False
            break                # 退出循环
    if temp == True:
      print('是回文数')
    else:
      print('不是回文数')
    m -= 1

jackz007 发表于 2020-11-8 18:27:33

本帖最后由 jackz007 于 2020-11-8 18:40 编辑

      楼主的代码有大幅度精简的余地,下面的代码与楼主的代码作用完全相同
for _ in range(int(input('请输入次数:'))) :
    a = input('请输入一个正整数:')
    if a == a[:: -1] : print('是回文数')
    else : print('不是回文数')

永恒的蓝色梦想 发表于 2020-11-8 19:29:10

jackz007 发表于 2020-11-8 18:27
楼主的代码有大幅度精简的余地,下面的代码与楼主的代码作用完全相同

写一行可不是什么好事for _ in range(int(input('请输入次数:'))) :
    str = input('请输入一个正整数:')
   
    if str == str[::-1]:
      print('是回文数')
    else:
      print('不是回文数')

KevinLee1234567 发表于 2020-11-9 21:36:02

suchocolate 发表于 2020-11-8 18:08


感谢大佬指导,本人小白,学习还比较浅,最后一句还没学过。我运行了一下这段代码,里面漏了m转为整形哦{:5_109:},不过代码确实挺精简的。

KevinLee1234567 发表于 2020-11-9 21:39:42

jackz007 发表于 2020-11-8 18:16


感谢大佬回复,小白努力学习中,我那个代码确实比较冗余,请问我那个是哪里出了问题,为啥总不对{:5_109:}

KevinLee1234567 发表于 2020-11-9 21:41:20

永恒的蓝色梦想 发表于 2020-11-8 19:29
写一行可不是什么好事

为啥你们头像下面有那多图案

永恒的蓝色梦想 发表于 2020-11-10 12:26:19

KevinLee1234567 发表于 2020-11-9 21:41
为啥你们头像下面有那多图案

这个是勋章,你点一下,然后可以去领个 VIP 的勋章

张晨旺 发表于 2020-11-24 17:47:08

自己也写了一个回文数
a=input("请输入一个正整数:")
if str.isdigit(a) anda!='0':#判断输入的是全部是数字。且不是0开头
    b=a[::-1]
    if(a==b):
      print(a,"是回文数")
    else:print(a," 不是回文数")
else:print("没有输入正确格式的正整数")
页: [1]
查看完整版本: 判断是否为回文数