无法将50个豆子全部捡起来

无法将50个豆子全部捡起来

问题描述:

无法将50个豆子全部捡起来,如下,只捡起了34个豆子

相关截图:

https://img1.sycdn.imooc.com//climg/64d1af0609cf1d3f09250167.jpg

相关代码:

# coding: utf-8


import random
import asyncio


# 豆子总数
beans = list(range(1, 51))


async def child_a():
    a_beans = []
    a_result = 0
    for b in beans:
        a_beans.append(b)
        beans.remove(b)
        a_result += 1
        await asyncio.sleep(random.random())
    print(a_beans)
    return a_result

async def child_b():
    b_beans = []
    b_result = 0
    for b in beans:
        b_beans.append(b);
        beans.remove(b)
        b_result += 1
        await asyncio.sleep(random.random())
    print(b_beans)
    return b_result

async def main():
    result = await asyncio.gather(child_a(), child_b())
    return result


if __name__ == '__main__':
    result = asyncio.run(main())
    print("a_beans:", result[0])
    print("b_beans:", result[1])


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!不要用for 循环将beans的每个豆子加入到豆子列表中,使用while beans: 判断beans 中是否有豆子,有豆子便执行取豆子。另外取豆子可以使用随机函数random.choice()随机出一个豆子加入到当前函数的a_beans豆子列表中,再将随机出的豆子从beans 列表中移除

https://img1.sycdn.imooc.com//climg/64d1b71b0955030404750608.jpg

祝学习愉快~

  • 曲别针010 提问者 #1

    为什么不能使用for函数,我记得不是很清楚了,如果列表为空的话,for函数还是if函数就不会执行了

    2023-08-08 11:43:41
  • 好帮手慕小猿 回复 提问者 曲别针010 #2

    同学,你好!是的,如果列表为空就不执行了,可以用for循环。但是这个场景不适合,两个异步函数都在使用for循环操作beans 这个列表,在循环中还对beans 内容进行remove删除,删除后两个函数再循环beans,造成beans这个变量数据紊乱,所以结果不对。如果使用while beans 就是判断有没有豆子,不管豆子是什么豆子,有豆子就执行循环。比较适用。同学可尝试使用for 、while 的不同结果。

    祝学习愉快~

    2023-08-08 12:01:57
  • 曲别针010 提问者 回复 好帮手慕小猿 #3

    可以感觉到最优选择是while,for循环这个虽然还是没有彻底理解,但有一点感觉了,谢谢老师,后面我自己再理解下

    2023-08-10 10:23:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师