2017-05-16 10 views
-1

Ich habe vier Variablen, die in bestimmten Modulen geändert werden müssen und in bestimmten Modulen gelesen werden müssen. Zur Verdeutlichung sind diese Module 'health', 'max_health,' attack 'und' gold '.Python - Variable Werte in verschiedenen Modulen ändern?

Das Gold wird immer dann erhöht, wenn ein Feind in jedem der drei Level der Anwendung besiegt und reduziert wird, wenn ein Rüstungsteil/eine Waffe im Waffenmodul gekauft wird. Die Gesundheit soll sich verringern, wenn ein Gegner angegriffen wird und im Krankenhaus-Modul wiederhergestellt, hängt die max_health davon ab, welche Rüstung in der Waffenkammer ausgestattet wurde und das gleiche gilt für den Angriff und welche Waffe wurde ausgestattet.

Das Problem ist, dass die gesetzten Werte immer von einem Modul übernommen werden, in dem ich jede der Variablen zusammen mit den Funktionen der Anwendungen gespeichert habe.

Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, den Wert von jeder der Variablen beim ersten Start der Anwendung zu übernehmen, und dann können die Werte wie oben beschrieben in den Modulen geändert und gelesen werden .

Jede Rückmeldung würde sehr geschätzt werden.

EDIT: Die Variablen sind globale und in StoreData wie folgt festgelegt:

global max_health 
global health 
global attack 
global gold 

max_health = 100 
health = 100 
attack = 5 
gold = 0 

Diese Variablen werden dann in jedes Modul importiert wie folgt:

from PKG.StoreData import hub_from_level1_travel, max_health, attack, gold, health 

from PKG.StoreData import health, max_health, attack, gold, hub_from_level2_travel 

from PKG.StoreData import health, max_health, attack, gold, hub_from_level3_travel 

from PKG.StoreData import hospital_heal, hub_from_hospital_travel, max_health, health, gold, attack 

from PKG.StoreData import hospital_travel, armoury_travel, level1_start, level2_start, level3_start, exit, health, max_health, attack, gold 

from PKG.StoreData import hub_from_armoury_travel, max_health, health, gold, attack 

Die Werte für die Variablen wie geändert werden Zunächst beschrieben, aber die Änderungen ersetzen nicht die in StoreData angezeigten Werte. Stattdessen werden die Werte aus StoreData übernommen, wenn ein Modul verwendet wird, das nicht StoreData ist, und stattdessen die ursprünglich festgelegten Werte verwendet. Ich kann mich nicht mit möglichen Korrekturen für dieses Problem befassen, daher wäre Feedback in diesem Moment unendlich dankbar.

+0

Willkommen bei StackOverflow. Bitte lesen und befolgen Sie die Buchungsrichtlinien in der Hilfe. [Minimales, vollständiges, überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) gilt hier. Wir können Ihnen nicht effektiv helfen, bis Sie Ihren MCVE-Code veröffentlicht und das Problem genau beschrieben haben. Wir sollten in der Lage sein, Ihren gesendeten Code in eine Textdatei einzufügen und das beschriebene Problem zu reproduzieren. – Prune

Antwort

0

Erstens sind Ihre globalen Aussagen sinnlos. Wenn diese Variablen auf Modulebene definiert sind, sind sie bereits global.

Zweitens, um Ihr Problem zu beheben, sollten Sie das Modul importieren, nicht die Variablen. Sie können dann lesen und sie über das Modul Referenz gesetzt:

from PKG import StoreData 

StoreData.hub_from_level1_travel = 'foo' 

Alternativ Sie einen anderen Namespace innerhalb StoreData vorstellen könnte Ihre Variablen auf einstellen - zB einer Klasse.

+0

Das Austesten dieser Antwort hat mir folgendes gegeben: NameError: Name 'Gesundheit' ist nicht definiert. Ich glaube, dass meine Funktionen ein Problem mit dieser Antwort sind, da meine Funktionen Parameter übergeben. – lg99

+0

Das Entfernen der Parameter bedeutet, dass bestimmte Namen nicht definiert werden können. – lg99

+0

Offensichtlich müssen Sie Ihre Attribute auch über StoreData lesen. –

Verwandte Themen