@ Sparrow:
Was sollen wir denn mit dem rauskopierten Inhalt einer Binärdatei?
Die Lieder irgendwo runterladen und anhören. Sind alle must-have's. NEIN SCHERZ, sorry.
Was denkst du denn, was die letzte Zeile in main() macht? Und wie die sich auf den Programmfluss auswirkt?
Sehr gute Frage, danke. nun, so wie ich das sehe, ist diese Zeile (return auswahl) völlig sinnfrei und nutzlos, danke nochmals. Das bringt mich einen Schritt weiter !
Und ich denke einmal - ich habe als Anfänger nicht diesen Weitblick - dass main() am Ende nie (!) etwas returnen sollte.
Und da "while True" in "def main()" direkt vor der input()-Anweisung steht, geht's dort auch wieder weiter.
Und wenn ich jetzt noch das *while True:* in "def main() " an den Anfang setze, dann kommt natürlich auch wieder das Benutzermenue nach der "Abarbeitung" - bitte hängt euch nicht an meinen (falschen) Begrifflichkeiten auf, einfach korrigieren, dann weiß ich Bescheid - zum Vorschein.
Hier wieder der aktuelle Code:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Verwalten einer Chartliste
=> Unterverzeichnis 'data' anlegen
=> Unterverzeichnis 'tmp' anlegen """
__author__ = 'Perlchamp'
__date__ = '21.02.2019'
import pickle
CHARTS_FILENAME = 'data/charts.dmp'
BACKUP_FILENAME = 'tmp/charts.dmp'
MENUE_WIDTH = 30
SPALTE_TITEL = 35
SPALTE_INTERPRET = 36
SPALTE_STIMMEN = 11
CHART_ANZEIGE = 103
MENUE_ANZEIGE = 60
CHART_VORSCHUB_01 = ' ' *3
CHART_VORSCHUB_10 = ' ' *2
CHART_VORSCHUB_100 = ' ' *1
MENUE_VORSCHUB = ' ' *6
def chartliste_laden() :
try:
with open(CHARTS_FILENAME, 'rb') as file:
charts = pickle.load(file)
except (FileNotFoundError, EOFError):
print('leere Liste !')
charts = list()
return charts
def chartliste_anzeigen(charts, auswahl):
print('-' * (CHART_ANZEIGE))
print('chartliste'.upper().center(CHART_ANZEIGE))
print('-' * (CHART_ANZEIGE))
charts.sort(reverse=True)
for platz, (voting, titel, interpret) in enumerate(charts):
zeile_tabelle = f'{platz+1}: {titel:<{SPALTE_TITEL}} von: {interpret:<{SPALTE_INTERPRET}}{voting:>{SPALTE_STIMMEN}} Stimmen'
if platz < 9:
print(f'{CHART_VORSCHUB_01}' + zeile_tabelle)
elif platz < 99:
print(f'{CHART_VORSCHUB_10}' + zeile_tabelle)
else:
print(f'{CHART_VORSCHUB_100}' + zeile_tabelle)
print('-' * (CHART_ANZEIGE) + '\n\n')
def main():
while True:
print('-' * (MENUE_ANZEIGE))
print('MENUE'.center(MENUE_ANZEIGE))
print('-' * (MENUE_ANZEIGE))
print(f'{MENUE_VORSCHUB}(A)nzeige der kompletten Chartliste')
print(f'{MENUE_VORSCHUB}(E)nde des Chart-Managers')
print('-' * (MENUE_ANZEIGE) + '\n')
charts = chartliste_laden()
auswahl = input('Treffen Sie eine Auswahl : ').lower()
if auswahl == 'e':
print('Danke, dass Sie den Chart-Manager benutzt haben.')
break
elif auswahl == 'a':
chartliste_anzeigen(charts, auswahl)
else :
print('falsche Auswahl !')
if __name__ == '__main__' :
main()
Und dazu meine nächste Frage:
chartliste_anzeigen(charts, auswahl): ist ja eine Prozedur (kein return), die demzufolge None zurückgibt, da kein *return* vorhanden ist. Warum "blendet" sich das Benutzermenu ein, obwohl die erste Zeile von main() jetzt eine "while True:"-Schleife hat?
Bei None sollte doch *while True* nicht reagieren, oder sehe ich das falsch (reagiert while True nur z.b. auf einen leeren String [beispielsweise auf ENTER-Taste ohne Eingabe], auf die Auswertung eines Ausdrucks, der FALSE ergibt oder Vergleichbares? Gehört None demnach nicht darunter ?