鱼C论坛

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

[已解决]判断输入的字符串是否为回联文

[复制链接]
发表于 2018-5-14 23:55:06 | 显示全部楼层 |阅读模式

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

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

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('不是回文联!')

看不懂这个程序  能一步一步讲一下吗
最佳答案
2018-5-15 08:53:55
hi 请参考,这道题的考核点是:for循环、if语句、函数基础使用、字符串的元素访问,其中 for循环+元素访问是理解的难点

def palindrome(string): #以  string = '上海自来水来自海上' 为例
    length = len(string) #求出字符串string的长度,这里是 9
    last = length-1 #序列从索引0开始计数,因此最后一位元素的索引是8
    length //= 2 # 地板除,确定string的中间元素位置,求出的索引是 4 (即:'水')
    flag = 1 #标志位,始终为1 即为回文联

    for each in range(length):  #这里是理解的难点:通过for循环进行元素的一一比对,each分别取 0,1,2,3
        if string[each] != string[last]: #第一轮比对是 string[0] 和 string[8],即'上' 和 '上'
            flag = 0
        last -= 1 #因为last -1 ,第二轮对比就是 string[1] 和 string[7],即'海' 和 '海',第三轮、第四轮以此类推,直到所有元素比对结束。

#若if条件为真,flag被赋值为0,回文联不成立;反之,为回文联
    if flag == 1:
        return 1
    else:
        return 0

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

使用道具 举报

发表于 2018-5-15 07:40:43 | 显示全部楼层
falg为【标志变量】,等于1时表示为回温脸。
last参与循环,用来控制循环次数。这个不用讲。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-15 08:00:48 | 显示全部楼层
1、定义了一个函数,并且传了一个参数
2、求这个传参的字符串长度
3、求最后一位的序列号
4、字符串长度整除
5、for循环前面的字符串和最后一个不相同
6.……太多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-15 08:53:55 | 显示全部楼层    本楼为最佳答案   
hi 请参考,这道题的考核点是:for循环、if语句、函数基础使用、字符串的元素访问,其中 for循环+元素访问是理解的难点

def palindrome(string): #以  string = '上海自来水来自海上' 为例
    length = len(string) #求出字符串string的长度,这里是 9
    last = length-1 #序列从索引0开始计数,因此最后一位元素的索引是8
    length //= 2 # 地板除,确定string的中间元素位置,求出的索引是 4 (即:'水')
    flag = 1 #标志位,始终为1 即为回文联

    for each in range(length):  #这里是理解的难点:通过for循环进行元素的一一比对,each分别取 0,1,2,3
        if string[each] != string[last]: #第一轮比对是 string[0] 和 string[8],即'上' 和 '上'
            flag = 0
        last -= 1 #因为last -1 ,第二轮对比就是 string[1] 和 string[7],即'海' 和 '海',第三轮、第四轮以此类推,直到所有元素比对结束。

#若if条件为真,flag被赋值为0,回文联不成立;反之,为回文联
    if flag == 1:
        return 1
    else:
        return 0

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

使用道具 举报

发表于 2018-5-15 08:58:12 | 显示全部楼层
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: # 如果比较结束了依旧咩有修改flag的值,说明没有不对称的情况,返回True
        return 1
    else:
        return 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-13 09:17:56 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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