鱼C论坛

 找回密码
 立即注册
查看: 2200|回复: 18

[已解决]zuoye

[复制链接]
发表于 2023-4-18 18:56:31 | 显示全部楼层 |阅读模式

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

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

x
s = input("请输入一个字符串:")
   
res = []
for each in s:
    if res and res[-1].lower() == each.lower() and res[-1] != each:
        res.pop()
    else:
        res.append(each)
   
for each in res:
    print(each, end='')

大佬解释一下吧,救救孩子!
最佳答案
2023-4-18 18:59:29
这段代码的功能是移除给定字符串中相邻的大小写字母对。如果一个大写字母和相邻的小写字母相同,或者一个小写字母和相邻的大写字母相同,那么它们将被移除。

让我们一步步解释这段代码:

  • s = input("请输入一个字符串:"):从用户获取一个字符串并将其赋值给变量 s。
  • res = []:创建一个空列表 res,用于存储处理后的字符。
  • for each in s::遍历输入字符串中的每个字符。
  • if res and res[-1].lower() == each.lower() and res[-1] != each::条件判断,用于检查当前字符 each 和上一个字符 res[-1] 是否相同但大小写不同。
    • res and res[-1]:确保 res 列表不为空,因为我们要比较 res 中的最后一个元素。
    • res[-1].lower() == each.lower():将两个字符转换为小写,如果它们相同,则条件成立。
    • res[-1] != each:检查两个字符是否不同(即一个大写,一个小写)。

  • 如果条件成立(即找到大小写不同的相邻字符对),res.pop() 将从 res 列表中删除最后一个字符。
  • 否则,使用 res.append(each) 将当前字符 each 添加到 res 列表中。
  • 最后,使用 for each in res: 和 print(each, end='') 依次打印 res 列表中的每个字符,不换行。


这是一个简单的示例,帮助你理解代码:

输入:s = "aAbBcCdDeEfF"
输出:空字符串

在这个例子中,大小写相邻字符对被逐一移除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-18 18:57:10 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-4-18 19:02 编辑

这段代码是一个简单的字符串去重算法,它能够去除相邻且大小写不同的重复字符。具体来说,假设输入的字符串为 s,首先定义一个空列表 res 用于存储输出结果。然后遍历字符串 s 中的每一个字符 each,如果字符 each 和列表 res 中的最后一个字符相同(经过小写转换),但又不是同一个字符,则删除列表 res 中的最后一个字符;否则将该字符添加到列表 res 中。这样遍历完字符串 s 后,列表 res 中就得到了去重后的字符序列。

最后通过 for 循环遍历输出列表 res 中的每个元素,实现去重后的字符串输出。注意这里为了避免输出时出现换行符,使用了 end='' 参数。

例如:
当输入字符串 s 为 "illioveefisschch" 时,代码的具体运算过程如下所示:

1. 定义空列表 res,初始值为 []
2. 遍历字符串 s,依次取出每个字符
  a. 当遍历到第一个字符 'i' 时,因为 res 列表为空,直接将其添加进去:
res = ['i']

  b. 继续遍历到下一个字符 'l',与 res 中的最后一个 'i' 不相同,直接将其添加进 res:
res = ['i', 'l']

  c. 遍历到字符 'l' 和字符 'i' 相同且大小写不一致,此时需要把 res 最后一个字符 'l' 删除:
res = ['i']

  d. 遍历到字符 'o',直接添加进 res:
res = ['i', 'o']

  e. 遍历到字符 'v',直接添加进 res:
res = ['i', 'o', 'v']

  f. 遍历到字符 'e',直接添加进 res:
res = ['i', 'o', 'v', 'e']

  g. 遍历到字符 'e',与 res 中的最后一个字符 'e' 大小写相同,直接跳过
res = ['i', 'o', 'v', 'e']

  h. 遍历到字符 'f',直接添加进 res
res = ['i', 'o', 'v', 'e', 'f']

  i. 遍历到字符 'i' 和最后一个字符 'f' 大小写相同,但不相等,删除 res 中最后一个字符 'f'
res = ['i', 'o', 'v', 'e']

  j. 遍历到字符 's',直接添加进 res
res = ['i', 'o', 'v', 'e', 's']

  k. 遍历到字符 'c',直接添加进 res
res = ['i', 'o', 'v', 'e', 's', 'c']

  l. 遍历到字符 'h',与 res 中的最后一个字符 'c' 不相同,直接添加进 res
res = ['i', 'o', 'v', 'e', 's', 'c', 'h']

  m. 遍历到字符 'c' 和最后一个字符 'h' 大小写相同,但不相等,删除 res 中最后一个字符 'h'
