作者jackflu (jackflu)
看板Python
標題[問題] 吃藥隨機分配
時間Fri Jun 30 12:01:22 2017
目的:不重複的分配吃藥,假設有7種藥,3餐吃2顆,睡前吃1顆。
想要達成:
Morning : [4, 5]
Noon : [7, 3]
Night : [2, 1]
Sleep : [6]
我寫的 2.7版本
import random
drug = [1, 2, 3, 4, 5, 6, 7 ]
take = random.sample(drug,2)
print "Morning : " , take
take = random.sample(drug,2)
print "Noon : " , take
take = random.sample(drug,2)
print "Night : " , take
take = random.sample(drug,1)
print "Sleep : " , take
我只能寫出會重複的
新手爬文後想不出來請教
感謝指導
---更新 感謝幾位大大 目前只看的懂一樓大大的---
import random
drug = [1, 2, 3, 4, 5, 6, 7 ]
take = random.sample(drug,2)
print "Morning : " , take
for t in take : drug.remove(t)
take = random.sample(drug,2)
print "Noon : " , take
for t in take : drug.remove(t)
take = random.sample(drug,2)
print "Night : " , take
for t in take : drug.remove(t)
take = random.sample(drug,1)
有更漂亮的寫法嗎?
--- 再次感謝 換了看起來比較舒服 ---
import random
drug = [1, 2, 3, 4, 5, 6, 7 ]
random.shuffle(drug)
print drug
print "Moring: ",(drug[0],drug[1])
print "Noon: " ,(drug[2],drug[3])
print "Night: " ,(drug[4],drug[5])
print "Sleep: " , drug[6]
還希望可以更簡短,繼續研究看看
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.113.217
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1498795285.A.BC8.html
→ kuso0516: for t in take : drug.remove(t) 06/30 12:08
推 CaptainH: permutation ... 06/30 13:44
→ CaptainH: or shuffle 06/30 13:45
→ y3k: 最快就是拿出來後要從drug中移除阿... 06/30 14:10
推 APM99: drug = [ s for s in drug if s not in take] 06/30 15:42
※ 編輯: jackflu (36.231.113.217), 06/30/2017 21:09:35
推 ErnieYang: 用shuffle 然後pop 06/30 23:47
→ y3k: random.shuffle(drug) 然後print(drug)出來看看便知 07/01 12:35
※ 編輯: jackflu (1.163.97.26), 07/01/2017 18:03:42
→ y3k: 我認為不需要了 再短會降低可閱姓 07/01 22:29