Как можно преобразовать строку в переменную/ые?
Возникла проблема при написании бота по алгебре-логике. На вход подается пример(к примеру a and b) и необходимо из ввода сделать пример, чтобы он читался в print(), как переменная (a и b - соответственно)
c=input('')
for a in range(2):
for b in range(2):
print(???)
для ввода 'a and b' должен быть вывод: 0 0 0 1
*В сообщении боту подается пример, который должен его решить. Сообщение подается в формате строки, эту строку надо переделать, чтобы она читалась в выводе, как переменная. Код показанный выше - подобие песочницы, чтобы код бота не мазолил глаза. *
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Чтобы получить 0 0 0 1 нужно умножение, а чтобы результат был на одной строке в print указать end
Пример:
for a in range(2):
for b in range(2):
print(a * b, end=' ')
Автор решения: Scrzii
→ Ссылка
def replace_variables(expression, variables, values_mask): # Функция, заменяющая переменные выражения на соответствующие им значения из битовой маски
variables = variables[::-1] # "Переворачиваем" список с переменными, так как цикл работает в обратном порядке (по дефолту)
expression = expression.split() # Разбиваем выражение на токены
for i in range(len(variables)):
for j in range(len(expression)): # Все "куски" (токены) выражения
if expression[j] == variables[i]: # Если тут стоит переменная
expression[j] = str((values_mask >> i) & 1) # Заменяем ее на выбранное значение из маски
return " ".join(expression) # Склеиваем куски выражения обратно в одну строку
def main():
expression = input() # считываем выражение
expression = expression.replace("(", " ( ").replace(")", " ) ")
letters = list(map(chr, range(ord("a"), ord("z")))) # ["a", "b", ..., "z"] - все буквы латинского алфавита
variables = list(filter(lambda x: x.lower() in letters, expression.split())) # Получаем все переменные выражения (сплит выражения по пробелам и проверка, является ли "слово" буквой алфавита)
for values_mask in range(0, 1 << len(variables)): # Перебираем все комбинации при помощи битовой маски (любое значение можно вытащить битовым сдвигом и операцией &)
result = eval(replace_variables(expression, variables, values_mask)) # Считаем результат
print(("{0:0" + str(len(variables)) + "b}").format(values_mask), result) # Выводим саму маску (то есть текущие значения всех логических переменных) и ответ
main()
Ввод:
a and (b or c)
Вывод:
000 0
001 0
010 0
011 0
100 0
101 1
110 1
111 1