2017-01-20 3 views
0

Ich schreibe ein kleines Spiel in Python, in dem bestimmte Ereignisse passieren und Variablen beeinflussen, die in bestimmten Parametern bleiben müssen. Ich habe die Hauptdatei und dann eine andere Datei, in der alle Ereignisse enthalten sind. Einige der Werte werden in der Funktion verändert dann die Gesamtwerte in Haupt ändern soll (Sorry, wenn das tut Sinn machen)Variablen ändern sich nicht, nachdem sie eine Funktion durchlaufen haben

Hier ist der Teil in Haupt:

while (army > -100 and army < 100 and people > -100 and people < 100 and church > -100 and church < 100 and affairs > -100 and money < 100 and money > -100): 
    os.system('clear') 
    #Top Bar. Should Stay throughout game. 
    print("[-]==[King: " + king + "]==[Years in power:" + str(years) +"]==[Army: " + str(army) + "]==[People: " + str(people) + "]==[Church: " + str(church) + "]==[Foreign Affairs: " + str(affairs) + "]==[Economy: " + str(money) +"]==[-]") 
    print(people) 
    event1(army, people, church, affairs, money, years) 

, die bis einer der Parameter-Schleifen fällt unter 0 dann gibt es Verlustzustände

Im Moment gibt es nur ein Ereignis, und es ist nicht ganz fertig, aber ich brauche nur eine Sache, um zumindest eine Änderung der Werte zu sehen.

Hier, dass:

def event1(army, people, church, affairs, money, years): 
    #Feilds are Flooding 
    print("") 
    print("Sire! The Feilds in the eastern baronies are flooding! What should we do?") 
    print("") 
    print("Choices:") 
    print("1: The rain will pass, do nothing. (~Money, People)") 
    print("2: Have the Royal Builders build flood protection! (~Money, People)") 
    print("") 
    c=input("Your choice sire: ") 
    while True: 
     if c > 2: 
      print("") 
      print("Please chose a valid option") 
      print("Your choice sire: ") 
      continue 
     if c == 1: 
      time.sleep(2) 
      print("") 
      print("You do nothing, your people starve from flooded feilds (-People, +Money)") 
      money = money+20 
      people = people-20 
      years = years+1 
      raw_input("Press Enter to go to the next year") 
      return money 
      return years 
      return people 
      break 

Nachdem die Veranstaltung die Werte Menschen läuft, Geld und Jahre werden alle ändern sollte, aber wenn es Schleifen, ändert sich nichts.

Jede Hilfe wird geschätzt! Vielen Dank!

+1

müssen Sie Ihre zurückgegebene Anweisung zurück zuweisen. Und Sie können nicht mehr als einmal zurückkehren. –

+1

Festhalten? Sie definieren eine Folge von return-Anweisungen? Ihr Code wird bei der ersten angehalten. –

+1

Versuchen Sie 'Rückkehr Geld, Jahre, Leute' – thebjorn

Antwort

3

Das sind lokale Variablen. Sobald Sie den Gültigkeitsbereich der Methode verlassen, geht der Wert verloren, es sei denn, Sie geben und tatsächlich die zurückgegebenen Werte zurück.

In Ihrem Anrufer, Ihre Variablen mit den neuen Rückgabewerte zuweisen:

money, years, people = event1(army, people, church, affairs, money, years) 

und in event1, führen nur einreturn (andere nicht erreichbar sind) der tuple enthält die drei Werte, die Sie zurückgeben möchten (das ist auf die obere Ebene 3 gleichnamigen Variablen entpackt):

return money, years, people 
+0

Ahh danke dir. Es ist zu lange her, seit ich mit Python arbeite. Deine Hilfe ist sehr Willkommen! –

+0

Gern geschehen. Vielleicht mischt man die mehrfache "Rendite" mit mehreren "Ertrag" BTW. –

0

SIE BENÖTIGEN NICHT DIE RÜCKKEHR !!!!!!!!!!!!!!!!!!!! VOLLSTÄNDIG ENTFERNEN SIE ES! LESEN SIE DIES! (sollte helfen)

Die Rückkehr in der Tat ruiniert Ihren Befehl, und es gibt einen wirklich leicht erklärbaren Weg zu verstehen, wie es funktioniert.

Zuerst muss ich etwas erklären, weil ich etwas verwirrt über Ihren Code bin. Return wird verwendet, um den Wert Ihres Befehls unabhängig von Ihrer Rückgabe zu ermitteln. Rückkehr wird wie folgt verwendet:

def AddThreethousandTwohundredSeventyNineToNum(num): 
    num = num + 3279 
    return num 

und dann

print AddThreethousandTwohundredSeventyNineToNum(4) 

Es sollte "3283" drucken. (3279 + 4)

print printThreethousandTwohundredSeventyNineToNum(2) 

Es wird "3281" drucken.

Sie können auch wie coole Dinge tun:

if AddThreethousandTwohundredSeventyNineToNum(x) == y: 
    DoSomething 

Alle Rückkehr tut, ist der Wert machen DER FUNKTION was auch immer Sie es sein wollen. Im letzten Code sucht die Funktion nach dem, was ich gemacht habe num, und sieht, dass es 4 oder 2 ist, also tut es num = num + 3279, so wird num von 3279 (3273 oder 3271) erhöht. Wenn Sie return num tun, macht es DIE FUNKTION gleich num.

Das bedeutet, was Sie getan haben, ist alle diese schönen Werte in den Zeilen 21-23 (Geld, Leute, etc.) geändert und das ist alles, was Sie tun mussten. Wenn Sie jedoch die Zahlen zurückgegeben haben, haben Sie Ihren Befehl nicht nur dazu gebracht, diese Werte zu ändern, sondern auch zu einer Zahl geworden, und offensichtlich können Sie nicht einfach eine Zahl in Ihrem Befehl herumliegen haben. Oder der Dolmetscher wird es nicht verstehen.

Ich hoffe, ich war klar genug, und wenn nicht, bitte bitte bitte sagen Sie mir (bitte).

Verwandte Themen