鱼C论坛

 找回密码
 立即注册
查看: 1792|回复: 6

[已解决]关于12讲课后作业

[复制链接]
发表于 2020-11-11 17:20:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 philip_g 于 2020-11-11 17:24 编辑

求助,关于12讲的第六题的各种问题
首先,答案是:
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
然后,我进行推导以后,应该是这样:
list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.小甲鱼','1.耐克']
list3 = []
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name + ':' + slogan[2:])
print(list3)
问题1:我的输出结果为什么是“['1.耐克:just do it', '2.李宁:一切皆有可能', '3.小甲鱼:让编程改变世界', '4.阿迪达斯:impossible is nothing']”这样的,而不是缩进的。

问题2:为了验证“slogan[0] == name[0]”,我编写了一段代码,如下:
list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
temp = []
for i in list1:
    if i[0] == 1:
        temp.append(i)
print (temp)
结果输出为:[],这个就很郁闷了,我本来的意图实际上是想得到['1.just do it']是我哪里写错了吗?

问题3:关于“slogan[2:]”按照课堂上老师对分片的讲解,我认为应该输出的list2是“['3.小甲鱼','1.耐克']”从索引值为2开始,到结束。参看了问题求助的大部分解释后,我怎么感觉大家解释的意思都是说将列表list2中的每一个元素的索引值为2以后的字符进行保留。关于这点,我十分的费解

请大神们多多指教~小弟在此谢过~~
最佳答案
2020-11-11 20:41:01

问题1:我的输出结果为什么是“['1.耐克:just do it', '2.李宁:一切皆有可能', '3.小甲鱼:让编程改变世界', '4.阿迪达斯:impossible is nothing']”这样的,而不是缩进的?


因为你是直接 print(list3) 打印 list3 , 而 list3 是一个列表所以打印结果就是将整个列表打印出来

你对 list3 加个 for 循环进行打印即可达到一行一行打印的效果,参考代码:
list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.小甲鱼','1.耐克']
list3 = []
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name + ':' + slogan[2:])
for i in list3:
    print(i)


问题2:验证“slogan[0] == name[0]”,出错


你需要知道 字符串的 '1' 是不等于整形 1 的,因为这两个数据类型是不同的

即 '1' 是字符串类型,而 1 是整形,不可能相等,也就永远不可能满足你 if 条件 所以最终输出列表的结果为 空列表

改动后的参考代码:
list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
temp = []
for i in list1:
    if i[0] == '1':     # 这里 1 改成字符串 '1' 或者将 i[0] 改为 int(i[0])      
        temp.append(i)
print (temp)


问题3 建议看下这个帖子,希望有助于你的理解


python 第12讲的课后习题第六题
https://fishc.com.cn/thread-175291-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-11 17:35:21 | 显示全部楼层
问题1你想表示啥?我不明白你说的缩进是什么意思
问题2
for i in list1:
    if i[0] == 1:  #应该是'1',字符,而不是数字
        temp.append(i)
print (temp)
问题3:
因为是在for in循环里啊,遍历列表,并对遍历结果切片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-11 17:51:29 | 显示全部楼层
笨鸟学飞 发表于 2020-11-11 17:35
问题1你想表示啥?我不明白你说的缩进是什么意思
问题2
for i in list1:

第一个问题我要表达的是这样的,应该输出的是:
1.耐克:just do it
2.李宁:一切皆有可能
3.小甲鱼:让编程改变世界
4.阿迪达斯:impossible is nothing
而我推导以后输出的结果是:['1.耐克:just do it', '2.李宁:一切皆有可能', '3.小甲鱼:让编程改变世界', '4.阿迪达斯:impossible is nothing']
为什么没有换行,以及这个单引号怎么去掉呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 20:36:19 | 显示全部楼层
philip_g 发表于 2020-11-11 17:51
第一个问题我要表达的是这样的,应该输出的是:
1.耐克:just do it
2.李宁:一切皆有可能

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

使用道具 举报

发表于 2020-11-11 20:41:01 | 显示全部楼层    本楼为最佳答案   

问题1:我的输出结果为什么是“['1.耐克:just do it', '2.李宁:一切皆有可能', '3.小甲鱼:让编程改变世界', '4.阿迪达斯:impossible is nothing']”这样的,而不是缩进的?


因为你是直接 print(list3) 打印 list3 , 而 list3 是一个列表所以打印结果就是将整个列表打印出来

你对 list3 加个 for 循环进行打印即可达到一行一行打印的效果,参考代码:
list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
list2 = ['4.阿迪达斯','2.李宁','3.小甲鱼','1.耐克']
list3 = []
for slogan in list1:
    for name in list2:
        if slogan[0] == name[0]:
            list3.append(name + ':' + slogan[2:])
for i in list3:
    print(i)


问题2:验证“slogan[0] == name[0]”,出错


你需要知道 字符串的 '1' 是不等于整形 1 的,因为这两个数据类型是不同的

即 '1' 是字符串类型,而 1 是整形,不可能相等,也就永远不可能满足你 if 条件 所以最终输出列表的结果为 空列表

改动后的参考代码:
list1 = ['1.just do it','2.一切皆有可能','3.让编程改变世界','4.impossible is nothing']
temp = []
for i in list1:
    if i[0] == '1':     # 这里 1 改成字符串 '1' 或者将 i[0] 改为 int(i[0])      
        temp.append(i)
print (temp)


问题3 建议看下这个帖子,希望有助于你的理解


python 第12讲的课后习题第六题
https://fishc.com.cn/thread-175291-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-11-12 09:55:42 | 显示全部楼层
Twilight6 发表于 2020-11-11 20:41
因为你是直接 print(list3) 打印 list3 , 而 list3 是一个列表所以打印结果就是将整个列表打印出来
...

非常感谢楼主的解答
关于问题1,那是不是可以理解我发的帖子中反推的答案是有问题的呢?
list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
这个推导以后应该是什么样子的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-12 09:58:53 | 显示全部楼层
philip_g 发表于 2020-11-12 09:55
非常感谢楼主的解答
关于问题1,那是不是可以理解我发的帖子中反推的答案是有问题的呢?
list3 = [name ...

楼上那个帖子点进去理解下,你就能晓得啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 21:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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