簡體   English   中英

python 冒泡排序失敗

[英]Failing with a python bubble sort

我已經編寫了這段代碼,我希望它來組織玩家得分。

file = open("leaderboard.txt", "a")
file.write(str(winnerscore)+ ": " + winner + "\n")
file.close()
fileReading = open("leaderboard.txt","r")
lines = fileReading.read()
fileReading.close()
lines = lines.split("\n")
for line in lines:
    print(line)

def bubbleSort(arr):
    n = len(arr) 

    for i in range(n-1): 

        for j in range(0, n-i-1): 


            if arr[j] > arr[j+1] : 
                arr[j], arr[j+1] = arr[j+1], arr[j] 

# Driver code to test above 
arr = int(float(lines[0]))

bubbleSort(arr) 

print ("Sorted array is:") 
for i in range(len(arr)): 
    print ("%s" %arr[i])

它產生這個但不對其進行排序:

76: Daniel
36: Gabriel
30: Perry
92: Avi
28: Yehuda
46: Jeremy
54: Mordechai
96: Paul
80: Pauline
72: Fran

不幸的是,它出現了以下錯誤消息:

  arr = int(float(lines[0]))
ValueError: could not convert string to float: '76: Daniel'
How do I fix this so it sorts from highest score to lowest score?

如何使它對列表中的分數進行排序?

發生這種情況是因為您正在比較諸如if 76: Daniel>36: Gabriel您可以嘗試這樣的項目

mylist=['76: Daniel','36: Gabriel','30: Perry','92: Avi','28: Yehuda','46: Jeremy','54: Mordechai','96: Paul','80: Pauline','72: Fran']

def bubbleSort(arr):
    n=len(arr)
    for i in range(n-1): 

        for j in range(0, n-i-1): 


            if int(arr[j][:2]) < int(arr[j+1][:2]) : 
                arr[j], arr[j+1] = arr[j+1], arr[j] 
bubbleSort(mylist)
print(mylist)
>>>['96: Paul', '92: Avi', '80: Pauline', '76: Daniel', '72: Fran', '54: Mordechai', '46: Jeremy', '36: Gabriel', '30: Perry', '28: Yehuda']

這很明顯,Python 告訴您問題出在哪里:您明確嘗試將包含字符的整個第一行( lines[0] )轉換為數字。

僅將第一行提取到arr並且正在進行的這一行將是無用的。 此外,絕對不需要先轉換為float再轉換為int

如果所有數字都一樣長(2 個字符),您可以簡單地將行排序為字符串(而不是數字),只需忽略轉換即可。 您可以簡單地將錯誤的行更改為

arr = lines

使您的程序正常工作。 (當然,或者將以下所有arr引用重命名為lines 。)

我還將刪除您程序的前 3 行,它們目前與您的程序的 rest 無關。

在線查看結果。

import re
string1 = lines[0]
int(re.search(r'\d+', string1).group())

而不是 arr = int(float(lines[0])),嘗試使用上面的那個。 String1 包含 integer 值。 在那上面應用冒泡排序。

簡短的使用方法:)

import pandas as pd

df = pd.read_table('leaderboard.txt', delimiter=":", names=('scor', 'Name'))
df.sort_values(by='scor', inplace=True)
df.head()

    scor        Name
7    96        Paul
3    92         Avi
8    80     Pauline
0    76      Daniel
9    72        Fran
6    54   Mordechai
5    46      Jeremy
1    36     Gabriel
2    30       Perry
4    28      Yehuda

arr = df.values  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM