Code wie in Funktion(en) packen???

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
NewToPython
User
Beiträge: 8
Registriert: Sonntag 14. Januar 2018, 14:47

Hallo zusammen,

ich noch ein mal. Herzlichen Dank an alle, die mir bis her immer helfen konnten. Ich habe sowohl im Forum als auch in Google gesucht, lese zudem auch das Buch "Automate the boring stuff with python", jedoch habe ich nichts spezifisches zu meiner Frage gefunden bzw. von dem was ich gefunden habe, konnte ich bei dem folgenden Beispiel nicht anwenden.

Ich versuche die Einkaufsliste, die ich programmiert habe, irgendwie in eine oder in mehreren Funktionen zu packen, komme aber einfach nicht drauf, wie. Für eure Hilfe bin ich Euch schon mal dankbar.
PS: Der Code funktioniert (soweit) einwandfrei, wie ich es wollte.

LG
NewToPython

Code: Alles auswählen

shoppingList = {"Apfel": 10, "Bananen": 20}
itemSold = {}
quit = 0
"""Kurze Info für den Käufer und Wahlmöglichkeit"""
while quit != "":
	print("Bitte wähle eine Option aus:")
	print("1. Artikel hinzufügen\n2. Quantität erhöhen\n3. Artikel entfernen\n4. Artikel Kaufen\n5.Verlassen")
	option = int(input())
	
	
	"""Hier kommen die Bedingungen hin, die für die einzelnen Optionen gelten"""
	if option == 1:
		print("Du hast 'Artikel hinzufügen' ausgewählt.")
		item = input("Was möchtest du zur shoppingList hinzufügen: ")
		qnty = int(input("Wie viele davon? "))
		shoppingList.update({item: qnty})
		print(shoppingList)
		print()

	if option == 2:
		print("Du hast 'Quantität erhöhen' ausgewählt.")
		item = input("Was möchtest du zur shoppingList hinzufügen: ")
		qnty = int(input("Wie viele davon? "))
		shoppingList[item] += qnty
		print(shoppingList)
		print()

	elif option == 3:
		print("Du hast 'Artikel entfernen' ausgewählt.")
		item = input("Was möchtest du aus der shoppingList entfernen: ")
		qnty = int(input("Wie viele davon? "))
		shoppingList[item] -= qnty
		print()
		print(shoppingList)
		print()

	elif option == 4:
		print("Du hast 'Artikel kaufen' ausgewählt. ")
		item = input("Was soll als verkauft markiert werden: ")
		qnty = int(input("Wie viele davon?"))
		print()
		shoppingList[item] -= qnty
		itemSold.update({item: qnty})
		print("Aktuelle Shopping Liste: ", shoppingList)
		print("Verkaufte Items: ", itemSold)		
		print()

	elif option == 5:
		print("Du willst uns schon verlassen? Bitte mit Enter bestätigen:")
		quit = input()
		break

print(shoppingList)
print(itemSold)
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@NewToPython: was willst Du für Funktionen haben?

Der Code hat einige logische Fehler. ›quit‹ ist einmal eine Zahl, wird dann aber mit einem leeren String verglichen. An anderer Stelle wird dem selben Namen ein String zugewiesen, dann aber gar nicht mehr verwendet, weil die Schleife mit ›break‹ verlassen wird. Weder die 0 noch der leere String haben irgendeine nachvollziehbare Bedeutung im Programm; der Leser wundert sich, was das zu bedeuten hat. Statt einer Schleifenabbruchvariable einen Dummy-Wert zuzuweisen, verwendet man eine Endlosschleife ›while True:‹ und bricht mit »break« ab.
Strings sind keine Kommentare. Kommentare werden mit ›#‹ eingeleitet. Um einen einzelnen Schlüssel einem Wörterbuch hinzuzufügen, benutzt man »a=c« und nicht »update«. Sollte der Artikel schon in shoppingList sein, wird der alte Wert einfach überschrieben. ›option == 2‹ wird nicht mit »elif« angeschlossen.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene. Variablennamen schreibt man klein_mit_unterstrich.
NewToPython
User
Beiträge: 8
Registriert: Sonntag 14. Januar 2018, 14:47

@Sirius3: Vielen lieben Dank für die schnelle Antwort und die ausführliche Antwort. Ich muss zugeben, dass einpaar wirklich dumme Fehler von mir dabei waren und das mit .update() ein sehr guter Hinweis, vielen Dank. Habe soweit alles wie von dir beschrieben korrigiert, nur die Name der Variablen habe ich so gelassen, weil im dem Buch halt das so gezeigt wird. Ich komme sonst immer durcheinander.

Jetzt aber die eigentliche Frage mit der/den Funktion(en). Mit Funktion meine ich einfach, das mit def, dass ich den Code halt einfacher wieder verwenden kann.

