找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1826|回复: 4

[求助] 新手小白仰望各位大神解答!

1

主题

2

帖子

2

积分

贫民

积分
2
猴子七号 发表于 2019-7-29 12:11:08 | 显示全部楼层 |阅读模式
超级小白,啥都不懂,做练习时感觉第五行代码没问题呀。。。。。。
麻烦用大白话解释

谢谢各位!

sandwich_orders=['fruit sandwich','pork sandwich','chicken sandwich']
finished_sandwich=[]
for sandwich in sandwich_orders:
print('i made your '+sandwich+'.')
finished_sandwich=sandwich_orders.pop()
for a in finished_sandwich:
print(a)

不会上传图片(摁不动那个键)





回复

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
YOUNG丶SIR 发表于 2019-7-30 08:45:14 | 显示全部楼层
sandwich_orders=['fruit sandwich','pork sandwich','chicken sandwich']
finished_sandwich=[]
while sandwich_orders:
        print('i made your '+sandwich_orders[-1]+'.')       
        finished_sandwich.append(sandwich_orders.pop())
for a in finished_sandwich:
        print(a)
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
YOUNG丶SIR 发表于 2019-7-30 08:50:16 | 显示全部楼层
跟在for循环后面的语句要缩进
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
猴子七号  楼主| 发表于 2019-7-31 11:50:56 | 显示全部楼层
YOUNG丶SIR 发表于 2019-7-30 08:45
sandwich_orders=['fruit sandwich','pork sandwich','chicken sandwich']
finished_sandwich=[]
while san ...

thank you!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
qtzb123 发表于 2019-9-21 14:20:03 | 显示全部楼层
其实打个断点用debug测试就很容易看出问题所在
for循环检索是从前往后检索,第一个处理对象是'fruit sandwich'
而list.pop()指令默认是处理最后一个对象,就是'chicken sandwich'

第一次for循环sandwich_orders=['fruit sandwich','pork sandwich','chicken sandwich'],
print的是sandwich_orders[0]也就是'fruit sandwich',但finished_sanwich里面添加的却是sandwich_orders[-1]也就是'chicken sandwich'。for的对象sandwich_orders已经被修改了,第二次for循环的sandwich_orders列表变成了sandwich_orders = ['fruit sandwich','pork sandwich']

第二次for循环sandwich_orders = ['fruit sandwich','pork sandwich'],
print的对象是sandwich_orders[1]也就是'pork sandwich',而finished_sandwich = sandwich_orders.pop()处理的对象是finished_sandwich[-1]也是'pork sandwich',就输出结果来说是没问题的。
但是第二次循环结束,sandwich_orders = ['fruit sandwich'],之后就出问题了

第三次for循环sandwich_orders = ['fruit sandwich'],for循环执行的对象是sandwich_orders[2],但是检索发现对象不存在,于是跳出for循环。导致结果错误。

另外一个问题也是第五行,看上去你原来的设想是将已经完成的三明治放入finished_sandwich中,最后打印出来。但是你用的是finished_sandwich = sandwich_orders.pop(),这个代码的作用是对finished_sandwich进行赋值,在第二次for循环时'pork sandwich'直接将第一次赋的值给覆盖掉了。

至于解决方式2L正解,或者还是用for循环,这里的sandwich_orders等同于你原代码里面的sandwich
  1. sandwich_orders=['fruit sandwich','pork sandwich','chicken sandwich']
  2. finished_sandwich=[]

  3. for i in range(0, len(sandwich_orders)):
  4.     print('i made your '+sandwich_orders[i]+'.')
  5.     finished_sandwich.append(sandwich_orders[i])
  6. for a in finished_sandwich:
  7.     print(a)

  8. exit()
复制代码

回复 支持 反对

使用道具 举报

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

本版积分规则

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