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点!
感谢您的回应!我该如何解决这个问题(抱歉,我的想法是间隔)?我尝试在'(len(topDeck))+(len(bottomDeck))之后加上' - 1',并且这样做不起作用,因此我试图将它添加到'range(numcards - 1)'中,工作。谢谢! – Iounno 2014-11-21 07:58:09
感谢一堆为修复!现在我遇到了一个问题,每当我洗牌时,它都会输出相同的内容。问题是我的'newDeck []'在函数'shuffle()'中?当我将它移动到MAIN时,它不断扩展列表。我怎样才能解决这个问题?感谢一群帮助btw!如果可以的话,我会让你满意的。 – Iounno 2014-11-21 08:17:21
因为你的'topDeck'和'bottomDeck'没有改变。您可以从'shuffledDeck'创建新的'topDeck'和'bottomDeck',但它也会在'len(topDeck)'次后重复。你也应该使用随机模块来洗牌。如果您无法注册,您可以将其标记为已接受,因为您发布的问题已解决。 – 2014-11-21 08:27:30