.sort (reverse=True) moving 10 to the bottom


.sort (reverse=True) moving 10 to the bottom



Your score is >>> 10



Do you want to take the quiz again? Y or N: n
5 : hotty



5 : 2qa3ws8ujhyi9;']



2 : zzzz



2 : y



10 : TEST



Goodbye!


template = """{score} : {name}"""
display_good = template.format(score=score,name=user_name)
highscore_a = open("highscoreFile.txt",'a') #The file that keeps the highest scores of all time
highscore_a.write(display_good)
highscore_a.write('n')
highscore_a.close()
highscore_r = open("highscoreFile.txt", "r")

read_top_5 = highscore_r.readlines()
read_top_5.sort(reverse=True)
i =[5]

repeat = (read_top_5[-5:])
for i in repeat:
print(i)





You probably want to convert those to int rather than sorting them as strings.
– o11c
Jul 3 at 2:51


int





This is expected behaviour when sorting strings.
– Klaus D.
Jul 3 at 2:52





Thanks, would I just make the score an int? Because I cant make the name an int
– Callum Clow
Jul 3 at 21:45





1 Answer
1



You can record the score and sort it as follows:


from pathlib import Path # python3.6+
record_fmt = """{score} : {name}"""
record = record_fmt.format(score=score, name=user_name)
record_path = Path("highscoreFile.txt")
with record_path.open('a') as fp:
fp.write(f'{record}n')

records = record_path.read_text().strip().split('n')
top_5 = sorted(records, key=lambda x: -int(x.strip().split(':')[0].strip()))[:5]
print('n'.join(top_5))





Unfortunately I have to understand what I am writing as it is for school
– Callum Clow
Jul 3 at 21:45






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

api-platform.com Unable to generate an IRI for the item of type

How to set up datasource with Spring for HikariCP?

Display dokan vendor name on Woocommerce single product pages