鱼C论坛

 找回密码
 立即注册
查看: 1953|回复: 11

[已解决]python

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

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

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

x
if那一行看不太懂
最佳答案
2023-7-24 16:04:33
本帖最后由 smallwh 于 2023-7-24 16:07 编辑
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='')
代码第3行是for循环,每次执行循环体(4~7行)时为each赋值。第一次each是s中的第一个字符,第二次each是s中的第二个字符,以此类推。
if (res and (res[-1].lower() == each.lower())) and res[-1] != each:
if后面的表达式根据优先级加上括号,就变成了上面的样子。程序第一次执行for循环时,res是空列表,其bool值为False,导致整个表达式为False。此时执行else中的语句,将each(s的第一个字符)加到res中。
res[-1].lower() 指res的最后一个元素的小写,each.lower() 指当前each的小写。res[-1].lower() == each.lower()指判断res最后加入元素的小写是否等于each.lower() 。
res[-1] != each指res的最后一个元素是否不等于当前each。
也就是说,if语句判断的是前后两个字符(分别是res[-1]和each)是否为同一个字母的大小写。如果前后两个字符为同一个字母的大小写,则都不要;若都是同一个字母的小写(或者都是大写),则都保留;若前后字母不同,也都保留。
微信图片_20230724113007.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-24 11:32:56 | 显示全部楼层
Python中的 if 语句用于进行条件判断。在Python程序中执行特定的代码块时,它检查给定的条件是否为真。这是 if 语句的基本形式:
if condition:
    # 如果condition为真,则执行这里的代码
    ...

condition 是一个布尔表达式,也就是说,它的结果只能是 True 或 False 。当 condition 的结果为 True 时, if 后面的代码块将会执行。如果 condition 的结果为 False ,则跳过 if 后面的代码块。

比如说,你有一个变量 x = 5 ,你想检查 x 是否大于3。你可以使用 if 语句:
x = 5
if x > 3:
    print("x is greater than 3")

在这个例子中, x > 3 就是布尔表达式,因为 5 > 3 ,所以这个表达式为 True ,因此, if 后面的代码块(即打印语句)将会执行。

如果你的 if 语句后面跟随着 else 或者 elif ,那就是在进行更复杂的条件判断, else 用于当 if 的条件为 False 时执行的代码块,而 elif 则是当多个条件判断中的一种为 True 时执行的代码块。

希望这个解释对你有所帮助!如果你还有其他问题,欢迎继续提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 11:40:50 | 显示全部楼层
... res and ...:判断res是不是 不是空列表
... res[-1].lower() == each.lower() ...:res的倒数第一个是不是和each一样
... res[-1] != each:大小写不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-24 11:41:44 | 显示全部楼层
本帖最后由 cjjJasonchen 于 2023-7-24 14:42 编辑

意思是:
如果res存在,并且res的最后一个字符的小写等于each的小写,并且res的最后一个字符不等于each

简单来说就是如果res不是空的

        each的小写==res的最后一个字符的小写

                res的最后一个字符不等于each

就删掉res的最后一个字符

否则就在res中添加each


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

使用道具 举报

 楼主| 发表于 2023-7-24 11:57:13 | 显示全部楼层
歌者文明清理员 发表于 2023-7-24 11:40
... res and ...:判断res是不是 不是空列表
... res[-1].lower() == each.lower() ...:res的倒数第一个 ...

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

使用道具 举报

 楼主| 发表于 2023-7-24 11:59:51 | 显示全部楼层
adsl9999 发表于 2023-7-24 11:57
each在这里是什么

为什么要从倒数第一个开始,这样的话输出的不会是倒的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-24 12:00:33 | 显示全部楼层
歌者文明清理员 发表于 2023-7-24 11:40
... res and ...:判断res是不是 不是空列表
... res[-1].lower() == each.lower() ...:res的倒数第一个 ...

为什么要从倒数第一个开始,这样的话输出的不会是倒的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 12:03:51 | 显示全部楼层
adsl9999 发表于 2023-7-24 12:00
为什么要从倒数第一个开始,这样的话输出的不会是倒的吗?


代码放上来,代码不要放图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 12:20:24 | 显示全部楼层
adsl9999 发表于 2023-7-24 11:57
each在这里是什么


for each in s
each是遍历s中的字符
比如第一次循环,each就是你输入的第一个字符

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

使用道具 举报

发表于 2023-7-24 12:22:34 | 显示全部楼层
adsl9999 发表于 2023-7-24 12:00
为什么要从倒数第一个开始,这样的话输出的不会是倒的吗?

倒数一个只是判断,又不是从添加到倒数第一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 16:02:51 | 显示全部楼层
这段代码的目标是处理一个字符串,移除其中所有相邻的大小写字母对(例如,'A' 和 'a')。如果两个相邻的字母是同一字母但大小写不同,它们会被移除。整个字符串会从左到右扫描。

让我们来详细解释一下这段代码:
s = input("请输入一个字符串:")  # 从用户处获取输入
res = []  # 初始化一个空列表,用于保存处理后的字符串

for each in s:  # 遍历输入字符串中的每个字符
    # 下面这行是关键,它检查当前字符(each)是否与res列表中的最后一个字符(res[-1])是同一个字母,但大小写不同
    if res and res[-1].lower() == each.lower() and res[-1] != each:  
        res.pop()  # 如果是的话,移除res列表中的最后一个字符
    else:
        res.append(each)  # 否则,将当前字符添加到res列表的末尾

for each in res:  # 遍历res列表中的每个字符
    print(each, end='')  # 打印字符,不添加换行符
if res and res[-1].lower() == each.lower() and res[-1] != each: 这行代码有三个部分的逻辑条件。

res:这个条件检查res列表是否非空。如果res是空的,那么res[-1]是无效的,会引发一个错误。因此,这个条件确保我们只在res非空的时候尝试访问res[-1]。

res[-1].lower() == each.lower():这个条件将res列表中的最后一个字符和当前字符都转化为小写,然后比较它们是否相等。如果相等,那么意味着它们是同一个字母,只是可能大小写不同。

res[-1] != each:这个条件检查res列表中的最后一个字符和当前字符是否完全相等(包括大小写)。如果不相等,那么说明它们是同一个字母的大小写形式。

这三个条件组合在一起就形成了我们的目标:如果res非空,并且res的最后一个字符和当前字符是同一个字母的大小写形式,那么执行res.pop(),否则执行res.append(each)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-24 16:04:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 smallwh 于 2023-7-24 16:07 编辑
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='')
代码第3行是for循环,每次执行循环体(4~7行)时为each赋值。第一次each是s中的第一个字符,第二次each是s中的第二个字符,以此类推。
if (res and (res[-1].lower() == each.lower())) and res[-1] != each:
if后面的表达式根据优先级加上括号,就变成了上面的样子。程序第一次执行for循环时,res是空列表,其bool值为False,导致整个表达式为False。此时执行else中的语句,将each(s的第一个字符)加到res中。
res[-1].lower() 指res的最后一个元素的小写,each.lower() 指当前each的小写。res[-1].lower() == each.lower()指判断res最后加入元素的小写是否等于each.lower() 。
res[-1] != each指res的最后一个元素是否不等于当前each。
也就是说,if语句判断的是前后两个字符(分别是res[-1]和each)是否为同一个字母的大小写。如果前后两个字符为同一个字母的大小写,则都不要;若都是同一个字母的小写(或者都是大写),则都保留;若前后字母不同,也都保留。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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