[英]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.