Python 插入排序给出相同的数组
嗨,我正在创建一个小小的乐透程序,该程序需要使用插入排序对字典的前6个数字进行排序,使用选择排序对最后2个数字进行排序。我已经完成了代码并编写了代码,但它给出了以下结果集,最后一个列表不断重复,而不是将其排序并打印。我可以知道为什么以及如何修复它吗Python 插入排序给出相同的数组,python,insertion-sort,insertion,Python,Insertion Sort,Insertion,嗨,我正在创建一个小小的乐透程序,该程序需要使用插入排序对字典的前6个数字进行排序,使用选择排序对最后2个数字进行排序。我已经完成了代码并编写了代码,但它给出了以下结果集,最后一个列表不断重复,而不是将其排序并打印。我可以知道为什么以及如何修复它吗 Player 1 has numbers [17, 21, 0, 3, 25, 22, 4, 10] Player 2 has numbers [13, 22, 11, 20, 24, 28, 20, 7] Player 3 has numbers
Player 1 has numbers [17, 21, 0, 3, 25, 22, 4, 10]
Player 2 has numbers [13, 22, 11, 20, 24, 28, 20, 7]
Player 3 has numbers [8, 11, 16, 22, 14, 9, 11, 1]
Player 4 has numbers [8, 23, 28, 30, 6, 19, 12, 24]
Player 5 has numbers [22, 10, 2, 13, 4, 7, 15, 27]
Player 6 has numbers [5, 20, 10, 11, 5, 2, 27, 13]
Player 7 has numbers [25, 9, 22, 5, 14, 8, 25, 20]
Player 8 has numbers [16, 19, 25, 6, 17, 18, 13, 13]
Player 9 has numbers [8, 18, 16, 8, 1, 14, 4, 8]
Sorted array is:
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
the 8 winning numbers are
[9, 12, 5, 17, 14, 17] [16, 4]
似乎您的大部分问题都是排序函数。我调整了一些其他问题,最终得出以下结论:
import random
def random_generator():
randomNumber = random.randint(0, 30)
return randomNumber
def winningNumbers():
winningPwn = []
winningSwn = []
for currentPwn in range(6):
randomPWN = random_generator()
winningPwn.append(randomPWN)
for currentSwn in range(2):
randomSwn = random_generator()
winningSwn.append(randomSwn)
return winningPwn, winningSwn
def printWinningNumber(lotteryNumbers):
for currentLotteryIndex in range(len(lotteryNumbers)):
print(lotteryNumbers[currentLotteryIndex], end=" ")
def draw():
winning = winningNumbers()
print("the 8 winning numbers are")
printWinningNumber(winning)
def generatePlayers():
players = {}
for player_id in range(1, 10):
player_list = []
for i in range(8):
player_list.append(random_generator())
players[player_id] = player_list
for player_id in players:
print("Player {} has numbers {}".format(player_id, players[player_id]))
insertionsort(players[player_id])
print(" Sorted array is {}".format(players[player_id]))
return players
def insertionsort(players):
for i in range(1, len(players)):
value = players[i]
while i > 0:
if value >= players[i-1]:
break
players[i] = players[i-1]
i -= 1
players[i] = value
generatePlayers()
draw()
这就产生了:
Player 1 has numbers [21, 26, 9, 14, 7, 11, 24, 19]
Sorted array is [7, 9, 11, 14, 19, 21, 24, 26]
Player 2 has numbers [22, 10, 28, 23, 2, 25, 14, 21]
Sorted array is [2, 10, 14, 21, 22, 23, 25, 28]
Player 3 has numbers [18, 4, 5, 17, 24, 7, 16, 28]
Sorted array is [4, 5, 7, 16, 17, 18, 24, 28]
Player 4 has numbers [4, 8, 13, 5, 16, 7, 14, 23]
Sorted array is [4, 5, 7, 8, 13, 14, 16, 23]
Player 5 has numbers [19, 17, 26, 19, 24, 29, 24, 2]
Sorted array is [2, 17, 19, 19, 24, 24, 26, 29]
Player 6 has numbers [29, 7, 9, 18, 1, 7, 16, 21]
Sorted array is [1, 7, 7, 9, 16, 18, 21, 29]
Player 7 has numbers [26, 12, 19, 5, 30, 19, 6, 21]
Sorted array is [5, 6, 12, 19, 19, 21, 26, 30]
Player 8 has numbers [2, 9, 3, 0, 7, 7, 17, 10]
Sorted array is [0, 2, 3, 7, 7, 9, 10, 17]
Player 9 has numbers [29, 28, 25, 24, 1, 23, 6, 27]
Sorted array is [1, 6, 23, 24, 25, 27, 28, 29]
the 8 winning numbers are
[10, 23, 1, 30, 21, 9] [19, 1]
我注意到的一件事是,这些数字可以而且确实以单一的顺序重复。彩票号码不是这样的,对吧
祝您顺利完成您的程序。提示:请仔细检查您的打印代码:对于玩家中的i[player\u id]:打印玩家[player\u id]您的insertionsort永远不会做任何事情。它将立即中断while循环,因为您设置了value=players[i],然后执行,实际上,如果value>=players[i]:break,则执行该操作。您进行过任何调试吗?请看。
Player 1 has numbers [21, 26, 9, 14, 7, 11, 24, 19]
Sorted array is [7, 9, 11, 14, 19, 21, 24, 26]
Player 2 has numbers [22, 10, 28, 23, 2, 25, 14, 21]
Sorted array is [2, 10, 14, 21, 22, 23, 25, 28]
Player 3 has numbers [18, 4, 5, 17, 24, 7, 16, 28]
Sorted array is [4, 5, 7, 16, 17, 18, 24, 28]
Player 4 has numbers [4, 8, 13, 5, 16, 7, 14, 23]
Sorted array is [4, 5, 7, 8, 13, 14, 16, 23]
Player 5 has numbers [19, 17, 26, 19, 24, 29, 24, 2]
Sorted array is [2, 17, 19, 19, 24, 24, 26, 29]
Player 6 has numbers [29, 7, 9, 18, 1, 7, 16, 21]
Sorted array is [1, 7, 7, 9, 16, 18, 21, 29]
Player 7 has numbers [26, 12, 19, 5, 30, 19, 6, 21]
Sorted array is [5, 6, 12, 19, 19, 21, 26, 30]
Player 8 has numbers [2, 9, 3, 0, 7, 7, 17, 10]
Sorted array is [0, 2, 3, 7, 7, 9, 10, 17]
Player 9 has numbers [29, 28, 25, 24, 1, 23, 6, 27]
Sorted array is [1, 6, 23, 24, 25, 27, 28, 29]
the 8 winning numbers are
[10, 23, 1, 30, 21, 9] [19, 1]