|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
|||||||||||
Как обойтись без переменной для результата boolean09.04.2022, 22:19. Показов 1136. Ответов 16
Метки нет (Все метки)
На 15 день изучения Питона, как и планировал, взялся переписывать свое первое домашнее задание "игра крестики-нолики" с использованием классов + более-менее разобрался с return. Вот тут есть первоначальный рабочий вариант.
Новый вопрос. Создал класс, в нем функция check, которая должна возвращать boolean результат. Т.е. по идее мне достаточно поставить return на выполнении условия. Но не работает. А если вставляю переменные win = False и win=True, все работает. Вот код с дополнительной и, как мне кажется, ненужной переменной:
0
|
|||||||||||
| 09.04.2022, 22:19 | |
|
Ответы с готовыми решениями:
16
Как обойтись без объявления переменной
Можно ли обойтись без переменной в Readln? |
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
||||||
| 09.04.2022, 22:23 | ||||||
1
|
||||||
|
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
|
|||||||||||
| 09.04.2022, 22:29 | |||||||||||
1
|
|||||||||||
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
|
| 09.04.2022, 22:31 [ТС] | |
|
Блин...
Я так пробовал, но недосдвинул False, хотя уже знаю, что два return не работают корректно. Спасибо. Я на синтаксис в 5 раз больше времени трачу, чем на логику....
0
|
|
|
|
||||||||||||||||||||||||
| 10.04.2022, 01:04 | ||||||||||||||||||||||||
|
К логическим веткам\блокам это никакого отношения не имеет. В коде может быть 150 условий и 150 return. Ну, это если писать в специфическом стиле... Вообще, как правило, достаточно одного. Кроме случаев когда требуется досрочный выход. Добавлено через 16 минут Как пишет код новичок:
1
|
||||||||||||||||||||||||
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
||||||
| 10.04.2022, 12:41 [ТС] | ||||||
|
Может кто подскажет, а то я сейчас опять 2 часа буду по мануалам лазить...
![]() Есть класс, внутри есть несколько функций. Можно ли передавать параметры между функциями внутри класса? Или если функция отработала и предала данные наружу с помощью return, то данные стираются? Пока в голову приходит только что-то типа глобальной переменной внутри класса... Пример. В классе одна функция принимает ввод с клавы и печатает его на экране, а вторая обрабатывает этот ввод. Как данные ввода передать во вторую функцию? Вот так работает, но будет ли это правильно или надо делать как-то иначе?
0
|
||||||
|
|
||||||
| 10.04.2022, 14:19 | ||||||
|
Обычное назначение данного поля инициализация глобального для всех экземпляров класса состояния. Но изменять это поле из экземпляров - плохая идея. У каждого экземпляра есть свои экземплярные поля. И передача состояния внутри экземпляра должна осуществлять через них. Добавлено через 1 минуту
1
|
||||||
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
|||||||||||||||||
| 10.04.2022, 22:03 [ТС] | |||||||||||||||||
|
Или мне надо передать vvod=0 не как глобальное состояние для экземпляров класса, а создать глобальную (точнее внешнюю для класса) переменную и передать ее в объект через __init__? Добавлено через 7 минут А.... понял.... Можно вот так:
Еще один вопрос знатокам. Ради удобства работы с другими классами пришлось заменить строковую переменную на список. Вариант от уважаемого iSmokeJC
А вариант от уважаемого unfindable_404
Почему?
0
|
|||||||||||||||||
|
|
||||||
| 11.04.2022, 00:44 | ||||||
|
Одинаково работают (по крайне мере, со списками):
А со строкой - не советовал бы. Неизвестно, что там окажется кроме запятой. Добавлено через 2 минуты И потом - число 1 и строка "1" это два разных множества.
0
|
||||||
|
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
|
|
| 11.04.2022, 00:48 | |
|
Viller_dm, так как все имена ваших классов представляют какие-то действия, возникает впечатление, что вы еще не до конца поняли что такое класс, и считаете его неким заменителем функции. На самом деле это не так. Класс - это некий набор данных, содержащий одновременно и функции для их обработки. Из него наружу торчат только интерфейсные функции, написанные в терминах этого класса, т.е. остальной программе не нужно знать как этот класс устроен внутри, и если его перепишут, оставив интерфейсные функции такими же, то внешняя программа этого не заметит. В вашем случае этот аспект не актуален, но таки логичнее классом назначить игровое поле крестиков-ноликов, а его методами - все функции по его обработке.
0
|
|
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
||||||||||||
| 11.04.2022, 00:50 [ТС] | ||||||||||||
|
У меня нет
![]() Со строковой переменной возвращает True, со списком - False
Добавлено через 1 минуту
0
|
||||||||||||
|
|
||||||
| 11.04.2022, 01:03 | ||||||
|
Viller_dm,
И set([1,2,3]) (он же {1,2,3}) никак не будет равен множеству {'1','2','3'}. В общем надо что-то одно сравнивать. Либо множество строк со множеством строк. Либо множества чисел со множеством чисел.
0
|
||||||
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
|||
| 11.04.2022, 01:34 [ТС] | |||
Практика нужна, поэтому, во-первых, пытаюсь писать и функции и классы с методами, использовать их пока по своему видению. В ходе работы начинает что-то доходить. Пока приближенно. А во-вторых, вам тут понадоедаю со своими вопросами и примерами. Т.е. все как всегда - практика и "тыкание носом" в ошибки, желательно хоть с минимальным разъяснением.Вот заканчиваю уже крестики-нолики с классами, причем не как в своем первом задании, где 2 человека играют друг с другом, а прога проверяет только критерии победы. Сейчас будет человек против компа. Все классы и функции написал, состыковать надо. К моему стыду, у меня единственная функция - отображение игрового поля, все остальное - классы (ввод, проверки шаблонов, выбор ответного хода). Кстати, вопрос: вызовов метода одного класса из другого класса следует избегать? Это уже связано с наследованием классов? Правильнее классы и вся логика с обращением к методам "снаружи"? Добавлено через 16 минут
0
|
|||
|
|
||||||||||||||||||||||||||||||||||||||||||||||
| 11.04.2022, 02:28 | ||||||||||||||||||||||||||||||||||||||||||||||
1
|
||||||||||||||||||||||||||||||||||||||||||||||
|
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
|
||||
| 11.04.2022, 07:56 | ||||
|
Добавлено через 13 минут Добавлено через 12 минут Добавлено через 2 часа 23 минуты Т.е. отличие ООП-программы от процедурной в том, что в процедурной существуют переменные и функции для их обработки, а в ООП-программе - только переменные (то бишь объекты классов), которые общаются между собой, вызывая интерфейсные функции друг друга, а функций в классическом понимании в программе нет.
1
|
||||
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
|
| 11.04.2022, 09:28 [ТС] | |
|
Garry Galler,
Спасибо. Все таки объяснение с примерами заменяет день чтения мануалов... Самое интересное, нельзя сказать, что я этого не знал. Опыта у меня нет в сегодняшнем программировании - перерыв больше 30 лет. С другой стороны, язык PL/1, с которого я начинал (и закончил ) компилируемый и тип переменных жестко объявляется до появления самой переменной, т.е. всю эту кухню я прекрасно понимаю. Да, не знаю особенностей конкретной реализации, но понимаю. Плюс ваши объяснения ткнули носом еще в один момент. Я недодумал логику и алгоритмы программы. Например, множества у меня это неизменные шаблоны для сравнения. Так на фиг я их оставил символьными, если собрался работать с целочисленными списками? Частично можно списать это на то, что ряд методов реализации "находится" и меняется в процессе работы над кодом, - начинал я со строк и множеств. Причем у меня же есть решение с совместным использованием цифр и символов в виде цифр в тех же шаблонах, именно с целью разделения данных. Короче, туплю кое-где.... idealist, Спасибо. Концепцию понял. Полезно. Надо продумать и, похоже, многое перекомпоновать...
0
|
|
|
225 / 15 / 3
Регистрация: 07.04.2022
Сообщений: 74
|
|
| 16.04.2022, 10:45 [ТС] | |
|
Как шутили в моей молодости: "Читал пейджер, много думал...."
Читал всю неделю учебники и документацию. Что-то новое для себя, естественно, нашел. Перекомпановал классы очень серьезно, постарался сильно сократить их количество, загнав все методы близкие по функциональности и использующие общие атрибуты в единые классы. Да и в самих методах что-то переписал по-другому. Есть вопрос по переменным. Как их правильнее именовать? Одинаковое имя для глобальных переменных и атрибутов экземпляра класса это правильно или нет? (Я в курсе, что экземпляр класса имеет собственную копию переменной - атрибута экземпляра класса, и значение, с которым он работает через нее, будет отличаться от значений аналогичных переменных других экземпляров класса.) Писать мне так точно удобнее.... но как это будет работать и насколько правильно концептуально?
0
|
|
| 16.04.2022, 10:45 | |
|
Помогаю со студенческими работами здесь
17
Как обойтись без метода Свернуть() для подсчет уникальных строк в ТЗ Clean Architecture (MVP), как обойтись без Context для Data Layer
Как обойтись без x Как обойтись без x Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|