2014-11-21 106 views
-1
def initDeck(n): 
    cards = [] 
    for i in range(n): 
     cards.append(i + 1) 
    return cards 

def cutDeck(deck): 
    decklength = len(deck) 
    if((decklength % 2) != 0): #odds 
     numTop = decklength//2 
     numBot = numTop + 1 
    else: #evens 
     numTop = decklength//2 
     numBot = decklength//2 

    bottomDeck = [] 
    bottomDeck = deck[:(numBot)] 

    topDeck = [] 
    topDeck = deck[(numBot):] 

    return topDeck, bottomDeck 

def shuffle(topDeck, bottomDeck): 
    newDeck = [] 
    numcards = (len(topDeck)) + (len(bottomDeck)) 
    for g in range(numcards): 
     newDeck.append(bottomDeck[g]) 
     newDeck.append(topDeck[g]) 

    return newDeck 

#--------MAIN-------- 
n = int(input("How many cards do you want to shuffle? ")) 
numshuffles = int(input("How many times would you like to shuffle the deck? ")) 

deck = initDeck(n) 

topDeck,bottomDeck = cutDeck(deck) 

print(bottomDeck, '\n', topDeck, sep="") 

while(numshuffles > 0): 
    shuffledDeck = shuffle(topDeck, bottomDeck) 
    numshuffles += -1 
    print(shuffledDeck) 

该程序需要您需要多少张卡片,您想要洗牌多少次,然后再洗牌。问题是当我尝试运行它时,它需要我的两个输入,然后输出两个错误。Python3:列表索引超出范围

Traceback (most recent call last): 
    File "C:\etc", line 51, in <module> 
    shuffledDeck = shuffle(topDeck, bottomDeck) 
    File "C:\etc", line 35, in shuffle 
    newDeck.append(bottomDeck[g]) 
IndexError: list index out of range 

我不完全确定是什么错,因为它看起来很好,对我来说很合理。任何帮助将非常感谢,因为这是在上午8点!

回答

0

numcards = (len(topDeck)) + (len(bottomDeck)) 
for g in range(numcards): 
    newDeck.append(bottomDeck[g]) 
    newDeck.append(topDeck[g]) 

要附加bottomDeck[g]topDeck[g]newDeckg范围从0len(bottomDeck) + len (topDeck)。意味着在某一点g变得大于len(topDeck)len(bottomDeck)

编辑: 你可以这样修复它。

for g in range(len(topDeck)): 
    newDeck.append(bottomDeck[g]) 
    newDeck.append(topDeck[g]) 

# if total cards are odd, one card will be left in bottomDeck 
if(len(topDeck) != len(bottomDeck)): 
    newDeck.append(bottomDeck[-1]) 

你也应该再次下调后甲板洗牌

while(numshuffles > 0): 
    shuffledDeck = shuffle(topDeck, bottomDeck) 
    numshuffles += -1 
    print(shuffledDeck) 
    topDeck,bottomDeck = cutDeck(shuffledDeck) 
+0

感谢您的回应!我该如何解决这个问题(抱歉,我的想法是间隔)?我尝试在'(len(topDeck))+(len(bottomDeck))之后加上' - 1',并且这样做不起作用,因此我试图将它添加到'range(numcards - 1)'中,工作。谢谢! – Iounno 2014-11-21 07:58:09

+0

感谢一堆为修复!现在我遇到了一个问题,每当我洗牌时,它都会输出相同的内容。问题是我的'newDeck []'在函数'shuffle()'中?当我将它移动到MAIN时,它不断扩展列表。我怎样才能解决这个问题?感谢一群帮助btw!如果可以的话,我会让你满意的。 – Iounno 2014-11-21 08:17:21

+0

因为你的'topDeck'和'bottomDeck'没有改变。您可以从'shuffledDeck'创建新的'topDeck'和'bottomDeck',但它也会在'len(topDeck)'次后重复。你也应该使用随机模块来洗牌。如果您无法注册,您可以将其标记为已接受,因为您发布的问题已解决。 – 2014-11-21 08:27:30

0
numcards = (len(topDeck)) + (len(bottomDeck)) 
    for g in range(numcards): 
     newDeck.append(bottomDeck[g]) 

你的g增加到topDeck和bottomDeck的长度之和,因此变得比len(bottomDeck)大。

+0

感谢您的答复!我该如何解决这个问题(抱歉,我的想法是间隔)?我尝试在'(len(topDeck))+(len(bottomDeck))之后加上' - 1',并且这样做不起作用,因此我试图将它添加到'range(numcards - 1)'中,工作。谢谢! – Iounno 2014-11-21 07:59:41