为了账号安全,请及时绑定邮箱和手机立即绑定

python 冒泡排序失败

python 冒泡排序失败

白板的微信 2023-01-04 10:11:23
    我已经编写了这段代码,我希望它能够组织玩家得分。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: Daniel36: Gabriel30: Perry92: Avi28: Yehuda46: Jeremy54: Mordechai96: Paul80: Pauline72: 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?我该怎么做才能对列表中的分数进行排序?
查看完整描述

4 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

简短的使用方法:)


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  


查看完整回答
反对 回复 2023-01-04
?
MYYA

TA贡献1868条经验 获得超4个赞

发生这种情况是因为您正在比较诸如此类的项目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']



查看完整回答
反对 回复 2023-01-04
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

import re

string1 = lines[0]

int(re.search(r'\d+', string1).group())

而不是 arr = int(float(lines[0])),尝试使用上面的那个。String1 包含整数值。在那上面应用冒泡排序。


查看完整回答
反对 回复 2023-01-04
?
LEATH

TA贡献1936条经验 获得超6个赞

这很明显,Python 会告诉您问题出在哪里:您正在明确尝试将lines[0]包含字符的整个第一行 ( ) 转换为数字。

仅提取第一行arr和这一行的后续排序是没有用的。而且,转换为float然后转换int为绝对没有必要。

如果所有数字的长度都相同(2 个字符),您可以通过简单地忽略转换来简单地将行排序为字符串(而不是数字)。您可以简单地将错误行更改为

arr = lines

让你的程序工作。(当然,或者将以下所有arr引用重命名lines为 。)

我还会删除程序的前 3 行,它们目前与程序的其余部分无关。

在线查看结果。


查看完整回答
反对 回复 2023-01-04
  • 4 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信