python如果选择不在列表里_Python-list.remove(x)x不在列表中
我正在嘗試在Python 3.3中創建一個簡單的程序,該程序采用四個名稱的列表,并將它們隨機分配給列表中的另一個人.例如,如果名稱是John,Aaron,Lydia和Robin:
約翰先走,然后選擇一個名字.他不能畫自己的東西.如果他這樣做,他會把它放回去并再次抽簽.說約翰畫了羅賓的名字.羅賓的名字將從游泳池中淘汰.接下來是亞倫的抽獎.他畫約翰.約翰的名字被淘汰了.等等,直到分配了所有名稱.
我創建了一個具有四個名稱的列表,并為每個名稱分配了一個值1-4.但是,從列表中刪除時我遇到了一個問題,說該值不存在.
list.remove(x):x不在列表中.
它看起來像這樣:
def drawNames():
import random
John=1
Aaron=2
Lydia=3
Robin=4
validNames=[John, Aaron, Lydia, Robin]
nameDrawn=random.choice(validNames)
def draw():
nameDrawn=random.choice(validNames)
#John's Draw:
draw()
if nameDrawn != 1:
if nameDrawn == 2:
print("John drew: Aaron")
validNames.remove(2)
elif nameDrawn == 3:
print("John drew: Lydia")
validNames.remove(3)
elif nameDrawn == 4:
print("John drew: Robin")
validNames.remove(4)
#Aaron's Draw:
draw()
if nameDrawn !=2:
if nameDrawn ==1:
print("Aaron drew: John")
validNames.remove(1)
elif nameDrawn ==3:
print("Aaron drew: Lydia")
validNames.remove(3)
elif nameDrawn ==4:
print("Aaron drew: Robin")
validNames.remove(4)
#Lydia's Draw:
draw()
if nameDrawn !=3:
if nameDrawn ==1:
print("Lydia drew: John")
validNames.remove(1)
elif nameDrawn ==2:
print("Lydia drew: Aaron")
validNames.remove(2)
elif nameDrawn ==4:
print("Lydia drew: Robin")
validNames.remove(4)
#Robin's Draw:
draw()
if nameDrawn !=4:
if nameDrawn ==1:
print("Robin drew: John")
validNames.remove(1)
elif nameDrawn ==2:
print("Robin drew: Aaron")
validNames.remove(2)
elif nameDrawn ==3:
print("Robin drew: Lydia")
validNames.remove(3)
drawNames()
我也嘗試過使用名稱而不是數字值,這會產生相同的錯誤.
我也覺得這是一個低效的方案.如果您有更好的建議,我將非常有義務.
解決方法:
使用下面的代碼,可能會獲得更好的里程;與上面提供的名稱相比,它可以擴展到許多名稱.
import copy
import random
validNames=["John", "Aaron", "Lydia", "Robin"]
def drawNames(namelist,currentname):
'''
namelist: list of names to draw from
currentname: name of person doing the current draw
'''
draw_namelist = copy.copy(namelist) # make a copy to remove person drawing if needed
if currentname in draw_namelist: # check if the person drawing is in the list
draw_namelist.remove(currentname) # remove current name if in list
try:
drawn_name = random.choice(draw_namelist)
namelist.remove(drawn_name)
newnamelist = namelist
print "Drew {}".format(drawn_name)
print "New list: {}".format(newnamelist)
except:
print "Nobody for me to draw!"
drawn_name=None
newnamelist = namelist
return drawn_name, newnamelist
然后可以按以下方式工作:
In [39]: newlist=["John", "Aaron", "Lydia", "Robin"]
In [40]: name,newlist = drawNames(newlist,"Lydia")
Drew Robin
New list: ['John', 'Aaron', 'Lydia']
In [41]: name,newlist = drawNames(newlist,"John")
Drew Aaron
New list: ['John', 'Lydia']
In [42]: name,newlist = drawNames(newlist,"Aaron")
Drew John
New list: ['Lydia']
In [43]: name,newlist = drawNames(newlist,"Robin")
Drew Lydia
New list: []
標簽:python-3-x,list,scripting,python
來源: https://codeday.me/bug/20191122/2059453.html
總結
以上是生活随笔為你收集整理的python如果选择不在列表里_Python-list.remove(x)x不在列表中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 订单生产计划表范本_工厂生产管理为什么需
- 下一篇: mysql递归查询所有上下节点_非递归打