res = ['i', 'o', 'v', 'e', 's', 'c']

  n. 遍历完 s 字符串后,res 中剩下的元素即为去重后的字符串,将其输出:

输出结果为 "iovesc"
因此,输入为 "illioveefisschch" 时,运行该程序的输出结果为 "iovesc"。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-18 18:59:29 | 显示全部楼层    本楼为最佳答案   
这段代码的功能是移除给定字符串中相邻的大小写字母对。如果一个大写字母和相邻的小写字母相同,或者一个小写字母和相邻的大写字母相同,那么它们将被移除。

让我们一步步解释这段代码:

  • s = input("请输入一个字符串:"):从用户获取一个字符串并将其赋值给变量 s。
  • res = []:创建一个空列表 res,用于存储处理后的字符。
  • for each in s::遍历输入字符串中的每个字符。
  • if res and res[-1].lower() == each.lower() and res[-1] != each::条件判断,用于检查当前字符 each 和上一个字符 res[-1] 是否相同但大小写不同。
    • res and res[-1]:确保 res 列表不为空,因为我们要比较 res 中的最后一个元素。
    • res[-1].lower() == each.lower():将两个字符转换为小写,如果它们相同,则条件成立。
    • res[-1] != each:检查两个字符是否不同(即一个大写,一个小写)。

  • 如果条件成立(即找到大小写不同的相邻字符对),res.pop() 将从 res 列表中删除最后一个字符。
  • 否则,使用 res.append(each) 将当前字符 each 添加到 res 列表中。
  • 最后,使用 for each in res: 和 print(each, end='') 依次打印 res 列表中的每个字符,不换行。


这是一个简单的示例,帮助你理解代码:

输入:s = "aAbBcCdDeEfF"
输出:空字符串

在这个例子中,大小写相邻字符对被逐一移除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-4-18 19:10:54 | 显示全部楼层
isdkz 发表于 2023-4-18 18:59
这段代码的功能是移除给定字符串中相邻的大小写字母对。如果一个大写字母和相邻的小写字母相同,或者一个小 ...

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

使用道具 举报

发表于 2023-4-18 19:11:47 | 显示全部楼层

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

使用道具 举报

发表于 2023-4-18 19:24:46 | 显示全部楼层

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

使用道具 举报

发表于 2023-4-18 19:28:56 | 显示全部楼层

高级模式有一个列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 19:35:28 | 显示全部楼层
isdkz 发表于 2023-4-18 19:28
高级模式有一个列表


对啊,怎么添加序号?

    test

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

使用道具 举报

发表于 2023-4-18 19:36:18 | 显示全部楼层
歌者文明清理员 发表于 2023-4-18 19:35
对啊,怎么添加序号?

test

就用那个列表就自己有序号了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 19:37:32 | 显示全部楼层
isdkz 发表于 2023-4-18 19:36
就用那个列表就自己有序号了呀



    淡定

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

使用道具 举报

发表于 2023-4-18 19:38:22 | 显示全部楼层

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

使用道具 举报

发表于 2023-4-18 19:39:02 | 显示全部楼层


手动添加星号?
  • 阿呸
    • vb


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

使用道具 举报

发表于 2023-4-18 19:40:04 | 显示全部楼层

就是选中点的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 19:44:18 | 显示全部楼层
isdkz 发表于 2023-4-18 19:40
就是选中点的呀

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

使用道具 举报

发表于 2023-4-18 20:21:48 | 显示全部楼层
为什么不是我???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-18 20:28:53 | 显示全部楼层

不好意思,他回复比较快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-18 20:40:08 | 显示全部楼层
歌者文明清理员 发表于 2023-4-18 18:57
这段代码是一个简单的字符串去重算法,它能够去除相邻且大小写不同的重复字符。具体来说,假设输入的字符 ...

怎么感觉最后举例子输出结果不对劲呀,而且遍历过程中删除f那里很懵逼,字符 'i' 和最后一个字符 'f' 大小写相同,但不相等,删除,那其他的不都大小写相同,但不相等,并且这是大小写去重。illioveefisschch里只有小写呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-18 20:41:58 | 显示全部楼层
冷冻哈密瓜 发表于 2023-4-18 20:40
怎么感觉最后举例子输出结果不对劲呀,而且遍历过程中删除f那里很懵逼,字符 'i' 和最后一个字符 'f' 大 ...

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

使用道具 举报

 楼主| 发表于 2023-4-18 20:43:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 17:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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