鱼C论坛

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

[已解决]回文联确认:flag&last是什么作用

[复制链接]
发表于 2020-5-20 22:39:06 | 显示全部楼层 |阅读模式

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

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

x
def palindrome(string):
    length = len(string)       字符的长度?
    last = length-1              这个作用是什么?-1的意思是?
    length //= 2                 回文联应该不会被2整除啊?
    flag = 1                       flag完全没懂什么作用
    for each in range(length):
        if string[each] != string[last]:      这个公式是每次确认1~7跟最后last-=1(6~0)配合?
            flag = 0                flag为什么又变成0了
        last -= 1                  这个循环里,如果if成立,last最后等0就退出?

    if flag == 1:                这个去掉会怎么样
        return 1
    else:
        return 0

string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')
最佳答案
2020-5-20 22:45:23
本帖最后由 Twilight6 于 2020-5-20 23:13 编辑

length = len(string)       字符的长度?


是的,就是字符串长度

last = length-1              这个作用是什么?-1的意思是?


是用于这:
if string[each] != string[last]: 
你想下,last表示字符串全部长度减1后是几呢?实际上就是代表字符串最后一个参数的位置参数值



length //= 2                 回文联应该不会被2整除啊?


这边用的是地板除法 , 向下取整的效果,因为你字符串只需要判断
第一个和最后一个是否相等
第二个和倒二个是否相等
第三个和倒三个是否相等.......
所以只需要for 循环字符串长度的一半即可达到目的


flag = 1                       flag完全没懂什么作用

flag 在这个函数里就是用于判断for循环内是否成功判断为回文联


if string[each] != string[last]:      这个公式是每次确认1~7跟最后last-=1(6~0)配合?

这个参考第2个问题


flag = 0                flag为什么又变成0了

因为判断成功头尾对应位置的字符不同不是回文联


last -= 1                  这个循环里,如果if成立,last最后等0就退出?

每次循环都会减少 1 而each每次都会增加1 直到循环结束退出循环

if flag == 1:                这个去掉会怎么样

这个去掉的话这里就无法判断了:
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')
因为这里判断条件是根据你返回的值是不是1进行判断是不是回文联
最后

如果对你有帮助就给我个最佳吧~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 22:45:23 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

本帖最后由 Twilight6 于 2020-5-20 23:13 编辑

length = len(string)       字符的长度?


是的,就是字符串长度

last = length-1              这个作用是什么?-1的意思是?


是用于这:
if string[each] != string[last]: 
你想下,last表示字符串全部长度减1后是几呢?实际上就是代表字符串最后一个参数的位置参数值



length //= 2                 回文联应该不会被2整除啊?


这边用的是地板除法 , 向下取整的效果,因为你字符串只需要判断
第一个和最后一个是否相等
第二个和倒二个是否相等
第三个和倒三个是否相等.......
所以只需要for 循环字符串长度的一半即可达到目的


flag = 1                       flag完全没懂什么作用

flag 在这个函数里就是用于判断for循环内是否成功判断为回文联


if string[each] != string[last]:      这个公式是每次确认1~7跟最后last-=1(6~0)配合?

这个参考第2个问题


flag = 0                flag为什么又变成0了

因为判断成功头尾对应位置的字符不同不是回文联


last -= 1                  这个循环里,如果if成立,last最后等0就退出?

每次循环都会减少 1 而each每次都会增加1 直到循环结束退出循环

if flag == 1:                这个去掉会怎么样

这个去掉的话这里就无法判断了:
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')
因为这里判断条件是根据你返回的值是不是1进行判断是不是回文联
最后

如果对你有帮助就给我个最佳吧~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-20 22:55:45 | 显示全部楼层

回帖奖励 +1 鱼币

记得养成注释加#的习惯:
def palindrome(string):
    length = len(string)       #字符的长度? 是的   
    last = length-1              #这个作用是什么?-1的意思是?  最后一个字符的编号,减一是因为python计数从0开始
    length //= 2                 #回文联应该不会被2整除啊? 这个地板除是求长度的一半,长度偶数正好一半,长度奇数是减1后的一半
    flag = 1                       #就是个标记,等于1时是回文联
    for each in range(length):     #这个循环只检查一半长度,length已经地板除2了
        if string[each] != string[last]:      #这是把前半的字符和后半的作比对,比如6个字符,就是0-5,1-4,2-3
            flag = 0                # 有一个不相等,就不是回文联,把标记改成0
        last -= 1                  #每循环一次,last减1位,each加1位,互相对应

    if flag == 1:                #flag等于1说明是回文联
        return 1
    else:
        return 0

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

使用道具 举报

发表于 2020-5-23 13:12:47 | 显示全部楼层

回帖奖励 +1 鱼币

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

使用道具 举报

发表于 2020-5-23 18:09:38 | 显示全部楼层

回帖奖励 +1 鱼币

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

使用道具 举报

发表于 2020-5-23 18:09:50 | 显示全部楼层

回帖奖励 +1 鱼币

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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