Seite 1 von 1

Files and Exceptions

Verfasst: Donnerstag 9. Mai 2019, 13:17
von Fakhro
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

Re: Files and Exceptions

Verfasst: Donnerstag 9. Mai 2019, 13:37
von __deets__
Dein Code kopiert & ausgefuehrt funktioniert fuer mich.

Re: Files and Exceptions

Verfasst: Donnerstag 9. Mai 2019, 13:48
von Sirius3
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.

Re: Files and Exceptions

Verfasst: Donnerstag 9. Mai 2019, 13:57
von __blackjack__
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.

Re: Files and Exceptions

Verfasst: Donnerstag 9. Mai 2019, 19:11
von Fakhro
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

Re: Files and Exceptions

Verfasst: Donnerstag 9. Mai 2019, 19:15
von __deets__
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?

Re: Files and Exceptions

Verfasst: Freitag 10. Mai 2019, 08:34
von Fakhro
__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.

Re: Files and Exceptions

Verfasst: Freitag 10. Mai 2019, 08:38
von Fakhro
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.

Re: Files and Exceptions

Verfasst: Freitag 10. Mai 2019, 08:43
von __deets__
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.