问题描述
在我的彩票游戏中,我需要创建1000名玩家,每个玩家都有一个号码集,需要将其与获胜号码集进行比较。所有数字集均来自0-30个数字的桶。我已经完成了这一部分,但是现在我需要将玩家编号分为两个组,称为PWN和SWN。 PWN是前6个数字,SWN是后两个数字。我需要使用插入排序对PWN进行排序,并使用选择排序对SWN进行排序。我仍然没有参加SWN部分,因为我仍然想找出PWN排序。
for example my program create something like below
Winning number
19,27,23,18,1,3,2,24
Player ID | Player Numbers
1 | 8,14,4,10,21,22
2 | 13,22,9,11,29,16,27
3 | 10,25,26,8,5,18
but I need to sort them like
Winning number
PWN | SWN
19,3 | 2,24
Player ID | Player Numbers PWN | Player Numbers SWN
1 | 8,21 | 2,29 | 16,5 | 23,18
import random
#main code to generate data in the program starts here
def generaterandomNumber():
randomNumber = random.randint(0,30) #can return numbers between 0 and 30 including 0 and 30
return randomNumber#return Random numbers
def drawWinningLotteryNumber():#this function generates the winning numbers
lotteryDrawNumbers = []#list containner for the generated lottery numbers
for currentLotteryNumber in range(8):#for loop to keep generating for 8 counts
randomNumber = generaterandomNumber()# call funtion to generate random numbers
lotteryDrawNumbers.append(randomNumber)# add to the back of the list
return lotteryDrawNumbers#return the list
def printWinningLotteryNumber(lotteryDrawNumbers):#ths function prints the winning numbers
for currentLotteryNumberIndex in range (len(lotteryDrawNumbers)):#for loop to run the print funtion for the length of the list
print(lotteryDrawNumbers[currentLotteryNumberIndex],end = " ")#prints the numbers
def draw():# this funtion brings to gether the draw funtion and prints it
lotteryNumbers = drawWinningLotteryNumber()#call function to draw winning numbers
print ("The 8 lottery number for today are :")
printWinningLotteryNumber(lotteryNumbers)#call funtion to print the generated numbers
def generateID():#this function creates the lotto players and their numbers
players = {}
for player_id in range(1,1001):
player_list = []
for i in range(8):
player_list.append(generaterandomNumber())
players[player_id] = player_list
for player_id in players:
print("Player {} has numbers {}".format(player_id,players[player_id]))
pwnSort(players)
#data generating code ends here
def pwnSort(players):
for i in range(1,len(players)):
key = players[i]
j = i-1
while j >=0 and key < players[j] :
players[j+1] = players[j]
j -= 1
players[j+1] = key
generateID()
draw()
当我运行此代码时,它会创建数据并卡住,并在pwnSort()给出以下内容
Player 984 has numbers [14,9]
Player 985 has numbers [28,15,19,30,2]
Player 986 has numbers [6,13,2]
Player 987 has numbers [29,28,20]
Player 988 has numbers [6,20,15]
Player 989 has numbers [29,17,8]
Player 990 has numbers [12,23]
Player 991 has numbers [18,12,6,24]
Player 992 has numbers [4,24,3]
Player 993 has numbers [24,6]
Player 994 has numbers [19,7,6]
Player 995 has numbers [1,2]
Player 996 has numbers [26,20]
Player 997 has numbers [19,8]
Player 998 has numbers [19,21]
Player 999 has numbers [15,30]
Player 1000 has numbers [8,16]
Traceback (most recent call last):
File "E:/User Profile/Documents/ACBT/Data Sturctures/assignment.py",line 83,in <module>
generateID()
File "E:/User Profile/Documents/ACBT/Data Sturctures/assignment.py",line 37,in generateID
pwnSort(players)
File "E:/User Profile/Documents/ACBT/Data Sturctures/assignment.py",line 49,in pwnSort
while j >=0 and key < players[j] :
KeyError: 0
我能知道为什么以及如何解决这个问题
解决方法
在while
方法内的pwnSort
循环的条件中有错误。
循环的条件是j >= 0 and key < players[j]
,但是您声明的是j = i-1
,因此在第一次迭代时,j
的值将是0
。错误players
指出,在0
词典中没有名为KeyError: 0
的键。
要解决此问题,只需将条件更改为:j > 0 and key < players[j]
最终功能将如下所示:
def pwnSort(players):
for i in range(1,len(players)):
key = players[i]
j = i-1
while j > 0 and key < players[j]:
players[j+1] = players[j]
j -= 1
players[j+1] = key