Files and Exceptions

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fakhro
User
Beiträge: 21
Registriert: Mittwoch 13. März 2019, 13:44

Hi undzwar brauch dringend eure hilfe

Code: Alles auswählen

import json

def get_stored_username():
    """Get stored username if available"""
    filename = 'username.json'
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username

def get_new_username():
    """Prompt for a new username."""
    username = input("What is your name? ")
    filename = 'username.json'
    with open(filename, 'w') as f_obj:
        json.dump(username, f_obj)
    return username

def greet_user():
    """Greet the user by name."""
    username = get_stored_username()
    if username:
        print("Welcome back, " + username + "!")
    else:
        username = get_new_username()
        print("We'll remember you when you come back, " + username + "!")
        
greet_user()
Also ich gebe einen namen ein der bereits vorhanden is aber er gibt mir den selben vorgang raus "We'll remember when you come back," + username + "!" ich versteh dass nicht obwohl eig. müsste er ("Welcome back " + username ) ausgegeben ich habe auch davor versucht von def_stored_user() den code weg gelassen dann gibt er mir erst ("welcome back " + username) aus
aber dies tut er dann permanent ohne eine neue namens eingabsforderung.
ich hoffe ihr könnt mir helfen
danke im voraus :)
fakhro
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dein Code kopiert & ausgefuehrt funktioniert fuer mich.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Json nur zum Speichern eines Strings zu benutzen, ist etwas seltsam.
Dass filename an mehreren Stellen definiert wird, ist schlecht, wenn Du es ändern willst. Besser als Konstante am Anfang der Datei definieren.
Strings stückelt man nicht mit + zusammen sondern benutzt Stringformatierung.
Benutzeravatar
__blackjack__
User
Beiträge: 14044
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bei JSON-Dateien muss man beim öffnen explizit die Kodierung als UTF-8 angeben, sonst kann es passieren das man keine gültige JSON-Datei erzeugt, beziehungsweise das man beim lesen einer gültigen JSON-Datei Müll liest oder es beim schreiben oder lesen einen UnicodeError gibt.

`f_obj` ist ein schlechter Name. Alles in Python was man an einen Namen binden kann ist ein Objekt, der `_obj`-Suffix ist also sinnfrei. Und `f` ist kein guter Name weil einbuchstabige Namen nur sehr selten dem Leser adäquat vermitteln was der Wert für eine Bedeutung hat. `file` wäre hier ein guter Name.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Fakhro
User
Beiträge: 21
Registriert: Mittwoch 13. März 2019, 13:44

Im ernst ? bei dir hat es geklappt ? wen du einen namen eingibst dann gibt er doch "We'll remember when you come back " und wen du nocheinmal den namen eingibst gibt er dir dann genau dass selbe aus
du musst bei der funktion get_stored_username den code weg lassen aber die funktion sollte bleiben und probier es dann mal aus
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nochmal: den Code wie oben genommen. Ausgeführt. Beim ersten Mal einen Namen eingegeben. Beim zweiten Mal „Welcome back Hanswurst“ bekommen. Kann es sein, das du das in einer IDE ausführst? Und die zb immer ein bereinigtes oder temporäreres Verzeichnis zur Verfügung stellt?
Fakhro
User
Beiträge: 21
Registriert: Mittwoch 13. März 2019, 13:44

__deets__ hat geschrieben: Donnerstag 9. Mai 2019, 19:15 Nochmal: den Code wie oben genommen. Ausgeführt. Beim ersten Mal einen Namen eingegeben. Beim zweiten Mal „Welcome back Hanswurst“ bekommen. Kann es sein, das du das in einer IDE ausführst? Und die zb immer ein bereinigtes oder temporäreres Verzeichnis zur Verfügung stellt?
Ich führe den code in einer IDE aus wieso ?
Ja aber wen du dann nochmal den code ausführst gibt er dir dann dauernt "Welcome back, + username" obwohl er dies nicht machen sollte
weil ich habe ja eine extra funktion für neue Useres erstellt.
Fakhro
User
Beiträge: 21
Registriert: Mittwoch 13. März 2019, 13:44

Sowie es auf englich da steht und sowie ich dies verstanden habe
Each function in this final version of remember_me.pyhas a single, clear
purpose. We call greet_user(), and that function prints an appropriate message: it either welcomes back an existing user or greets a new user. It does
this by calling get_stored_username(), which is responsible only for retrieving
a stored username if one exists. Finally, greet_user()calls get_new_username()
if necessary, which is responsible only for getting a new username and storing it. This compartmentalization of work is an essential part of writing
clear code that will be easy to maintain and extend.
Aber mein code führt nicht dass aus was ich hier mit dem text bezwecken möchte.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Aufgabe beschreibt, das du beim ersten Aufruf nach dem Namen fragst. Und danach immer der angegebene Name verwandt wird. Das passiert bei mir. Meines Erachtens tut das Programm was es soll. Was sonst soll es tun? Jedes mal nach dem Namen fragen? Dann brauchst du kein Dateihandling. Wozu ist das deiner Meinung sonst alles gut? Beschreib in deutsch was du aus der Aufgabe machst.
Antworten