String nach Funktionsübergabe

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
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Hi ich bräuchte Hilfe bei meinem Code. Und zwar möchte ich nach der Funktionübergabe haben das die Variable immer noch ein string ist, bekomme dies jedoch nicht hin.

Code: Alles auswählen

def main():
    """The actual game function as the core of the program."""
    while True:
        mode = playerMode()
        citys, manager, days, win = startValues(mode)
        

def playerMode():
    """Function to pick Game Mode."""
    print("Um das Programm zu beenden gebe 'quit' ein.")
    mode = input("Wenn du möchtest, dass das Spiel die Anzahl der Variablen \
selbst bestimmt dann gebe 'random' ein. \n"
                 "Wenn du die Spielwerte selbst eingben möchtest dann gebe \
'modified' ein.")
    if mode.lower() == 'random' or mode.lower() == 'modified':
        return mode.lower()
    elif mode.lower().startswith('q'):
        quit()
    else:
        return playerMode()
    


def startValues(mode):
    while True:
        print("Sie können jederzeit 'quit' zum Beenden des Spiels eingeben,\n"
              "'restart' um das Spiel neuzustarten und help um die Hilfe \
aufzurufen.")
        print(mode)
        if mode == 'modified':
Also ich gebe im Playermode modified ein. Ganze Funktion con Playermode funktioniert auch. Das Problem liegt dabei, dass die mode Variable jetzt kein String mehr ist in der funktion StartValues und ich deshalb nicht meine if-bedingung anwenden kann. Wie muss ich was ändern damit es funktioniert?
BlackJack

@Fl4mer: Was denkst Du denn was Du statt einer Zeichenkette an der Stelle bekommst?

Die Namenschreibweisen halten sich übrigens nicht an Style Guide for Python Code. Zudem passen die Funktionsnamen ausser `main()`, was ein konventioneller Name für das Hauptprogramm ist, nicht zu Funktionen. Funktionen tut etwas, und dementsprechend sollten die Namen diese Tätigkeit widerspiegeln.

Den rekursiven Aufruf von `playerMode()` würde ich als Programmierfehler ansehen. Rekursion geht bei Sprachen die keine „tail call optimization“ garantieren nur eine bestimmte Zeit lang gut und sollte auch wirklich nur für ”tatsächlich rekursive” Probleme/Lösungen verwendet werden und nicht einfach als ”Ersatz” für simpelste Schleifen. Bei Python haut es einem dann früher oder später ``RuntimeError: maximum recursion depth exceeded`` um die Ohren.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

modified
Dieses modified bekomme ich raus und das kann ich nicht mit 'modified' vergleichen
BlackJack

@Fl4mer: Das verstehe ich nicht. Was bedeutet Du bekommst modified heraus und kannst das nicht mit 'modified' vergleichen? Welchen Typ und Wert hat `mode` an der Stelle? Was gibt ``print(type(mode), repr(mode))`` denn an der Stelle vor dem Vergleich aus? Und wie äussert sich das, dass Du das nicht mit ``'modified'`` vergleichen kannst?

Edit: Insbesondere hast Du diesen Vergleich in `playerMode()` ja schon mal erfolgreich durchgeführt, denn sonst wäre die Funktion ja nach der Eingabe von dem Wert nicht verlassen worden.
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Ja es gab in dem Code überhaupt keinen Fehler. Der Fehler war im Kopf bei mir. :D
Antworten