Найти - Пользователи
Полная версия: помогите разобраться в примере.
Начало » Центр помощи » помогите разобраться в примере.
1 2
FishHook
Этот код бессмысленен чуть более чем полностью.
kochevnick48
Данный код из книги, автора я уже указал. Если Вы считаете себя умнее автора то объясните его бессмысленность.
FishHook
kochevnick48
Данный код из книги, автора я уже указал.
А я то при чем? Выкинь её на помойку.
kochevnick48
объясните его бессмысленность
1. Потому что цикл, который заведомо выполняется один и только один раз не имеет смысла.
2. Потому что выполнять цикл по заведомо пустому списку еще более бессмысленно
old_monty
kochevnick48
получается , что found_one - переменная которая сигнализирует о том что в списке что-то найдено ?
1. На данном форуме необходимо код обертывать в теги, как Вам справедливо уже указал модератор.
2. Да, found_one - это переменная логического типа, принимающая одно из двух возможных значений (False/True). Смотрим еще раз внимательно на Ваш пример из книги:
 cheeses = []
found_one = False
for cheese in cheeses:
   found_one = True
   print('This shop has some lovely', cheese)
   break
if not found_one:
   print('This is not much of a cheese shop, is it?')
Запускаем и получаем:
>>>This is not much of a cheese shop, is it?
Это говорит о том, что переменная found_one осталась равной False, хоть ей и было присвоено True в цикле. Но в цикле for вообще никакие действия не выполнялись, в том числе и found_one = True. А не выполнялись они потому, что ни одного сыра (cheese) в пустом списке cheeses не было найдено.

Этим примером автор книги показывает, что будет, если попробовать отказаться от else в цикле for. Как видим, можно обойтись и без else, но тогда придется создавать дополнительную логическую переменную (found_one) и отдельно проверять ее по условию. К тому же эта переменная глобальная, а глобальных переменных в программах следует по возможности избегать. Они являются источником уязвимости, ошибок, и вообще это плохой стиль программирования.
kochevnick48
Вот это более понятно. Спасибо. Про “обертывание кода” я извиняюсь. Т.е. если бы в списке был “сыр” found_one изменился бы на true и сработал бы break . Верно ?
old_monty
kochevnick48
Вот это более понятно. Спасибо. Про “обертывание кода” я извиняюсь. Т.е. если бы в списке был “сыр” found_one изменился бы на true и сработал бы break . Верно ?
В этом Вы легко можете убедиться сами. Попробуйте внести один, два или больше сыров в список cheeses:
 cheeses = ['parmesan', 'holland_special', 'smoked']
И запустите этот вариант. Что получается?

Основная же мысль автора была показать преимущества от использования else в цикле for. Посмотрите, насколько проще и короче получается тот же самый результат с тем же самым пустым списком, но без дополнительной глобальной переменной и без ее проверки в if:
 cheeses = []
for cheese in cheeses:
   print('This shop has some lovely', cheese)
   break
 else:
   print('This is not much of a cheese shop, is it?')
kochevnick48
С конструкцией где есть else всё сразу было понятно.
Да конструкция проще и удобнее.
Ещё один вопрос - а почему глобальная переменная found_one изначально объявляется False ?
old_monty
kochevnick48
Ещё один вопрос - а почему глобальная переменная found_one изначально объявляется False ?
Потому что изначально (до прохождения по элементам списка при помощи for) мы не можем гарантировать, что уже найден хотя бы один сыр. Да, у автора в примере список сыров пустой, это видно из кода. Но кто сказал, что мы всегда будем читать из списка? Более реально читать из файла, а его содержимое заранее неизвестно. Если все же будем читать из списка, то опять же, он может оказаться пустым (например, если элементы списка вводятся пользователям с консоли, а программа перед добавлением в список проверяет введенные значения, и отбрасывает недопустимые - например цифры, знаки @#$% и т.д.)
kochevnick48
Большое Спасибо. Вы помогли мне разобраться.
FishHook
MickeyMouse
MickeyMouse
Это как в том приколе с башорга про студента, который читая учебник увидел код на С++, который не смог осмыслить ни он сам ни его компилятор. Студент долго мучился с этим кодом, играл с ключами компилятора, переменными окружения, библиотеками и когда он накурив банку бычков и разбив клавиатуру почти понял, как оно работает, он перевернул страницу и прочитал: “Этот код, конечно же не работает потому что…”.

Человек постит кусок говна, говорит “Я ж из книги его нарыл, не из пупа наковырял то. Почему в этом коде так то и так то сделано? Ну-ка ответь, ты ж не умнее Джона Пупкина!!!”. А то что этот код приведен как пример “так не надо делать” человек толи не понимает, толи лыжи не едут.
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