Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с Python

Wqwqw Wqefhgiff Мастер (1122), открыт 2 дня назад
 #func.py
functions = {}

def define_function(name, params, body):
functions[name] = (params, body)

def call_function(name, arguments):
if name in functions:
params, body = functions[name]
if len(params) == len(arguments):
local_vars = {}
for i in range(len(params)):
local_vars[params[i]] = arguments[i]
exec(body, {}, local_vars)
return local_vars.get('return_value', None)
else:
print(f"Ошибка: Функция '{name}' ожидает {len(params)} аргумент(ов), получено {len(arguments)}")
else:
print(f"Ошибка: Функция '{name}' не определена")

define_function('add', ['a', 'b'], '''
return_value = a + b
''')

result = call_function('add', [3, 5])
print(f"Результат вызова функции 'add': {result}")
 #ult.py - главный файл
from func import define_function, call_function

functions = {}

define_function('add', ['a', 'b'], '''
return a + b
''')

code = "add 3 7"
lines = code.splitlines()
for line in lines:
tokens = line.split()
if tokens[0] in functions:
arguments = [int(arg) for arg in tokens[1:]] # Преобразуем аргументы в числа
result = call_function(tokens[0], arguments)
print(f"Результат вызова функции '{tokens[0]}': {result}")

вывод: Результат вызова функции 'add': 8
ожидаемый вывод: Результат вызова функции 'add': 10
1 ответ
Улик Додиков Искусственный Интеллект (112812) 2 дня назад
GPT-4o
Проблема заключается в том, что файл `ult.py` заново инициализирует пустой словарь `functions`, из-за чего он не содержит определений функций, сделанных в `func.py`. Чтобы исправить это, вам нужно убедиться, что определения функций из `func.py` используются в `ult.py`. Вот исправленный код для обоих файлов:

### func.py
  
functions = {}

def define_function(name, params, body):
functions[name] = (params, body)

def call_function(name, arguments):
if name in functions:
params, body = functions[name]
if len(params) == len(arguments):
local_vars = {}
for i in range(len(params)):
local_vars[params[i]] = arguments[i]
exec(body, {}, local_vars)
return local_vars.get('return_value', None)
else:
print(f"Ошибка: Функция '{name}' ожидает {len(params)} аргумент(ов), получено {len(arguments)}")
else:
print(f"Ошибка: Функция '{name}' не определена")

define_function('add', ['a', 'b'], '''
return_value = a + b
''')


### ult.py
  
from func import define_function, call_function, functions

code = "add 3 7"
lines = code.splitlines()
for line in lines:
tokens = line.split()
if tokens[0] in functions:
arguments = [int(arg) for arg in tokens[1:]] # Преобразуем аргументы в числа
result = call_function(tokens[0], arguments)
print(f"Результат вызова функции '{tokens[0]}': {result}")


Теперь файл `ult.py` будет использовать определения функций из `func.py`, и результат будет правильным:

Результат вызова функции 'add': 10
Wqwqw WqefhgiffМастер (1122) 2 дня назад
Я чату гтп тоже писал, но у меня он не много тупой и не смог дать выход. Хотя я сам-то затупил тоже не много. Передай спасибо своему чату гтп. От души в душу
Улик Додиков Искусственный Интеллект (112812) Wqwqw Wqefhgiff, ахах передам ?
Похожие вопросы