Форум сайта python.su
0
PEHDOM
Имеено, об этом и писал FishHook если бы вы изначально учились длать все правильно, а не по принипу “и так сойдет, этоже обучение”, то у вас не было такой лавины.
Да тут про другое , если бы изначально было условием было добавление характеристик и т.д. , так тут можно развивать до бесконечности, при чем здесь и так сойдет? Я спросил вашего мнения относительно выполнения условия в соответствии поставленных задач, ваши претензии понял.
Офлайн
294
Babay82Та уже лучше, но код совсем не стал ни элегантнее ни лаконичнее. начнем:
А так?
character[0][1] += value character[choice][1] -= value
character[choice][1] += value character[0][1] -= value
character[0][1] += value character[choice][1] -= value
[code python][/code]
Отредактировано PEHDOM (Фев. 21, 2019 16:41:50)
Офлайн
0
Имеено, об этом и писал FishHook если бы вы изначально учились длать все правильно, а не по принипу “и так сойдет, этоже обучение”, то у вас не было такой лавины.
Так я и хочу научиться делать правильно, поэтому и спрашиваю.
Ваши претензии по поводу багов мне понятны, а по поводу дальнейшей жизнеспособности программы ввода новых характеристик и т.д.? Я про лавину в другом смысле, не исправлений а дополнений, Начинают мысли работать типа а давай персонажей введем , а давай каждому свой класс и характеристики определим и т.д. и т.п.
А как бы вы это сделали, , с учетом пройденного материала?
Офлайн
0
PEHDOM
2. постоянно обращение к элементам списка занимает ресурсы, пока у вас учебная программа на 5 строк это ничего, а представте что у вас цикл на миллион итераций, это способно сущетсвенно уменьшить быстродействие.
3. Вы сначала совешаете действие :
character += value
character -= value
а потом проверяете некие условия, и делаете откат
character += value
character -= value
Опять же на учебном примере на 5 строк это никак не скажется, а представте что у вас таже транзакционная БД, которая обрабатывает несколько тысяч запросов в секунду, а вы в нее сначала записали, потом вас не устроило, вы еще раз записали. ВО первых база будет расти как на дрожжах,во вторых доп наргузка на канал/диск, во третих в случае проблем со связью\сбоев питания, в базе могут оказаться некоректные значения.
Логично сначала все проверить, а потом если все ОК вносить уже изменения. Да и математики тогда выходит меньше.
Если это можно сделать с помощью функций и т.д. то мы еще это не проходили, если только с помощью пройденного материала то прошу подскажите примером.
Офлайн
294
Babay82Ну смотрите возьмите ваш код
Если это можно сделать с помощью функций и т.д. то мы еще это не проходили, если только с помощью пройденного материала то прошу подскажите примером.
... while choice != "хватит": for i in character: print(i) choice = int(input("Выберите характеристику для изменения:")) value = int(input("Введите число на которое изменяете начение, если уменьшить то отрицательное:")) # начало рассматриваемого кода character[choice][1] += value character[0][1] -= value if character[choice][1] < 0: print("Характеристика не может быть отрицательной") character[0][1] += value character[choice][1] -= value elif character[0][1] < 0 or character[0][1] > 30: print("Вы превысили лимит! Сумма всех очов не может быть больше 30!") character[0][1] += value character[choice][1] -= value # конец рассматриваемого кода ...
... while choice != "хватит": for i in character: print(i) choice = int(input("Выберите характеристику для изменения:")) value = int(input("Введите число на которое изменяете начение, если уменьшить то отрицательное:")) # начало рассматриваемого кода new_char = character[choice][1]+value new_rest = character[0][1]-value if new_char < 0: print("Характеристика не может быть отрицательной") elif new_rest < 0 or new_rest > 30: print("Вы превысили лимит! Сумма всех очов не может быть больше 30!") else: character[choice][1] = new_char character[0][1] = new_rest #конец рассматриваемого кода ...
[code python][/code]
Отредактировано PEHDOM (Фев. 21, 2019 18:08:09)
Офлайн
568
Babay82
Да блин, вопрос в исполнении кода , относительно поставленных задач?
Может мне её расширить сразу до такой степени, чтоб можно было вычислить траекторию полета ракеты, при теоретическом изменении солнечной орбиты на ближайшие 2000 лет? А вдруг придется?
Если глянуть ниже , там стоит первоначальный вопрос как сделать код элегантнее и лаконичнее!?
Жизненный цикл этой программы неприлично короток. От этой программы не зависит эффективность бизнеса.
Если не ошибаюсь эта ветка для новичков, здесь люди которые вчера только первый раз в жизни хелло ворд написали, здесь стоит вопрос первоначально о работоспособности КОДА?
Кстати вот, во что превращается ХЕЛЛО ВОРД, если его начинать подстраивать на всякий случай)
Офлайн
0
PEHDOM
Спасибо, ну да лажанулся
Я так понял надо было сразу задать переменные, что бы программа обращалась к ним а не к списку? Я же говорю опыта ноль) Я же даже не знаю от чего зависит быстродействие программы и т.д. Посоветоваться не с кем, поделиться мыслями. Из моего окружения ни одного знакомого который был бы связан с этой сферой, за исключением родственника который в VBA для работы когда то несколько функций в Exel добавил. На код глянет, головой покивает, сделает вид , что что-то понял и на этом закончили
Учту в дальнейшем, спасибо за бесценный опыт
Офлайн
0
FishHookНе обижайтесь ,дорогой. И в мыслях не было ставить свои знания над вашими. У меня их вообще нет. За этим сюда и пришел. Просто, если человеку сказать - это сделано не правильно, он вряд ли чему-то научится, А если сказать почему не правильно то уже есть шанс. А если ещё и показать как надо, то тогда точно научится.
Офлайн
857
По-моему, парнишка-топикстартер сделал всё в принципе так, как и надо (в марте 2015 года). Чем независимее части программы друг от друга, тем лучше. Проблемы с программой начинаются когда? Когда ты хочешь что-то поменять, потому что оно кривое, а его нельзя просто взять и поменять, из-за того что это изменение повлечёт за собой изменение кучи других вещей, которые тебе не нужно менять. Вот из-за таких вещей баги в программах годами живут, даже после их обнаружения.
Так что, Babay82, хоть ты и укоротил код, но он стал хуже кода топикстартера. Хороший код - это не тот, который короткий, а тот, который подходит по три основных критерия хорошего кода.
Код должен быть понятным.
Код должен быть правильным.
Код должен быть легко изменяемым.
Код должен быть живучим. Для этого нужно, чтобы его можно было легко исправлять и добавлять в него новое, чтобы можно было его легко встраивать в самые новые проекты, чтобы работа с ним приносила одно удовольствие разработчикам.
Если же в нём хрен разберёшься, если в нём чуть что тронешь и он весь от этого рассыпается сразу, если он плотно привязан к какой-нибудь консоли 1980 года, то, конечно, он сдохнет при первой же возможности, никто не будет с ним работать.
Отредактировано py.user.next (Фев. 22, 2019 06:10:56)
Офлайн
294
Babay82Тут дело даже не столько в сами переменных сколько в подходе. Просто представте, например, что это не программа по распределению характеристик , а какаянить платежная система. Тоесть человек хочет оплатить товар, вводит суммы, а вы сначала эту сумму списываете у него со счета, и начисляете на счет магазина, а потом проверяете, а есть ли такая сумма на счету, а не превышает ли она сумму лимита для платежей, а правильно ли введен ОТП-пароль и тд…. и если что не так то обратно списываете сумму со счета магазина и зачисляете сумму на счет клиента. Ну ведь глупость же несусветная. Да можно сказать что мол это на принципиально , программа маленькая, учебная, вот когда буду писать платежную систему тогда и буду думать. Да только вот вы сейчас привыкнете так писать то потом потом будете постоянно “думать” и наступать на грабли, а если сразу научитетсь правильно мыслить , то в дальнейшем даже не будете задумываться над такими вещами.
Я так понял надо было сразу задать переменные, что бы программа обращалась к ним а не к списку? Я же говорю опыта ноль)
Babay82Ну тут нужно просто понимать, что обращение к элементу списка, словаря или множества более затратно с точки зрения тактов процессора чем просто обращение к переменной, а обращение к глобальной переменной более затратно чем обращение к локальной. Если вам нужно один раз обратиться то никакой разницы нет, а если у вас цикл на миллионы итераций, то тут уже разница заметна.
Я же даже не знаю от чего зависит быстродействие программы и т.д.
[code python][/code]
Отредактировано PEHDOM (Фев. 22, 2019 10:04:01)
Офлайн