鱼C论坛

 找回密码
 立即注册
查看: 1488|回复: 8

[已解决]看不懂有没有大佬解释一下,谢谢!!!

[复制链接]
发表于 2020-7-15 11:24:48 | 显示全部楼层 |阅读模式

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

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

x
QQ图片20200715112419.png
最佳答案
2020-7-15 11:37:34
本帖最后由 Twilight6 于 2020-7-15 11:40 编辑



看注释吧:
def palindrome(string):  # 定义判断回文联函数,设置传入参数为 string
    length = len(string) # 获取字符串总长度,作为 for 循环过程的索引最大范围
    last = length-1      # 总字符串长度减少1,表示的就是最后一个字符的位置参数即 -1
    length //= 2         # 因为每次要相互比较第一个字符和倒序第一个字符是否相同所以只需要比较总长度的一半次数即可
    flag = 1             # 用于判断是否是回文联的标志,默认设置为 1 即默认是回文联,在 for 循环判断过程中若符合 if 条件那么 flag = 0 则不是回文脸
    for each in range(length):
        if string[each] != string[last]:  # 循环判断首尾字符是否相等
            flag = 0     # 若不相等,说明不是回文脸,将 flag = 0
        last -= 1        # 每次循环都要向前一位 , 因为 last 是从最后一个位置参数开始

    if flag == 1:        # 这里就是判断是否为回文脸了,看 flag 的值
        return 1         # 是就返回 1 
    else:
        return 0         # 反之不是回文脸返回 0

string = input('请输入一句话:')
if palindrome(string) == 1:   # 判断函数返回 1 还是 0 , 1 就是回文脸 0 就不是回文脸
    print('是回文联!')
else:
    print('不是回文联!')

其实可以安装甲鱼哥的思路化简下的:
def palindrome(string):  # 定义判断回文联函数,设置传入参数为 string
    length = len(string) # 获取字符串总长度,作为 for 循环过程的索引最大范围
    last = length-1      # 总字符串长度减少1,表示的就是最后一个字符的位置参数即 -1
    length //= 2         # 因为每次要相互比较第一个字符和倒序第一个字符是否相同所以只需要比较总长度的一半次数即可

    for each in range(length):
        if string[each] != string[last]:  # 循环判断首尾字符是否相等
            return '不是回文联!'     # 有个对应位置字符不相等,所以就不是回文联
        last -= 1         # 每次循环都要向前一位 , 因为 last 是从最后一个位置参数开始
    return '是回文联!'             # 全部 for 循环完毕说明没有符合 if 条件一次过,那么就是回文联

string = input('请输入一句话:')
print(palindrome(string))

另一个思路,用列表切片颠倒:
def palindrome(string):  
    if string==string[::-1]:return '是回文联'
    return '不是回文联'

string = input('请输入一句话:')
print(palindrome(string))


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

使用道具 举报

发表于 2020-7-15 11:28:23 | 显示全部楼层
哪里不懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-15 11:30:35 | 显示全部楼层
方法一思路大概就是:循环输入内容的长度// 2 (地板除法)的次数,然后判断第一个数与对应尾数是否相同,如果出现不同返回0,循环结束都是一致就返回1,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-15 11:37:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-15 11:40 编辑



看注释吧:
def palindrome(string):  # 定义判断回文联函数,设置传入参数为 string
    length = len(string) # 获取字符串总长度,作为 for 循环过程的索引最大范围
    last = length-1      # 总字符串长度减少1,表示的就是最后一个字符的位置参数即 -1
    length //= 2         # 因为每次要相互比较第一个字符和倒序第一个字符是否相同所以只需要比较总长度的一半次数即可
    flag = 1             # 用于判断是否是回文联的标志,默认设置为 1 即默认是回文联,在 for 循环判断过程中若符合 if 条件那么 flag = 0 则不是回文脸
    for each in range(length):
        if string[each] != string[last]:  # 循环判断首尾字符是否相等
            flag = 0     # 若不相等,说明不是回文脸,将 flag = 0
        last -= 1        # 每次循环都要向前一位 , 因为 last 是从最后一个位置参数开始

    if flag == 1:        # 这里就是判断是否为回文脸了,看 flag 的值
        return 1         # 是就返回 1 
    else:
        return 0         # 反之不是回文脸返回 0

string = input('请输入一句话:')
if palindrome(string) == 1:   # 判断函数返回 1 还是 0 , 1 就是回文脸 0 就不是回文脸
    print('是回文联!')
else:
    print('不是回文联!')

其实可以安装甲鱼哥的思路化简下的:
def palindrome(string):  # 定义判断回文联函数,设置传入参数为 string
    length = len(string) # 获取字符串总长度,作为 for 循环过程的索引最大范围
    last = length-1      # 总字符串长度减少1,表示的就是最后一个字符的位置参数即 -1
    length //= 2         # 因为每次要相互比较第一个字符和倒序第一个字符是否相同所以只需要比较总长度的一半次数即可

    for each in range(length):
        if string[each] != string[last]:  # 循环判断首尾字符是否相等
            return '不是回文联!'     # 有个对应位置字符不相等,所以就不是回文联
        last -= 1         # 每次循环都要向前一位 , 因为 last 是从最后一个位置参数开始
    return '是回文联!'             # 全部 for 循环完毕说明没有符合 if 条件一次过,那么就是回文联

string = input('请输入一句话:')
print(palindrome(string))

另一个思路,用列表切片颠倒:
def palindrome(string):  
    if string==string[::-1]:return '是回文联'
    return '不是回文联'

string = input('请输入一句话:')
print(palindrome(string))


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

使用道具 举报

发表于 2020-7-15 11:39:44 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-7-15 11:37
看注释吧:



最简:
def isreverse(sub: str): return sub == sub[::-1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-15 11:43:17 | 显示全部楼层

你写一行的话直接用 lambda 就好了呀?
f = lambda string=input('请输入一段字符:'): print('是回文联') if string == string[::-1] else print('不是回文联')
f()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-15 11:44:04 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-7-15 11:43
你写一行的话直接用 lambda 就好了呀?

懒……不想用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 11:45:57 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2020-7-15 11:48:52 | 显示全部楼层

大概的都看不懂不过现在好了。。害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 23:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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