Erstellen einer Bestenliste für Offline-Spiele in Python

Für ein Schulprojekt erstelle ich ein Spiel mit einem Punktesystem und möchte eine Art Bestenliste erstellen. Sobald dies abgeschlossen ist, laden die Lehrer es auf einen gemeinsam genutzten Server hoch, auf den andere Schüler eine Kopie des Spiels herunterladen können. Leider können die Schüler nicht auf diesem Server speichern. Wenn wir könnten, wären Bestenlisten ein Kinderspiel. Es wären höchstens ein paar Hundert Punkte zu notieren, und alle Computer haben Zugang zum Internet.

Ich weiß nicht viel über Server oder Hosting, und ich kenne kein Java, HTML oder eine andere Sprache, die üblicherweise in der Webentwicklung verwendet wird. Daher helfen andere verwandte Fragen nicht wirklich. Mein Spiel druckt die Scoring-Informationen in eine Textdatei und von dort aus weiß ich nicht, wie ich sie irgendwo online abrufen kann, auf die jeder zugreifen kann.

Gibt es eine Möglichkeit, eine solche Aufgabe nur mit Python zu erledigen?

Hier habe ich den Code zum Aktualisieren einer Bestenlistendatei (vorausgesetzt, es handelt sich nur um eine Textdatei), sobald ich die Ergebnisse habe. Dies würde voraussetzen, dass ich eine Kopie der Bestenliste und der Score-Datei an derselben Stelle hatte.

Dies ist das Format meiner Mock-Bestenliste (Leaderboards.txt):

Leaderboards

1) JOE  10001
2) ANA  10000
3) JAK  8400
4) AAA  4000
5) ABC  3999

Dies ist, was die Protokolldatei drucken würde - die Initialen und Punktzahl (log.txt):

ABC
3999

Code (funktioniert für Python 2.7 und 3.3):

def extract_log_info(log_file = "log.txt"):
    with open(log_file, 'r') as log_info:
        new_name, new_score = [i.strip('\n') for i in log_info.readlines()[:2]]

    new_score = int(new_score)
    return new_name, new_score

def update_leaderboards(new_name, new_score, lb_file = "Leaderboards.txt"):
    cur_index = None
    with open(lb_file, 'r') as lb_info:
        lb_lines = lb_info.readlines()
        lb_lines_cp = list(lb_lines) # Make a copy for iterating over
        for line in lb_lines_cp:
            if 'Leaderboards' in line or line == '\n':
                continue

            # Now we're at the numbers
            position, name, score = [ i for i in line.split() ]

            if new_score > int(score):
                cur_index = lb_lines.index(line)
                cur_place = int(position.strip(')'))
                break

        # If you have reached the bottom of the leaderboard, and there
        # are no scores lower than yours
        if cur_index is None:
            # last_place essentially gets the number of entries thus far
            last_place = int(lb_lines[-1].split()[0].strip(')'))
            entry = "{}) {}\t{}\n".format((last_place+1), new_name, new_score)
            lb_lines.append(entry)
        else: # You've found a score you've beaten
            entry = "{}) {}\t{}\n".format(cur_place, new_name, new_score)
            lb_lines.insert(cur_index, entry)

            lb_lines_cp = list(lb_lines) # Make a copy for iterating over
            for line in lb_lines_cp[cur_index+1:]:
                position, entry_info = line.split(')', 1)
                new_entry_info = str(int(position)+1) + ')' + entry_info
                lb_lines[lb_lines.index(line)] = new_entry_info

    with open(lb_file, 'w') as lb_file_o:
        lb_file_o.writelines(lb_lines)


if __name__ == '__main__':
    name, score = extract_log_info()
    update_leaderboards(name, score)

Einige weitere Informationen:

Die Punktzahl wäre weniger als 1 000 000Idealerweise wäre die Lösung nur ein Code außerhalb des Spiels, sodass ich nur eine ausführbare Datei erstellen würde, die der Benutzer ausführen würde, nachdem er @ beendet haIch weiß, dass es nicht sehr sicher klingt - und das ist es auch nicht - aber das ist in Ordnung, es muss nicht hacksicher sein

Antworten auf die Frage(2)

Ihre Antwort auf die Frage