鱼C论坛

 找回密码
 立即注册
查看: 1055|回复: 6

[已解决]入门学习课后习题19讲的回联文程序不太懂,可以帮忙解释一下吗谢谢!!

[复制链接]
发表于 2021-1-29 10:20:20 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
def palindrome(string):
    length = len(string)
    last = length-1
    length //= 2
    flag = 1
    for each in range(length):
        if string[each] != string[last]:
            flag = 0
        last -= 1

    if flag == 1:
        return 1
    else:
        return 0

string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')
最佳答案
2021-1-29 10:36:11
本帖最后由 jackz007 于 2021-1-29 10:37 编辑
  1. def palindrome(string):
  2.     length = len(string)                  # length = 字符串长度
  3.     last = length-1                       # last = 字符串 string 最后一个字符的索引
  4.     length //= 2                          # length = length / 2,循环次数,由于每次比较一对字符,所以,循环次数是字符串长度的一半
  5.     flag = 1                              # flag = 1 先假定字符串就是回文联,然后,试图在循环检查中予以否定
  6.     for each in range(length):            # 循环开始
  7.         if string[each] != string[last]:  # 如果首尾对应字符不相等
  8.             flag = 0                      # 否定前面的假设,字符串不是回文联
  9.         last -= 1                         # 字符串末尾索引减 1,准备下一对字符的比较

  10.     if flag == 1:                         # 循环结束后,根据 flag 的值是否为 1 判断字符串是否为回文联
  11.         return 1
  12.     else:
  13.         return 0

  14. string = input('请输入一句话:')
  15. if palindrome(string) == 1:
  16.     print('是回文联!')
  17. else:
  18.     print('不是回文联!')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-29 10:36:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-29 10:37 编辑
  1. def palindrome(string):
  2.     length = len(string)                  # length = 字符串长度
  3.     last = length-1                       # last = 字符串 string 最后一个字符的索引
  4.     length //= 2                          # length = length / 2,循环次数,由于每次比较一对字符,所以,循环次数是字符串长度的一半
  5.     flag = 1                              # flag = 1 先假定字符串就是回文联,然后,试图在循环检查中予以否定
  6.     for each in range(length):            # 循环开始
  7.         if string[each] != string[last]:  # 如果首尾对应字符不相等
  8.             flag = 0                      # 否定前面的假设,字符串不是回文联
  9.         last -= 1                         # 字符串末尾索引减 1,准备下一对字符的比较

  10.     if flag == 1:                         # 循环结束后,根据 flag 的值是否为 1 判断字符串是否为回文联
  11.         return 1
  12.     else:
  13.         return 0

  14. string = input('请输入一句话:')
  15. if palindrome(string) == 1:
  16.     print('是回文联!')
  17. else:
  18.     print('不是回文联!')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 10:37:10 | 显示全部楼层
for循环长度半次数,如果string的单一循环不能跟最后一个序列匹配上的话,就继续下次循环;

...

(原理就是each递增,last递减,保证每次对比都是头尾相配元素)

如果有一次匹配不上的话,flag就为0,函数结果返回0;反之则为1,函数返回1.

下面就是调用函数返回的结果跟1比较,相等就打印是回文,不等就打印不是回文。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 10:37:50 | 显示全部楼层
要善于搜索
[已解决]19讲课后题   怎么理解 0. 判断传入的字符串参数是否为“回文联”
https://fishc.com.cn/thread-185799-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-29 10:43:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-29 10:44:05 | 显示全部楼层
heidern0612 发表于 2021-1-29 10:37
for循环长度半次数,如果string的单一循环不能跟最后一个序列匹配上的话,就继续下次循环;

...

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

使用道具 举报

 楼主| 发表于 2021-1-29 10:44:48 | 显示全部楼层
qq1151985918 发表于 2021-1-29 10:37
要善于搜索
[已解决]19讲课后题   怎么理解 0. 判断传入的字符串参数是否为“回文联”
https://fishc.com ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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