2015-06-24 163 views
0

每当我运行程序时,它要么错误移动一个字符串从一个列表到另一个

Traceback (most recent call last): 
    File "C:\Users\mrosales\Downloads\Rock Paper Sissor Tornament.py", line 46, in <module> 
    Temp = ClassList[Random2] 
IndexError: list index out of range 

Traceback (most recent call last): 
    File "C:\Users\mrosales\Downloads\Rock Paper Sissor Tornament.py", line 60, in <module> 
    Temp = ClassList[Random2] 
IndexError: list index out of range 

我的代码是关于从一个列表移动串到另一个形成tornamnet的一套游戏大作

import random 
import time 
Temp = (" ") 
ClassList = ['Noah','Simone','Ji Ho','Thanh','Nathanial','Soo','Mickel','Tuan'] 
Match1 = [], Match2 = [], Match3 = [] ,Match4 = [] 
Random1 = random.randrange(0,len(ClassList)) 
Random2 = random.randrange(0,len(ClassList)) 
while Random1 == Random2: 
    Random1 = random.randrange(0,len(ClassList)) 

time.sleep(1) 
Temp = ClassList[Random1] 
Match1.append(Temp) 
del ClassList[Random1] 
Temp = ClassList[Random2] 
del ClassList[Random2] 
Match1.append(Temp) 

print(Match1) 
Random1 = random.randrange(0,len(ClassList)) 
Random2 = random.randrange(0,len(ClassList)) 
while Random1 == Random2: 
    Random1 = random.randrange(0,len(ClassList)) 

time.sleep(1) 
Temp = ClassList[Random1] 
Match2.append(Temp) 
del ClassList[Random1] 
Temp = ClassList[Random2] 
del ClassList[Random2] 
Match2.append(Temp) 

print(Match2) 
Random1 = random.randrange(0,len(ClassList)) 
Random2 = random.randrange(0,len(ClassList)) 
while Random1 == Random2: 
    Random1 = random.randrange(0,len(ClassList)) 

time.sleep(1) 
Temp = ClassList[Random1] 
Match3.append(Temp) 
del ClassList[Random1] 
Temp = ClassList[Random2] 
del ClassList[Random2] 
Match3.append(Temp) 

print(Match3) 
Random1 = random.randrange(0,len(ClassList)) 
Random2 = random.randrange(0,len(ClassList)) 
while Random1 == Random2: 
    Random1 = random.randrange(0,len(ClassList)) 

time.sleep(1) 
Temp = ClassList[Random1] 
Match4.append(Temp) 
del ClassList[Random1] 
Temp = ClassList[Random2] 
del ClassList[Random2] 
Match4.append(Temp) 

print(Match4) 
Random1 = random.randrange(0,len(ClassList)) 
Random2 = random.randrange(0,len(ClassList)) 
while Random1 == Random2: 
    Random1 = random.randrange(0,len(ClassList)) 

print ("The current match ups are...") 
print (Temp) 
time.sleep(1) 
print (Match1, Match2, Match3, Match4) 

任何人能发现我可能已经放置,如果他们愿意的话,纠正错误?

+1

发布完整的追溯?哪一行导致错误? – ZdaR

+0

你有没有试过把一些突破点和步进?你可能会找到问题所在。 –

+0

@ZdaR它的一种长码,如果我编辑我的文章并输入完整的代码,它会填充多于屏幕页面...你确定吗?我不介意只要你确认 –

回答

4

从我所收集你的代码是试图做的,我相信下面的代码将实现它。它比较短,但是基本上可以做到没有崩溃的情况。

import random 

ClassList = ['Noah', 'Simone', 'Ji Ho', 'Thanh', 'Nathanial', 'Soo', 'Mickel', 'Tuan'] 

# Randomise list order 
random.shuffle(ClassList) 

# Remove last 2 elements from list and add to new match lists 
Match1 = [ClassList.pop(), ClassList.pop()] 
Match2 = [ClassList.pop(), ClassList.pop()] 
Match3 = [ClassList.pop(), ClassList.pop()] 
Match4 = [ClassList.pop(), ClassList.pop()] 

print(Match1, Match2, Match3, Match4) 

请注意,如果您多次运行此操作,您将看到它确实会给出不同的“匹配装置”。

+0

'Match1,Match2,Match3,Match4 = zip(ClassList [:: 2] ,ClassList [1 :: 2])' – TessellatingHeckler

+0

是的,这是非常pythonic,我只是去更长,更简单的方式。 –

-1

解决方案1:
del ClassList[Random1]后第二Temp分配。

解决方案2:
Random2 = random.randrange(0,len(ClassList)-1)将解决您的问题,然后您不需要Random1 != Random2您的情况。

更重要的是:
应该清理一下你的代码...

temp = classList.pop(random1) 

相当于

temp = classList[random1] 
del classList[random1] 

使用照顾重复代码的功能:

def get_random(): 
    random_index = random.randrange(0,len(classList)) 
    return classList.pop(random_index) 

match1 = [get_ramdom(), get_random()] 

不要根据01不要使用大写变量名

+0

这不能解决问题。这个问题是由于'del'关键字引起的,它改变了列表长度。反过来,允许一旦有效的指数头寸失效。 –

+0

@RedShift使'len(ClassList)-1'可以修复随机匹配**新列表长度** – LittleQ

0

,你通过它迭代要修改你的类列表。当它抛出错误时,你的班级中没有人会选择len(ClassList)0。

如果我明白你正在尝试做的,你可以只创建另一个列表,并为您遍历原来的列表来跟踪谁一直匹配的追加名字给它。或甚至更好地使用random.shuffle

import random 
import time 
classlist = ['Noah','Simone','Ji Ho','Thanh','Nathanial','Soo','Mickel','Tuan'] 
from random import shuffle 

def get_random(classlist): 
    shuffle(classlist) 
    while classlist: 
    yield classlist.pop() 

matches = [] 
match = [] 

for player in get_random(classlist): 
    if len(match) <= 1: 
     #print "Adding %s" %player 
     match.append(player) 
     if len(match) == 2: 
      matches.append(match) 
      #print "Match %s is full" %len(matches) 
      match = [] 

for x in range(0,len(matches)): 
    print "Match %s: %s" %(x,matches[x]) 
相关问题