猿问

python 冒泡排序失败

    我已经编写了这段代码,我希望它能够组织玩家得分。


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?

我该怎么做才能对列表中的分数进行排序?


白板的微信
浏览 104回答 4
4回答

犯罪嫌疑人X

简短的使用方法:)import pandas as pddf = pd.read_table('leaderboard.txt', delimiter=":", names=('scor', 'Name'))df.sort_values(by='scor', inplace=True)df.head()    scor        Name7    96        Paul3    92         Avi8    80     Pauline0    76      Daniel9    72        Fran6    54   Mordechai5    46      Jeremy1    36     Gabriel2    30       Perry4    28      Yehudaarr = df.values  

MYYA

发生这种情况是因为您正在比较诸如此类的项目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):&nbsp; &nbsp; n=len(arr)&nbsp; &nbsp; for i in range(n-1):&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for j in range(0, n-i-1):&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if int(arr[j][:2]) < int(arr[j+1][:2]) :&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr[j], arr[j+1] = arr[j+1], arr[j]&nbsp;bubbleSort(mylist)print(mylist)>>>['96: Paul', '92: Avi', '80: Pauline', '76: Daniel', '72: Fran', '54: Mordechai', '46: Jeremy', '36: Gabriel', '30: Perry', '28: Yehuda']

慕侠2389804

import restring1 = lines[0]int(re.search(r'\d+', string1).group())而不是 arr = int(float(lines[0])),尝试使用上面的那个。String1 包含整数值。在那上面应用冒泡排序。

LEATH

这很明显,Python 会告诉您问题出在哪里:您正在明确尝试将lines[0]包含字符的整个第一行 ( ) 转换为数字。仅提取第一行arr和这一行的后续排序是没有用的。而且,转换为float然后转换int为绝对没有必要。如果所有数字的长度都相同(2 个字符),您可以通过简单地忽略转换来简单地将行排序为字符串(而不是数字)。您可以简单地将错误行更改为arr&nbsp;=&nbsp;lines让你的程序工作。(当然,或者将以下所有arr引用重命名lines为 。)我还会删除程序的前 3 行,它们目前与程序的其余部分无关。在线查看结果。
随时随地看视频慕课网APP

相关分类

Python
我要回答