Python. Некорректно работает if, когда добавляю input
Всем привет!
Есть две функции, одна тянет данные из другой.
Логика простая: в первую функцию ввожу данные в input, вторая уточняет, действительно ли я это хотел ввести
def first_layer(x,y):
if answer == 1:
return x
if answer == 2:
return y
else:
return 'Вводи только 1 или 2'
x = 'Один'
y = 'Два'
answer = int(input('1 - Один, 2 - Два: '))
result = first_layer(x,y)
print (result)
def second_layer(o,p):
if first_layer(x,y) == x:
return o
if first_layer(x,y) == y:
return p
else:
return 'Дружище, вводи только 1 или 2'
o = f'Я правильно понял, что ты выбрал {x}?'
p = f'Я правильно понял, что ты выбрал {y}?'
result = second_layer(o,p)
print (result)
И все работает отлично. В первой функции ввожу 1, мне возвращается, что я выбрал 1. Ввожу 2, возвращается, что выбрал 2
Но только стоит мне во второй функции добавить input
o = int(input(f'Я правильно понял, что ты выбрал {x}?'))
p = int(input(f'Я правильно понял, что ты выбрал {y}?'))
Так if сразу начинает ошибаться и если я в первой функции выбираю "2", во второй функции получаю ответ, предназначенный для "1"
например:
1 - Один, 2 - Два: 2
Два
Я правильно понял, что ты выбрал Один?
Помогите, пожалуйста, разобраться, что делаю не так. Если можно, очень подробно. Опыт в программировании 1 месяц.
Спасибо!
Ответы (1 шт):
К работе if это не имеет никакого отношения. Переменная о стоит в основной последовательности, а не во второй функции, как написано автором вопроса, поэтому её строка выполняется сразу после print, нет никакого if.
К "что делаю не так" - не только сама ошибка "не так" - неверен сам стиль написания кода, нельзя так писать, так как очень тяжело читать, а стиль сам потенциально порождает ошибки (что и случилось). Например, вторая функция second_layer почему-то "сидит" посреди основной программы, постоянные параметры х и y зачем-то передаются в первую функцию first_layer (аналогично o и p - во вторую), а единственная изменяющаяся переменная answer просто берется за счет области видимости. Зато вторая фунцкция до х и у добирается тоже через область видимости. И т.д. Крайне рекомендую продумать, что вообще хочется иметь, и структурированно написать всё заново.
Фактически код основной части (в "нерабочем" варианте автора с новыми o и p) сейчас выглядит так:
x = 'Один'
y = 'Два'
answer = int(input('1 - Один, 2 - Два: '))
result = first_layer(x,y)
print (result)
#следующая строка выведет "1" всегда, так как она стоит к исполнению без всякого условия
o = int(input(f'Я правильно понял, что ты выбрал {x}?'))
p = int(input(f'Я правильно понял, что ты выбрал {y}?'))
result = second_layer(o,p)
print (result)
Вот так можно переписать, чтобы убрать ошибку: (def second_layer перенесён наверх, а в переменной result теперь запоминаем, какие данные бот выдавал ранее, не надо снова вызывать first_layer из second_layer - и надёжнее, и быстрее так)
def first_layer(x,у): #оставил аргументы только с учётом, что х и у однажды будут в других версиях динамически меняться
if answer == 1:
return x
elif answer == 2: #elif правильнее, чем просто if тут
return y
else:
return 'Вводи только 1 или 2'
def second_layer(result): #передаём сюда результат первой функции
if result == x:
outcome = int(input(f'Я правильно понял, что ты выбрал {x}?'))
elif result == y: #elif правильнее, чем просто if тут
outcome= int(input(f'Я правильно понял, что ты выбрал {y}?'))
if outcome!=1 and outcome!=2:
outcome='Дружище, вводи только 1 или 2'
return outcome
if __name__=="__main__":
x = 'Один'
y = 'Два'
answer = int(input('1 - Один, 2 - Два: '))
result = first_layer(x,y)
print (result)
new_result = second_layer(result)
print (new_result)