Ccc.Yu 发表于 2020-7-15 11:24:48

看不懂有没有大佬解释一下,谢谢!!!

lhgzbxhz 发表于 2020-7-15 11:28:23

哪里不懂?

yhhpf 发表于 2020-7-15 11:30:35

方法一思路大概就是:循环输入内容的长度// 2 (地板除法)的次数,然后判断第一个数与对应尾数是否相同,如果出现不同返回0,循环结束都是一致就返回1,

Twilight6 发表于 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 != string:# 循环判断首尾字符是否相等
            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 != string:# 循环判断首尾字符是否相等
            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))



_2_ 发表于 2020-7-15 11:39:44

Twilight6 发表于 2020-7-15 11:37
看注释吧:




最简:
def isreverse(sub: str): return sub == sub[::-1]

Twilight6 发表于 2020-7-15 11:43:17

_2_ 发表于 2020-7-15 11:39
最简:

你写一行的话直接用 lambda 就好了呀?
f = lambda string=input('请输入一段字符:'): print('是回文联') if string == string[::-1] else print('不是回文联')
f()

_2_ 发表于 2020-7-15 11:44:04

Twilight6 发表于 2020-7-15 11:43
你写一行的话直接用 lambda 就好了呀?

懒……不想用

Ccc.Yu 发表于 2020-7-15 11:45:57

Twilight6 发表于 2020-7-15 11:37
看注释吧:




超级感谢大佬!!!

Ccc.Yu 发表于 2020-7-15 11:48:52

lhgzbxhz 发表于 2020-7-15 11:28
哪里不懂?

大概的都看不懂不过现在好了。。害
页: [1]
查看完整版本: 看不懂有没有大佬解释一下,谢谢!!!