鱼C论坛

 找回密码
 立即注册
查看: 138|回复: 5

python课后题回文数问题,这串代码写完之后如果输入满足else条件的数字,python不...

[复制链接]
发表于 2024-11-9 20:20:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
x=int(input('输入一个整数'))
sum=0
a=0
i=1
if x < 0 or x % 10==0 and x > 0:
    print(x,'不是回文数')
else:
    while i <= len(str(x)):
        a=x%10
        sum=a*10**(int(len(str(x))-1))+sum
        x=x//10
    if sum == x:
        print(x,'是回文数')



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-9 20:29:05 | 显示全部楼层
len(str(x)) 计算的是整数 x 转换成字符串后的字符长度,而不是 x 的位数。对于整数来说,位数就是它的字符串表示的长度。
在 while 循环中,每次循环都将 x 除以10(即 x=x//10),这会导致 x 逐渐减小,直到变为0。这意味着循环会在达到 x 的位数之前就结束。
if sum == x: 这个条件检查是错误的,因为 sum 应该是反转后的数字,而 x 是原始数字。你应该在循环结束后再比较 sum 和原始的 x。
if x < 0 or x % 10==0 and x > 0: 这个条件检查的逻辑有误。如果 x 是负数或者以0结尾的正数,它不是回文数。x % 10==0 这个条件对于所有以0结尾的数都是成立的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-9 20:33:59 | 显示全部楼层
看来您在尝试编写一个程序来判断一个数是否是回文数。您的代码目前不完整,下面是一个完整的回文数检查代码示例:
x = int(input('输入一个整数: '))
if x < 0 or (x % 10 == 0 and x != 0):
    print(f"{x} 不是回文数")
else:
    original = x
    reversed_number = 0
    while x > 0:
        digit = x % 10
        reversed_number = reversed_number * 10 + digit
        x = x // 10
        
    if original == reversed_number:
        print(f"{original} 是回文数")
    else:
        print(f"{original} 不是回文数")

**解释:**
1. 首先检查如果 `x` 是负数或者 `x` 是一个以零结尾的非零数,那么它不能是回文数。
2. 然后,我们通过不断取末尾数字并反转构成一个新的数字 `reversed_number`。
3. 最后,比较原始数字和反转后的数字,如果相等,则是回文数,否则不是。

您可以根据这个示例来完成您的代码。希望这能帮助您理解并解决您的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-9 21:23:18 | 显示全部楼层
          通过字符串的方式判断回文数非常简单:
while True:
    s = input('输入一个整数')
    try:
        int(s)                      # 如果输入不是整数这里会异常,直接跳到 except 处
        print(s , '是回文数') if s = s[::-1] else print(s , '不是回文数')
        break
    except:                         # 如果输入不是整数会发生异常,直接来到这里继续执行
        print('输入不是整数!\n')
       代码2:通过数值判断,代码稍许复杂
while True :
    s = input('输入一个整数')
    try:
        x = int(s)                  # 如果输入不是整数这里会异常,直接跳到 except 处
        y = 0
        while x :
            x , y = x // 10 , y * 10 + x % 10
        if x == y :
        print(s , '是回文数') if x == y else print(s , '不是回文数')
    except:                         # 如果输入不是整数会发生异常,直接来到这里继续执行
        print('输入不是整数!\n')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-9 21:28:52 | 显示全部楼层
本帖最后由 jackz007 于 2024-11-9 21:40 编辑

    代码1:字符串切片法
while True :
    s = input('输入一个整数:')
    try:
        int(s)                      # 如果输入不是整数这里会异常,直接跳到 except 处
        print(s , '是回文数') if s == s[:: -1] else print(s , '不是回文数')
        break
    except:                         # 如果输入不是整数会发生异常,直接来到这里继续执行
        print('输入不是整数!\n')
    代码2:数值比较法
while True :
    s = input('输入一个整数:')
    try:
        x = int(s)                  # 如果输入不是整数这里会异常,直接跳到 except 处
        c , d = x , 0
        while c :
            c , d = c // 10 , d * 10 + c % 10
        print(x , '是回文数') if d == x else print(x , '不是回文数')
        break
    except:                         # 如果输入不是整数会发生异常,直接来到这里继续执行
        print('输入不是整数!\n')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-10 10:16:12 | 显示全部楼层
很cool的阳 发表于 2024-11-9 20:29
len(str(x)) 计算的是整数 x 转换成字符串后的字符长度,而不是 x 的位数。对于整数来说,位数就是它的字符 ...

if sum == x:这个地方知道了,引入新变量来判断应该可以。
x%10对所有0结尾的数字成立没问题吧,0结尾的数字确实不是回文数啊。
但是您说的第一句话还是没太理解,像您说的整数的位就是字符串长度了,为什么还不行呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表