ifullut
@ifullut
Учу программирование понарошку...

Что делать если не выводит нужное значение переменной в Python?

Всем привет. Есть файл:
#inter.py
class Intepritator():
	def __init__(self, file):
		f = open(file, "r")
		s = f.read()
		li = s.split("\n")
		vars = {}
		for l in li:
			def command(name): #функция для создания команд
				if l.startswith(name): #начинается ли строка на имя
					what = l.replace(name, "")
					what = what.replace("(", "").replace(")", "") #удаляем скобки и возвращаем только значение в скобках
					return what
			
			if l.startswith("lef"): #слово для создания переменной
				base = l[4:]
				key = base.partition(" = ")[0] #имя переменной
				val = base.partition(" = ")[2] #значение
				
				vars[key] = val #добавляем в словарь ключ = знаяение
			
			if command("prn"): #команда print
				if command("prn") == key: #если аргумент функции равен ключу
					#for i in command("prn"):
						#if i in vars.keys():
							#print(vars[i], end="")
					for i in key: 
						print(vars[i]) #выводим значение
							#print(vars)
				else:
					print(command("prn"))
					
	
					
a = Intepritator("test.lang")


В test.lang:
lef a = 9
lef b = "hello"
prn(b)
prn(a)

Думал что должно вывестись 9 и "hello", но вместо этого пишется
"hello"
a

То есть вместо 9 выводит а. Что не так в коде?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@o5a
Проблема здесь:
if command("prn") == key:
Это не способ проверить, что команда хочет напечатать переменную. Она только проверяет, что в команде prn использовано значение key, т.е. предыдущее установленное значение переменной, т.е. "b".
Соответственно срабатывает оно только для "b".
Можно было проверить так (что в prn используется какая-нибудь из установленных переменных):
if command("prn") in vars:
И перебирать ключи потом
for i in key:
не нужно, ключ же уже известен, это commant("prn")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы