Как можно преобразовать строку в переменную/ые?

Возникла проблема при написании бота по алгебре-логике. На вход подается пример(к примеру 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
→ Ссылка