鱼C论坛

 找回密码
 立即注册
查看: 2682|回复: 2

[已解决]上海自来水来自海上

[复制链接]
发表于 2023-3-24 16:47:55 | 显示全部楼层 |阅读模式

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

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

x
def co(dstr):
    length = len(dstr)
    count = 0
    for each in range(length):
        count -= 1
        if dstr[each] == dstr[count]:
            continue
            print('是回文联!')
    else:
        print('不是回文联!')

dstr = input('请输入一句话:')
co(dstr)

这思路哪里有问题?为什么只会打‘不是回文联’
最佳答案
2023-3-24 16:55:14
你的代码逻辑存在一些问题。在for循环中,continue语句会使程序跳过当前循环的剩余部分并进入下一个循环。

在这个例子中,continue后面的print('是回文联!')永远不会被执行。

此外,else子句属于for循环,而不是if语句,因此当for循环结束时,会打印“不是回文联!”。

为了解决这个问题,你可以在循环内部使用一个布尔变量来标记回文联。以下是修改后的代码:

  1. def co(dstr):
  2.     length = len(dstr)
  3.     is_palindrome = True

  4.     for each in range(length // 2):
  5.         if dstr[each] != dstr[length - each - 1]:
  6.             is_palindrome = False
  7.             break

  8.     if is_palindrome:
  9.         print('是回文联!')
  10.     else:
  11.         print('不是回文联!')

  12. dstr = input('请输入一句话:')
  13. co(dstr)
复制代码


这个版本的代码将检查输入字符串的前半部分是否与后半部分相匹配。

如果它们匹配,那么is_palindrome保持为True。

如果在循环过程中发现不匹配的字符,is_palindrome将被设置为False,并跳出循环。

在循环结束后,根据is_palindrome变量的值打印结果。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-24 16:49:50 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-3-24 16:57 编辑

因为else少了一个缩进
你的代码:
  1. for ...:
  2.     if ...:
  3.         ...
  4. else:
  5.     ....
复制代码

for...else的意思是先照常进行循环,当循环正常结束时(不是跳出循环),再运行 else 块
你应该把else再缩进一次:
  1. for...:
  2.     if ...:
  3.         ...
  4.     else:
  5.         ...
复制代码





第二个问题:
continue 在print的前面,所以当条件满足时,直接进入下一次循环,致使永远不会输出。
然后正常退出(非break)for循环,导致else被执行。

最终代码:
  1. def co(dstr):
  2.     length = len(dstr)
  3.     count = 0
  4.     for each in range(length):
  5.         count -= 1
  6.         if dstr[each] == dstr[count]:
  7.             print('是回文联!')
  8.             continue
  9.         else:
  10.             print('不是回文联!')

  11. dstr = input('请输入一句话:')
  12. co(dstr)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-24 16:55:14 | 显示全部楼层    本楼为最佳答案   
你的代码逻辑存在一些问题。在for循环中,continue语句会使程序跳过当前循环的剩余部分并进入下一个循环。

在这个例子中,continue后面的print('是回文联!')永远不会被执行。

此外,else子句属于for循环,而不是if语句,因此当for循环结束时,会打印“不是回文联!”。

为了解决这个问题,你可以在循环内部使用一个布尔变量来标记回文联。以下是修改后的代码:

  1. def co(dstr):
  2.     length = len(dstr)
  3.     is_palindrome = True

  4.     for each in range(length // 2):
  5.         if dstr[each] != dstr[length - each - 1]:
  6.             is_palindrome = False
  7.             break

  8.     if is_palindrome:
  9.         print('是回文联!')
  10.     else:
  11.         print('不是回文联!')

  12. dstr = input('请输入一句话:')
  13. co(dstr)
复制代码


这个版本的代码将检查输入字符串的前半部分是否与后半部分相匹配。

如果它们匹配,那么is_palindrome保持为True。

如果在循环过程中发现不匹配的字符,is_palindrome将被设置为False,并跳出循环。

在循环结束后,根据is_palindrome变量的值打印结果。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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