ansoncheung 发表于 2023-3-24 16:47:55

上海自来水来自海上

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

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

这思路哪里有问题?为什么只会打‘不是回文联’

歌者文明清理员 发表于 2023-3-24 16:49:50

本帖最后由 歌者文明清理员 于 2023-3-24 16:57 编辑

因为else少了一个缩进
你的代码:
for ...:
    if ...:
      ...
else:
    ....
for...else的意思是先照常进行循环,当循环正常结束时(不是跳出循环),再运行 else 块
你应该把else再缩进一次:
for...:
    if ...:
      ...
    else:
      ...




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

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

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

isdkz 发表于 2023-3-24 16:55:14

你的代码逻辑存在一些问题。在for循环中,continue语句会使程序跳过当前循环的剩余部分并进入下一个循环。

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

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

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

def co(dstr):
    length = len(dstr)
    is_palindrome = True

    for each in range(length // 2):
      if dstr != dstr:
            is_palindrome = False
            break

    if is_palindrome:
      print('是回文联!')
    else:
      print('不是回文联!')

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

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

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

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

在循环结束后,根据is_palindrome变量的值打印结果。
页: [1]
查看完整版本: 上海自来水来自海上