小明一家过桥_【练习】用python解决小明一家过桥问题
import random
list1=[] #存放所有遍歷的結(jié)果
#等待過橋的人員
bridge1={'小明':1,'弟弟':3,'爸爸':6,'媽媽':8,'爺爺':12}
#過橋后的人員
bridge2={}
#判斷未過橋的人是否空了(全部過完后,程序停止,看總共用了多長時間)
len1=len(bridge1)
print(len1)
#while True:
print('初始情況:當(dāng)前未過橋的人是:',end=' ')
print(bridge1)
print('初始情況:當(dāng)前已過橋的人是:', end=' ')
print(bridge2)
print('*********************************')
#一次while,就完成一次一家人完整的過河流程;一次fow,就完成一次過河和回來的過程(2個人過河,一個人回來)
while True:
for i in range(1,10):
print('第%d次過橋和回來的過程如下:' % i)
#隨機(jī)從未過橋的人員中取一個人出來(key),取出來是一個字符串型的數(shù)據(jù)
p1=random.choice(list(bridge1))
print(p1+'準(zhǔn)備過橋')
#print(type(p1))
#取出后,將這個人對應(yīng)的過橋時間取出來(value),取出來是一個整數(shù)型的數(shù)據(jù)
print(p1+'的時間為'+str(bridge1[p1]))
#print(type(bridge1[p1]))
time1=bridge1[p1] #將第一個人的所用時間存起來,用于后面比較取大值
#取出第一個人后,把這個人賦值給已過河的人,并且從未過河的人群中刪除
bridge2[p1]=bridge1[p1]
del bridge1[p1]
print(bridge1)
#print('準(zhǔn)備過橋:', end=' ')
#print(bridge2)
#同理,再從未過橋的人隨機(jī)取一個人和對應(yīng)的時間。此時發(fā)現(xiàn)一個問題,有可能和前一次取的人一樣,所以前面應(yīng)該取一次,刪一次。
p2=random.choice(list(bridge1))
print(p2+'準(zhǔn)備過橋', end=' ')
#print(type(p2))
#print(bridge1[p2])
#print(type(bridge1[p2]))
time2=bridge1[p2] #將第二個人的所用時間存起來,用于后面比較取大值
print(p2+'的時間為:'+str(bridge1[p2]))
#取出第二個人后,把這個人賦值給已過河的人,并且從未過河的人群中刪除
bridge2[p2]=bridge1[p2]
del bridge1[p2]
print(bridge1)
print('已過橋:', end=' ')
print(bridge2)
#求上面兩個值的最大值
time3=max(time1, time2)
print('過橋時間為:'+str(time3))
total_time=total_time+time3
#再將總時間減去第一次過河的最長時間
#left_time=30-time3
print('當(dāng)前未過橋的人是:',end=' ')
print(bridge1)
print('當(dāng)前已過橋:', end=' ')
print(bridge2)
#如果都過完河了,就沒必要再返回啦!所以終止!
if len(bridge1)==0:
print('最終總時長為:%d' % total_time)
break
#print('當(dāng)前剩余時間為:%d' % left_time)
#再從已過橋的人中選一個時間最短的人回來,再把這個人的所用時間取出來,再把這個人從已過橋的人中搬回未過橋的人中
p3=min(bridge2, key=bridge2.get)
#p3=random.choice(list(bridge2))
time4=bridge2[p3]
print(p3+'回來', end=' ')
#print(bridge2[p3])
print(p3+'的時間為:'+str(bridge2[p3]))
bridge1[p3]=bridge2[p3]
del bridge2[p3]
len1=len(bridge1)
print('當(dāng)前已過橋:', end=' ')
print(bridge2)
print('當(dāng)前未過橋:', end=' ')
print(bridge1)
total_time = total_time+time4
print('當(dāng)前總花費(fèi)時間:%d' % total_time)
##記錄下這一輪完整過橋的時間
list1.append(total_time)
#print(list1)
if total_time<=30:
break
#執(zhí)行完一輪之后,重新恢復(fù)初始狀態(tài),再跑一輪
bridge1={'小明':1,'弟弟':3,'爸爸':6,'媽媽':8,'爺爺':12}
bridge2={}
total_time=0
list1.sort()
print(list1)
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的小明一家过桥_【练习】用python解决小明一家过桥问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python示例apk_Python获取
- 下一篇: python读取python源代码文件_