老师,能看下7-2作业有问题吗

老师,能看下7-2作业有问题吗

相关代码:

# coding:utf-8
import random
import threading
import time

candy = [i for i in range(1,101)]

stu_ = {
    '小朋友1':{ 'candy':[], 'count':0},
    '小朋友2':{'candy':[], 'count':0},

    '小朋友3':{'candy':[], 'count':0},

    '小朋友4':{'candy':[], 'count':0},

    '小朋友5':{'candy':[], 'count':0},
}

def work():
    if len(candy) == 0:
        return
    val_ = []
    for i in range(20):
        val = random.choice(candy)
        print(val)
        val_.append(val)

    print(val_)
    list_ = list(stu_.keys())
    print(list_,'list00000000000')

    for k , v  in stu_.items():
        if v['count']==20:
            list_.remove(k)
            print('removeeeee', k)

    range_stu = random.choice(list_)

    for k,v in stu_.items():
        if range_stu == k:
            v['candy'] = val_
            v['count']= len(val_)
            print('%s分到了%s糖果' % (k, val))
    time.sleep(0.1)


if __name__ == '__main__':
    start = time.time()
    print(candy)

    t_list = []
    for i in range(len(stu_)):
        t = threading.Thread(target=work )
        t_list.append(t)
        t.start()

    for t in t_list:
        t.join()
    for k,v in stu_.items():
        print('{}分到了糖果:{},数量:{}'.format(k,v['candy'], v['count']))
    print(candy)
    print(time.time()-start)


正在回答 回答被采纳积分+1

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

1回答
好帮手慕美 2022-02-20 10:45:15

同学,你好!在取到糖果后, 应在糖果的列表candy中移除该元素,避免得到重复的元素

https://img1.sycdn.imooc.com//climg/6211aaf609f3085f04370117.jpg

祝学习愉快!

  • 提问者 慕斯卡3169268 #1

    以上面的逻辑直接加remove会报错,是不是要加线程锁解决?

    如下图这样写可以吗

    • # coding:utf-8
      import multiprocessing
      import random
      import threading
      import time

      candy = [i for i in range(1,101)]

      stu_ = {
         '小朋友1':{ 'candy':[], 'count':0},
         '小朋友2':{'candy':[], 'count':0},

         '小朋友3':{'candy':[], 'count':0},

         '小朋友4':{'candy':[], 'count':0},

         '小朋友5':{'candy':[], 'count':0},
      }

      def work(lock):
         lock.acquire()
         if len(candy) == 0:
             return
         val_ = []
         for i in range(20):
             val = random.choice(candy)
             print(val)
             candy.remove(val)
             val_.append(val)

         print(val_)
         list_ = list(stu_.keys())
         print(list_,'list00000000000')

         for k , v  in stu_.items():
             if v['count']==20:
                 list_.remove(k)
                 print('removeeeee', k)

         range_stu = random.choice(list_)

         for k,v in stu_.items():
             if range_stu == k:
                 v['candy'] = val_
                 v['count']= len(val_)
                 print('%s分到了%s糖果' % (k, val))
         time.sleep(0.1)
         lock.release()


      if __name__ == '__main__':
         start = time.time()
         print(candy)

         lock = threading.Lock()

         t_list = []
         for i in range(len(stu_)):
             t = threading.Thread(target=work ,args=(lock, ))
             t_list.append(t)
             t.start()

         for t in t_list:
             t.join()
         for k,v in stu_.items():
             print('{}分到了糖果:{},数量:{}'.format(k,v['candy'], v['count']))
         print(candy)
         print(time.time()-start)


    2022-02-21 01:02:58
  • 好帮手慕美 回复 提问者 慕斯卡3169268 #2

    同学,你好!同学的写法是可以的哦!祝学习愉快!

    2022-02-21 09:30:02
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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