2016-11-22 1 views
0

Ich versuche, meine eigene Nahrungsmittelauswahl in Python zu programmieren, wo Leute wählen können, wenn sie eine Tortilla in ihrer Verpackung zum Beispiel wollen, und das Programm wird die Kosten ausarbeiten.Wie man eine Textdatei mit Benutzereingaben umbenennt

Eine der Extras, die ich versuche, ist, dass, wenn der Kunde nicht sofort auschecken möchte, sie ihre Bestellung in eine Textdatei speichern können. Das alles funktioniert perfekt, aber wie benenne ich diese Textdatei in die user_name, so dass nur ihre Auswahl angezeigt werden und so weiß ich, wer diese Entscheidungen getroffen hat?

if order_save =="1": 

     f = open ("user_name.txt","w") 
    f.close()  
    if Tortilla_option == "yes": 
     f = open ("user_name.txt","a") 
     f.write("Tortilla") 
     f.close() 

    if Chicken_option == "yes": 
     f = open ("user_name.txt","a") 
     f.write("\nChicken") 
     f.close() 

    if Salad_option == "yes": 
     f = open ("user_name.txt","a") 
     f.write("\nSalad") 
     f.close() 

    if Chilli_option == "yes": 
     f = open ("user_name.txt","a") 
     f.write("\nChilli Sauce") 
     f.close() 

print ("Here is your takeway that will be saved",user_name,"!\n") 
f = open ("user_name.txt","r") 
print(f.read()) 
f.close() 
+0

Wenn ich die Option für eine Servicegebühr gebe, werden die Servicegebühr und die Kosten für die Mitnahme addiert Wie kommt 2.50 + 2.31 £ 4.8100000000000005? –

+0

Weil viele (meist?) Dezimalzahlen nicht genau als Floats dargestellt werden können. Sie sollten Floats nicht für Geld verwenden. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/588004/is-floating-point-math-broken. –

Antwort

1

Mehrere Dinge über diesen Code. Erstens:

f = open ("user_name.txt","a") 
f.write("\nChilli Sauce") 
f.close() 

als

with open(user_name+'.txt', 'a') as f: 
    f.write('\nChilli Saurce') 

geschrieben werden, die das Schließen der Datei automatisch verwaltet. Es heißt context manager

Auch das speichert die Reihenfolge in einer Datei, deren Name davon abhängt, wer der Benutzer ist. Beachten Sie, dass user_name die Variable ist, keine Zeichenfolge.

jedoch eine bessere Strategie wäre es eine Funktion definieren:

def write_order(user, item, option_yes_or_no): 
    if option_yes_or_no=='yes': 
     with open(user+'.txt', 'a') as f: 
      f.write(item) 

und dann ersetzen Sie das Ganze mit:

for my_option in [tortilla_option, chicken_option, salad_option]: 
    write_order(user_name, item, my_option) 

, die eine Menge Code vermeidet duplizieren.

+0

DANKE. Das funktioniert großartig! –

+0

Wenn ich die Option für eine Servicegebühr gebe, werden die Servicegebühr und die Kosten für die Mitnahme zusammengerechnet Wie kommt 2.50 + 2.31 £ 4.8100000000000005? –

+0

Computer sind nicht in der Lage, Zahlen mit unendlicher Genauigkeit darzustellen, da dies unendlichen Speicher erfordern würde. In diesem Fall bedeutet dies, dass die Nummer, die der Computer speichern kann * näher * an die tatsächliche Zahl 4.81 ist, die Sie sehen. – elelias

0

den Dateinamen definieren und öffnen Sie die Datei an der Spitze des Codes:

filename = '%s.txt' % user_name 
f = open (filename, "w") 

Wenn Sie nicht über das Speichern den Dateinamen für die spätere Verwendung kümmern, können Sie auch diese in einer Zeile kombinieren:

f = open ('%s.txt' % user_name, "w") 

Dann machen Sie alle Dateien schreibt, und schließen Sie die Datei, wenn Sie fertig sind.

Das Öffnen, Schreiben und Schließen der Datei mehrmals ist verschwenderisch und fehleranfällig.

+0

Wenn ich die Option für eine Servicegebühr gebe, werden die Servicegebühr und die Kosten für den Take-away addiert Wie kommt 2.50 + 2.31 £ 4.8100000000000005? –

Verwandte Themen