qasa 发表于 2025-5-14 22:38:09

第十九课:函数课后后面两道题

def palindrome(string):
    length = len(string)
    last = length-1
    length //= 2
    flag = 1
    for each in range(length):
      if string != string:
            flag = 0
      last -= 1

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

string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')


这是确认是不是形成回连的真就是一个看不懂求解
请求帮忙尤其是   if string != string:
[]什么意思啊看不懂一个都看不懂很苦恼


方法二
def palindrome(string):
    list1 = list(string)
    list2 = reversed(list1)
    if list1 == list(list2):
      return '是回文联!'
    else:
      return '不是回文联!'
print(palindrome('上海自来水来自海上'))



list1=list(string)       list不是列表的意思吗这都啥和啥啊








qasa 发表于 2025-5-14 22:38:44

{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}救命啊好难

FishC 发表于 2025-5-14 22:39:08

问题分析及解答:

(第一个方法的问题)
原代码中的 if string != string: 是明显的错误,实际应该是比较首尾对称字符。修正后的核心代码应为:


def palindrome(string):
    length = len(string)
    last = length-1
    flag = 1
    for each in range(length//2):
      if string != string: # 关键修改:比较对称位置的字符
            flag = 0
      last -= 1
    return 1 if flag == 1 else 0


逐行解释:

[*]string 表示第each个字符(从头开始)
[*]string 表示倒数第each个字符(从尾开始)
[*]循环比较前半段和后半段对应字符是否相等


(第二个方法的原理)
方法二通过列表反转实现:

list1 = list("上海自来水") # 得到 ['上','海','自','来','水']
list2 = reversed(list1)   # 得到迭代器,实际内容是 ['水','来','自','海','上']
list(list2)               # 将迭代器转换为实际列表


关键点:

[*]list(string) 将字符串拆分为单个字符的列表
[*]reversed() 返回的是反向迭代器,必须用 list() 转换为实际列表才能比较
[*]直接比较原列表与反转后的列表是否完全相同


总结推荐:
方法二更简洁可靠,推荐使用。方法一需要手动控制索引,容易出错。回文判断本质就是验证字符串与其反向字符串是否完全相同。

示例验证:
原字符串:上海自来水来自海上
反转后字符串:上海自来水来自海上(完全相同)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

xiaoniugogogo 发表于 2025-5-15 09:05:58


def palindrome(string):
    length = len(string)#长度
    last = length-1#最后一个字下标
    length //= 2#长度除二,遍历到中间就行
    flag = 1#标志位
    for each in range(length):
      if string != string:#开头字和末尾的字依次对比,有不等的就把标志位置0
            flag = 0
      last -= 1#下标减一,下一轮对比第二个字和倒数第二个字

    if flag == 1:#标志位==1是回文,否则不是
      return 1
    else:
      return 0

string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')
第二个方法:
    list1 = list(string)#把字符串类型变量string转成列表类型
    list2 = reversed(list1)#反转列表

helehck 发表于 2025-5-15 11:39:09

好难啊

zxlhbqhxy 发表于 2025-5-15 12:07:20

好象能看懂一点了。{:5_109:}

qasa 发表于 2025-5-15 12:09:06

xiaoniugogogo 发表于 2025-5-15 09:05
第二个方法:
    list1 = list(string)#把字符串类型变量string转成列表类型
    list2 = reversed(li ...

谢谢您的解惑,但是我有疑问不明白,,小甲鱼老师在   列表 3 中说   reverse():翻转列表
这个题目里面reveresd也是反转列表这两个有什么用法上的不同吗

qasa 发表于 2025-5-15 12:22:09

qasa 发表于 2025-5-15 12:09
谢谢您的解惑,但是我有疑问不明白,,小甲鱼老师在   列表 3 中说   reverse():翻转列表
这个题目里面 ...

def count(*param):
    length = len(param)
    for i in range(length):
      letters = 0
      space = 0
      digit = 0
      others = 0
      for each in param:
            if each.isalpha():
                letters += 1
            elif each.isdigit():
                digit += 1
            elif each == ' ':
                space += 1
            else:
                others += 1
      print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
            
count('I love fishc.com.', 'I love you, you love me.')
这是下一个题目的代码
编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数
这里我不是很理解是for i in range(,,,,)    和      for i in ,,,,,,    这里用 range 的分别是什么呢
还有就是   for j in param:这是从 i 开始吗
其他的上抖音和b站都搜索到了就这里不明白

xiaoniugogogo 发表于 2025-5-15 14:40:00

range(10)其实就是生成了一个的列表,
比如for i in range(10) 就是i等于依次0,1,2,...,9,
for i in __
下划线的地方是一个可迭代对象,通俗讲就是可以循环的,比如列表,然后 i 依次等于其中的每个元素
你的例子里面param,比如i=0,param就是字符串数组的第一个字符串比如param=='I love fishc.com.',param=='I love you,you love me';
for j in param 就是依次让j==这些字符串的每个字符,比如j==‘i‘,J==空格.

xiaoniugogogo 发表于 2025-5-15 14:41:14

qasa 发表于 2025-5-15 12:22
def count(*param):
    length = len(param)
    for i in range(length):



range(10)其实就是生成了一个的列表,
比如for i in range(10) 就是i等于依次0,1,2,...,9,
for i in __
下划线的地方是一个可迭代对象,通俗讲就是可以循环的,比如列表,然后 i 依次等于其中的每个元素
你的例子里面param,比如i=0,param就是字符串数组的第一个字符串比如param=='I love fishc.com.',param=='I love you,you love me';
for j in param 就是依次让j==这些字符串的每个字符,比如j==‘i‘,J==空格.

xiaoniugogogo 发表于 2025-5-15 14:49:19

qasa 发表于 2025-5-15 12:09
谢谢您的解惑,但是我有疑问不明白,,小甲鱼老师在   列表 3 中说   reverse():翻转列表
这个题目里面 ...

list1 =
list1.reverse()# 直接修改原列表
print(list1)   # 输出:
list2 =
reversed_list2 = list(reversed(list2))# 转换为列表
print(reversed_list)# 输出:
print(list2)#输出:
通俗讲一个改变原列表,一个不改变原列表

qasa 发表于 2025-5-19 16:25:32

xiaoniugogogo 发表于 2025-5-15 14:49
list1 =
list1.reverse()# 直接修改原列表
print(list1)   # 输出:


谢谢您,我全都明白了,翻阅了一下之前的笔记就是基本功不熟悉
页: [1]
查看完整版本: 第十九课:函数课后后面两道题