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