关于小朋友分糖果作业的问题
问题描述:代码是否符合题给要求。
# coding:utf-8
"""
有100个糖果,分给5个小朋友,每个小朋友分20个糖果,启动5个线程,来分糖果吧~
提示:5个线程可以看做5个小朋友
"""
import threading
# 初始化100颗糖果
candys = ['candy' for i in range(100)]
# 初始化5个小孩
childs = [1, 2, 3, 4, 5]
# 初始化每个小孩的糖果
candy = []
# 初始化结果
child_candy = {}
def share_candys():
index = 0
while len(candys) > 0:
if len(candy) < 20:
c = candys.pop()
candy.append(c)
elif len(candy) == 20:
child_candy[childs[index]] = candy
index += 1
candy.clear()
# print(len(candys))
# print(len(candy))
continue
# for each in childs:
# child_candy[each] = candy
if __name__ == '__main__':
for i in childs:
t = threading.Thread(target=share_candys)
t.start()
print(child_candy)
# print(len(candys))
27
收起
正在回答
1回答
同学,你好!
以上代码不符合题目要求,pop删除candys最后一个元素后,candys长度为0不满足循环条件,则child_candy[5]不会被添加进字典。
以上代码总体的思路不太好,可以换一种思路,或根据以下思路调整代码。
import threading
# 初始化100颗糖果
candys = ['candy' for i in range(100)]
# 初始化5个小孩
childs = [1, 2, 3, 4, 5]
# 初始化结果
child_candy = {}
#设置index为全局变量
index = 0
def share_candys():
# 初始化每个小孩的糖果,每次函数传入线程后candy初始化为空列表,就不用了清空
candy = []
# 设置index为全局变量,避免函数传入线程后index初始为0
global index
while len(candys) > 0:
if len(candy) < 20:
c = candys.pop()
candy.append(c)
if len(candy) == 20:
child_candy[childs[index]] = candy
index += 1
if __name__ == '__main__':
for i in childs:
t = threading.Thread(target=share_candys)
t.start()
print(child_candy)
祝学习愉快!
Python全能工程师
- 参与学习 人
- 提交作业 16247 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星