Warum wird die Variable zu 0 gesetzt, wenn ich mit der Variable rechne?
Ich mache gerade eine Programmiersprache in Python und mache es gerade, so dass man mit integers rechnen kann, aber wenn ich mit der Variable rechne wird sie zu 0.
Hier ist die Python-Klasse:
class Var:
def __init__(self, type, ln, new):
self.type = type
self.ln = ln
if (self.type == "int" and new == True):
self.newInt()
if (new == False):
if (self.type == "int" and self.ln.__contains__("+=") or self.type == "int" and self.ln.__contains__("-=") or self.type == "int" and self.ln.__contains__("*=") or self.ln.__contains__("/=") and self.type == "int"):
self.useInt()
def newInt(self):
name = self.ln[self.ln.find("<") + 1 : self.ln.find(">")]
declaration = "0"
if self.ln.__contains__("§int <" + name + "> = {" and self.ln.__contains__("}")):
declaration = self.ln[self.ln.find("{") + 1 : self.ln.find("}")]
math = Math(declaration)
num = math.calculate(declaration)
ints[name] = num
print(ints)
def useInt(self):
name = self.ln[self.ln.find("<") + 1 : self.ln.find(">")]
changeType = None
if (self.ln.__contains__("+=")):
changeType = "+"
elif (self.ln.__contains__("-=")):
changeType = "-"
elif (self.ln.__contains__("*=")):
changeType = "*"
elif (self.ln.__contains__("/=")):
changeType = "/"
else:
changeType = "+"
change = self.ln[self.ln.find("{") + 1 : self.ln.find("}")]
math = Math(change)
num = math.calculate(change)
if (num is not None):
if (changeType == "+"):
ints[name] += num
elif (changeType == "-"):
ints[name] -= num
elif (changeType == "*"):
ints[name] *= num
elif (changeType == "/"):
ints[name] /= num
else:
Error.unkownCalculation()
print(ints)
else:
Error.calculation()
Hier ist der Code in der Datei, die ich lese:
§int <Jar> = {1 + 3 - 2}
$int <Jar> += {1 + 3}
Hier ist der Code vom File-Reader:
def main():
with open("main.ep", "r") as f:
lines = f.readlines()
rln = 0
ln = lines[rln]
linesInFile = sum(1 for _ in open("main.ep", "rbU"))
print("\n\n")
#This line here is to check if the Code works properly
#print(linesInFile)
while (True):
#code reader:
if (ln != ""):
if ln.__contains__("System."):
System(ln)
if ln.__contains__("§int"):
Var("int", ln, True)
elif (ln.__contains__("$int")):
Var("int", ln, True)
#Checking if line there
if (rln == linesInFile - 1):
break;
else:
rln += 1;
ln = lines[rln]
main()
2 Antworten
Ich kenne mich mit Python nicht aus und kann dir keinen Code liefern, dein Problem ist aber, dass du immer den Konstruktor von Var aufrufst, wenn du die Variable findest, egal ob bei § oder $. Im $-Fall (oder immer) solltest du ints[name] abfragen, ob es schon eine Variable mit dem Namen gibt und dann diese verwenden, und nur wenn diese noch nicht gibt, ein neues Var-Objekt anlegen.
Müsstest du doch aber eigentlich in der Ausgabe sehen, das es bei dem print(ints) dann zwei Objekte mit gleichem Namen im 2. Durchlauf gibt...
Ok, dann überscreibt er den ints-Eintrag mit einem neuen Objekt. Das ist dann halt trotzdem neu, und damit 0 beim Verarbeiten der 2. Zeile. Mein letzter Satz trifft dann nicht zu.
Erwartest du jetzt, dass jemand deinen nahezu unkommentierten Code schrittweise durchklappert, um den (sich wie auch immer äußernden) Fehler zu finden?
Fragen und Antworten, die man vor/beim Debuggen klar haben bzw klären sollte:
- Was soll das Programm machen?
- Wie soll es das machen?
- Was macht es stattdessen?
- Warum macht es das?
Ich habe doch gesagt, dass ich eine Programmiersprache mache und wie der Code funktioniert. Würdest du nur die Namen der Funktionen/Klassen lesen, würdest du auch wissen, welcher Teil vom Code was macht. Ich habe auch gesagt, dass im Dictionary die Variable "Jar" (vom Dictionary ints) sich von 4 zu 6 ändern soll, stattdessen wird 4 zu 0. Und ich weiß nicht warum Python das nicht macht. Nichtmal ChatGPT weiß es und auf Stack Overflow checkt es auch keiner. Deswegen habe ich ja auch diese Frage gestellt.
Ich mache gerade eine Programmiersprache in Python und mache es gerade, so dass man mit integers rechnen kann, aber wenn ich mit der Variable rechne wird sie zu 0.
Sorry, dass ich aus diesem Satz deine Intention nicht herauslesen konnte.
Nein, in Python wird der Inhalt vom Dictionary dann einfach Überschrieben.