LG
NewToPython
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

@Sirius3:
Könntest du kurz erläutern wieso man die dict.update Funktion nicht nutzen sollte? Meinst du damit explizit nur das Hinzufügen eines Schlüssels oder auch wenn der Schlüsselwert ersetzt wird?

Deine Aussage verunsichert mich gerade etwas, sorry
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Könntest du kurz erläutern wieso man die dict.update Funktion nicht nutzen sollte?
`update` ist das gedacht, mehrere Schlüssel hinzuzufügen - steht auch so in der Doku: Link

Rein technisch funktioniert es auch wie im Code des TE gezeigt, aber extra ein Dict anlegen, um ein vorhandenes Dict zu aktualisieren ist ziemlich umständlich und damit nicht-pythonisch. Der bessere Weg ist damit der wie von Sirius3 gezeigt.

@NewToPython: so eine Liste kannst du einfacher und eleganter umsetzen, wenn du das `cmd` Modul benutzt. Das ist in der Standardinstallation von Python enthalten.

Gruß, noisefloor
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tholo: hier mal NewToPythons Programm mit den beschriebenen Veränderungen:

Code: Alles auswählen

shopping_items = {"Apfel": 10, "Bananen": 20}
cart = {}

# Kurze Info für den Käufer und Wahlmöglichkeit
while True:
    print("Bitte wähle eine Option aus:")
    print("1. Artikel hinzufügen\n"
        "2. Quantität erhöhen\n"
        "3. Artikel entfernen\n"
        "4. Artikel Kaufen\n"
        "5. Verlassen")
    option = input()

    # Hier kommen die Bedingungen hin, die für die einzelnen Optionen gelten
    if option == "1":
        print("Du hast 'Artikel hinzufügen' ausgewählt.")
        item = input("Was möchtest du zur shoppingList hinzufügen: ")
        quantity = int(input("Wie viele davon? "))
        shopping_items[item] = quantity
        print(shopping_items)
        print()

    elif option == "2":
        print("Du hast 'Quantität erhöhen' ausgewählt.")
        item = input("Was möchtest du zur shoppingList hinzufügen: ")
        quantity = int(input("Wie viele davon? "))
        shopping_items[item] += quantity
        print(shopping_items)
        print()

    elif option == "3":
        print("Du hast 'Artikel entfernen' ausgewählt.")
        item = input("Was möchtest du aus der shoppingList entfernen: ")
        quantity = int(input("Wie viele davon? "))
        shopping_items[item] -= quantity
        print()
        print(shopping_items)
        print()

    elif option == "4":
        print("Du hast 'Artikel kaufen' ausgewählt. ")
        item = input("Was soll als verkauft markiert werden: ")
        quantity = int(input("Wie viele davon?"))
        print()
        shopping_items[item] -= quantity
        cart[item] = quantity
        print("Aktuelle Shopping Liste: ", shopping_items)
        print("Verkaufte Items: ", cart)      
        print()

    elif option == "5":
        break

print(shopping_items)
print(cart)
@NewToPython: um eine Funktion schreiben zu können, muß man erst einmal ein Stück Code auswählen, das man gut wieder verwenden kann. Was hast Du schon versucht?
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Ahh okay... Dann hab ich es unbewußt richtig gemacht.
Vorsicht, Testscript. Das ist ein Modul welches ich zur Anschauung verkleinert habe
@Sirius3
Okay dann hab ich es jetzt verstanden bei einem value

Code: Alles auswählen

d[key] = value
bei mehreren

Code: Alles auswählen

dict.update([other])
test.json

Code: Alles auswählen

{
    "Testrage": {
        "GRC": {
            "trading-loss-accepted": false,
            "max-suspended-per-coin": "6",
            "buy": [
                "Bittrex",
                "Poloniex",
                "WEX"
                ]
        }
    }
}

Code: Alles auswählen

from kivy.storage.jsonstore import JsonStore

class JsonClass(object):
    def __init__(self, jsonpath):
        self.jpathhandle = JsonStore(jsonpath, indent=4, sort_keys=False)

    def read_json_keys(self):
        self.keydict = self.jpathhandle.keys()
        return self.keydict

    def read_json(self):
        mhh=  self.jpathhandle
        return mhh

enablecoinjsoninmodule = test.json
encoin = CoinEnable(enablecoinjsoninmodule)
coinname = "GRC"
strategy = "Testrage"
newcoinsett = {'trading-loss-accepted': False, 'max-suspended-per-coin': '6'} # bekommt Key + Value aus Ini Datei
starte = encoin.jpathhandle.get(strategy)
dict.update(starte[coinname],dict(newcoinsett ))
#encoin.change_json_value(strategy,starte)
# Für python Forum angepasst
Antworten