第十九课:函数课后后面两道题
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不是列表的意思吗这都啥和啥啊
{: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:}救命啊好难
问题分析及解答:
(第一个方法的问题)
原代码中的 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 小助理,如未能正确解答您的问题,请继续追问。
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)#反转列表 好难啊 好象能看懂一点了。{:5_109:} xiaoniugogogo 发表于 2025-5-15 09:05
第二个方法:
list1 = list(string)#把字符串类型变量string转成列表类型
list2 = reversed(li ...
谢谢您的解惑,但是我有疑问不明白,,小甲鱼老师在 列表 3 中说 reverse():翻转列表
这个题目里面reveresd也是反转列表这两个有什么用法上的不同吗 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站都搜索到了就这里不明白 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==空格. 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==空格. qasa 发表于 2025-5-15 12:09
谢谢您的解惑,但是我有疑问不明白,,小甲鱼老师在 列表 3 中说 reverse():翻转列表
这个题目里面 ...
list1 =
list1.reverse()# 直接修改原列表
print(list1) # 输出:
list2 =
reversed_list2 = list(reversed(list2))# 转换为列表
print(reversed_list)# 输出:
print(list2)#输出:
通俗讲一个改变原列表,一个不改变原列表 xiaoniugogogo 发表于 2025-5-15 14:49
list1 =
list1.reverse()# 直接修改原列表
print(list1) # 输出:
谢谢您,我全都明白了,翻阅了一下之前的笔记就是基本功不熟悉
页:
[1]