Найти - Пользователи
Полная версия: Нужен совет по условиям в Питоне, объединение вопросов в группы
Начало » Центр помощи » Нужен совет по условиям в Питоне, объединение вопросов в группы
1
Oxidous
Всем доброго времени суток,
Только начал изучать Питон по книге Майкла Доусона “Программируем на Python”.
Интересует такой вопрос,можно ли объединить как-то вопросы в Питоне? В группу или как-то ещё? Не могу точно сформулировать вопрос.
Сейчас объясню,что я имею ввиду. Допустим,нужно написать программу- тест. Есть 10 вопросов, ответ на каждый вопрос- либо “Да”, либо “Нет”. Причём “Да” или “Нет” юзер вводит с клавиатуры. Если,допустим, юзер на 1, 2, 4, 7, 10 вопросы отвечает “Да”,а на 3, 5, 6, 8, 10 отвечает “Нет” то выводится один ответ, если на 1, 3, 5, 7, 9 отвечает “Нет”, а на 2, 4, 6, 8, 10 отвечает “Да”, то выводится другой ответ,и т.д.
Пускай переменная с вопросом будет называться “q”. Первый вопрос - q1, второй - q2 и т.д. А можно ли как-то сделать так,чтоб,допустим, выглядело как-то так:

q1 = input("Вы курите? Да/Нет: ")
.
.
.
if q1, q2, q3, q4, q5 = 'Да' and q6, q7, q8, q9, q10 = 'Нет':
    print("Ответ")
elif q2, q4, q7, q8, q9 = 'Да' and q1, q3, q5, q6, q10 = 'Нет':
    print("Другой ответ")

Просто мне нужно написать простенькую экспертную систему с 10 вопросами, а если писать так:

if q1 = 'y' and q2 = 'y' and q3 = 'y' and q4 = 'y' and q5 = 'y' and q6 = 'y' and q7 = 'y' and q8 = 'n' and q9 = 'n' and q10 = 'y':
    print("")
elif q1 = 'y' and q2 = 'y' and q3 = 'y' and q4 = 'y' and q5 = 'y' and q6 = 'n' and q7 = 'y' and q8 = 'n' and q9 = 'n' and q10 = 'y':
    print("")
elif q1 = 'y' and q2 = 'n' and q3 = 'y' and q4 = 'y' and q5 = 'n' and q6 = 'y' and q7 = 'y' and q8 = 'y' and q9 = 'n' and q10 = 'y':
    print("")
elif q1 = 'y' and q2 = 'y' and q3 = 'n' and q4 = 'n' and q5 = 'y' and q6 = 'y' and q7 = 'y' and q8 = 'y' and q9 = 'y' and q10 = 'y':
    print("")
.
.
.
Я скорее на пенсию выйду, чем закончу писать все возможные условия и ответы под каждое такое длинное условие ))
Знаю, что могут использоваться словари, но пока не представляю, как реализовать привязку словаря к вопросам.

P.S. Не знаю, важно это или нет, но пишу в IDLE 4.3.4
py.user.next
Вместо да/нет надо использовать True/False, делать из них список, а потом списки сравнивать.

>>> res = [True, False, True, True]
>>> 
>>> v1 = [True, False, True, False]
>>> v2 = [False, True, True, False]
>>> v3 = [True, False, True, True]
>>> 
>>> if res == v1:
...     print('first set')
... elif res == v2:
...     print('second set')
... elif res == v3:
...     print('third set')
... 
third set
>>>

Можно и так:
>>> res = 'ynyy'
>>> 
>>> v1 = 'ynyn'
>>> v2 = 'nyyn'
>>> v3 = 'ynyy'
>>> 
>>> if res == v1:
...     print('first set')
... elif res == v2:
...     print('second set')
... elif res == v3:
...     print('third set')
... 
third set
>>>
но тогда проверка привязывается к тому, что это векторы ответов на вопросы, а не просто векторы логических значений.

Так, например, проверку через True/False можно использовать в совершенно другой программе, где нет никакого пользователя, никаких вопросов и никаких ответов.
Проверку через y/n так не используешь, потому что она требует, что это должны быть именно ответы да/нет на какие-то вопросы.
botinag
Обратите внимание на all() и any().
all() - истинно, если истинно для всех элементов.
any() - истинно, если истинно хотя бы для одного элемента.
>>> all([True, True])
True
>>> all([False, True])
False
>>> any([True, True])
True
>>> any([False, True])
True
>>> any([False, False])
False
vdm_mar
Oxidous
Только начал изучать Питон по книге Майкла Доусона “Программируем на Python”.
о! коллега! я начал продираться сквозь Лутца
Там у него было как из строки в “двоичном” виде посчитать число. Можно попробовать использовать это и словари.
# Зафиксируем ответы (для примера взял только три вопроса) в двоичном виде 
L = []
Q = {0: 'Вопрос 1? Да/Нет? ', 1: 'Вопрос 2? Да/Нет? ', 2: 'Вопрос 3? Да/Нет? '}
R = {0: 'Ответ 1', 1: 'Ответ 2', 2: 'Ответ 3', 3: 'Ответ 4', 4: 'Ответ 5', 5: 'Ответ 6', 6: 'Ответ 7'}
# С помощью этого for забираем из Q по порядку вопросы, и в зависимости от ответа "Да", "Нет" записывается в L или '1' или '0'
for i in range(3):
    Answ = input(Q[i])
    if Answ == 'Да':
        q = '1'
    if Answ == 'Нет':
        q = '0'
    L.insert(i, q)
# Соединяем L в строку S, а строку переводим из "двоичной" в десятиричное I, это пример из Лутца
S = ''.join(L)
I = 0
while S != '':
    I = I * 2 + (ord(S[0]) - ord('0'))
    S = S[1:]
# Забираем из R нужный ответ
print(R[I])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB