繁体   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