Змея / Говнокод #27060 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
number = input("Введите цифру от 1000, до 20000: >")
if int(number) < 1000 or int(number) > 20_000:
    print("Неправильное число")
    exit(0)
 
j = ''  # сделать стринг
 
i = 0  # for
 
maximum = []  # поиск максимального числа
 
count = 0  # ошибка
 
while i < int(number):
    i += 1  # ++
    i_string = str(i)
    j = i_string[::-1]
    if int(i) + int(j) == int(number):
        maximum.append(int(i))
        count += 1  # ошибка
if count == 0:
    print(0)
    exit(0)
print(max(maximum))

Цель кода была в том, чтобы найти максимальный x, по формуле X+F(x) = N, где N число, которое ввели, а F(X) перевёрнутый X
x = 1234 f(x) = 4321

Запостил: warzon131 warzon131, (Updated )

Комментарии (114) RSS

  • А есть ли способ перевернуть число, без использования строки?
    Ответить
    • def reverse_number(a):
          assert(a >= 0)
          b = 0
          while a > 0:
              b = b * 10 + a % 10
              a /= 10
          return b
      З.Ы. Хотя для лабы на питоне и через строку сойдёт, конечно.
      Ответить
  • а вообще, exit(0) в алгоритмах это плохой тон или пойдёт?
    Ответить
    • Х.з., за пределами main()'а не стоит этим злоупотреблять, наверное.

      З.Ы. Ну и почему 0 если ты об ошибке сигналишь? Зачем наёбывать вызывающего?
      Ответить
      • по условиям задачи, если нет ответов, как для числа 1234, то должен 0 выводиться.
        а завершаю, чтобы не пошло печатать массив, который пустой.
        Ответить
        • > print("Неправильное число")
          > exit(0)

          Я вот про эту ветку. Здесь то явно не успех.
          Ответить
          • Мб не правильно описал, имею ввиду, что 0 это вывод, который должен быть, если число не имеет решения
            Ответить
            • А в ветке где решения нету (строка 23) я бы просто else поставил. Очень наглядно получится:
              if count == 0:
                  print(0)
              else:
                  print(max(maximum))
              Ответить
                • Ну и я бы сам алгоритм в функцию загнал, которая просто результат возвращает. Чтобы его можно было тестами покрыть или ещё где-то позвать. А ввод-вывод уже за пределами этой функции.

                  Хотя для лабы или одноразового скрипта не принципиально, конечно.
                  Ответить
          • Ну 0 в stdout и вернуть успех (0) в error code. Эта ветка всё-таки успешная по условию.
            Ответить
  • Кстати, делать int постоянно не нужно, да и проверять можно проще
    number = int(input("Введите цифру от 1000, до 20000: >"))
    assert 1000 < number < 20_000, "Неверное число"
    Ответить
    • Кстати, а как у вас в питоне к assert'ам относятся? Они никуда не пропадут в "релизной сборке"?
      Ответить
      • "-O"можно сказать для их отключения, но обычно так мало кто делает.

        Ну ок, можно конечно пеерписать и явно кинуть исключение. Это всё равно лучше, чем писать в stdout и возвращать 0
        Ответить
        • Да просто мне после крестов как-то неловко юзать ассёрты для проверки внешних данных. Там то они 100% отваливаются.

          Про исключение соглашусь: будет и текст в stderr (не stdout, который часто перенаправлен!) и бектрейс и exit code 1 автоматом.
          Ответить
          • Ну в целом ты конечно прав: assertы проверяют на ошибки в программе, а не на вшение данные

            Но ведь и завершать программу исключением в крестах тоже нельзя (иначе будет корка или доктор ватсон) а в ненативных языках это ок

            Вощем ненужно тут асерт, лучше явно raise Exception(".."), я просто хотел одним зайцем двух махов убить: и assert полетит и в stderr и exit code испортит емнип

            Но и неойманный Excepion будет тоже самое
            Ответить
            • > завершать программу исключением в крестах

              У меня там обычно обработчик в main'е, поэтому норм.
              Ответить
              • а вроде можно через API операционок подсунуть свой обрабочтик, всякий там SEH, не?
                Хотя проще наверное кросс-платформенно поймать в main.

                А во всех скриптовых языках плюс еще в JVM и в .NET это делает рантайм
                Ответить
                • Дык в крестах это тоже делает рантайм! Он даже выводит исключение. Просто потом terminate() зовётся со всеми вытекающими (деструкторы не зовутся, корка и т.п.).
                  Ответить
                  • мне казалось, что только в дебаговой сборке
                    А в не дебаговой случается обраьботка операционкой

                    это вообще не часть стандарта небось?
                    Ответить
                    • > не часть стандарта небось

                      Само собой. Ну terminate() при необработанном исключении - вроде часть стандарта, а сама диагностика и корки - нет.
                      Ответить
                      • хм, ты прав.
                        GCC:
                        >terminate called after throwing an instance of ....

                        Винда:
                        Процесс сдох, писнув так:
                        Faulting application name: 1.exe, version: 0.0.0.0, time stamp: 0x5f96e4fa
                        Faulting module name: 1.exe, version: 0.0.0.0, time stamp: 0x5f96e4fa
                        Exception code: 0xc0000409

                        А потом запустился тот, который вместо вацона:
                        Fault bucket 1856450165709227732, type 5
                        Event Name: BEX64
                        Response: Not available
                        Cab Id: 0
                        
                        Problem signature:
                        P1: 1.exe
                        P2: 0.0.0.0
                        P3: 5f96e4fa
                        P4: 1.exe
                        P5: 0.0.0.0
                        P6: 5f96e4fa
                        P7: 0000000000003f3d
                        P8: c0000409
                        P9: 0000000000000007
                        P10: 
                        
                        Attached files:
                        \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.c08ecb5f-3c18-40d0-bff9-0a39f4e1d401.tmp.mdmp
                        \\?\C:\ProgramData\Microsoft\Windows\WER\Temp\WER.2ac494b9-c3b6-4c46-800b-ce7690601a85.tmp.WERInternalMetadata


                        Ну то есть в случае винды случилось ровно то, чтобы случилось, если бы я попытался разыменовать нуль.

                        А в GCC нет.

                        Да?
                        Ответить
                        • Попробуй вручную terminate() позвать, вроде тоже задампается на винде.
                          Ответить
                          • ну то есть терминейт ничего не делает на винде, так?

                            Проверим
                            Calls abort or a function you specify using set_terminate.

                            abort:
                            Aborts the current process and returns an error code.

                            By default, when an app is built with the debug runtime library, the abort routine displays an error message before SIGABRT* is raised.



                            By default, in non-debug builds of desktop or console apps, abort then invokes the Windows Error Reporting Service mechanism (formerly known as Dr. Watson) to report failures to Microsoft. This behavior can be enabled or disabled by calling _set_abort_behavior and setting or masking the _CALL_REPORTFAULT flag.

                            А если я разыменую нуль, то получу тот же самый вацон, но без рантайма же


                            *какой вам сиг на винде, дурачье?
                            Ответить
                            • Ты будешь смеяться, но в msdn есть описание функции signal. Можно обработчик навесить. Неебу зачем.
                              Ответить
                              • Это какие-то костыли для CRT, ради которой завезли кусочек позикса?
                                Он обычно криво реализован: я там багу в "spawn" один раз нашел



                                Кстати, зачем?
                                Потому что часть С++ https://en.cppreference.com/w/cpp/utility/program/signal ?
                                Ответить
                                • Ничего в «Винду» не завезли. Функция «signal» целиком определена в «CRT». Это такой же костыль, как в «Cygwin» или в «Mingw», целиком расположенный в библиотеке языка.

                                  signal выполняет SetConsoleCtrlHandler и шаманит с «exception-action table».
                                  Ответить
                            • > then invokes the Windows Error Reporting Service mechanism

                              Ну т.е. дамп таки будет даже если не дебажная сборка. Просто без злоебучего гуёвого окошка.
                              Ответить
                              • будет, да.

                                но дамп будет и у
                                void main() {
                                  int* a = 0;
                                  *a = 1;
                                }

                                на чистых сях

                                я так понимаю, тут рантайм не причем?
                                Ответить
                                • Это другой случай. Здесь terminate() само собой не зовётся, в отличие от крестовых исключений. А вот обработчик какого-нибудь SIGSEGV может, наверное.
                                  Ответить
                                  • именно.

                                    и на linux это приводит к Segmentation Fault.

                                    Подведем итог:

                                    В случае ошибки в общем случае управление передается операционке, которая делает дамп и сообщает пользователю, что всё плохо.

                                    Однако в случае непойманного исключения рантайм плюсов вызвает terminate, который на линуксе выводит красивое сообщение, а на винде тоже выводит при линковке с дебажной версией, а в релизной версии результат ничем не отличается от обычной ошбки.


                                    > SIGSEGV может, наверное.
                                    ну то есть это платформо-зависимо. Сигсегв на позиксе, какой нить SEH на винде итд
                                    Ответить
                                    • Ну т.е. я не зря пишу в крестопрогах try { ... } catch (...) { /* тут логируем исключение */ return 1; } чтобы моя прога корректно завершалась с ошибкой, а не падала в дамп.
                                      Ответить
                                      • угу.

                                        Кстати, у нас в эйфории исключений нет. Вот просто нельзя поймать и обработать, например, обращение к неинициализированной переменной или выход за границы массива или нарушение типизации.
                                        Можно только сдохнуть
                                        Ответить
                                        • Эрланг какой-то. Да и синтаксис модулей с этим двоеточием чем-то похож. Они не им вдохновлялись случаем?
                                          Ответить
                                          • А я считаю, что это правильно.
                                            Если ты не сервер приложений и не хост для плагинов, то ловить рантайм ошибки не нужно.

                                            В ерланге, как я понимаю, все живут в отдельных мирах и общаются через IPC, так что "плагин" может помереть не затронув "хоста", да?

                                            Двоеточия есть и в lua (обращение к члену таблицы как к члену объекта).

                                            Про Эйфорию написано так

                                            Craig's thesis was heavily influenced by the work of John Backus on functional programming (FP) languages

                                            Очень странно. Функциональщина там есть в стандартной библиотеке (всякие filter итд, которые получают sequence и routine_id функции-колбека), но она далеко не first class citizen.

                                            Разве что применение оператора целиком ко всем членам последовательности ({1,2,3} * 2 = {2, 4, 6}) можно назвать чем-то с родни FP
                                            Ответить
                                            • А если ты сервер приложений, то у тебя тем более вся работа идёт в слейвах. А их не жалко, пусть лучше упадут, мастер новых запустит с чистого листа.
                                              Ответить
                                              • Ты про эрланг?


                                                Если слейвы в твоем адресном пространстве, то может быть и надо как-то обрабатывать их ошибки.
                                                А если нет -- пусть дохнут, бляди.

                                                Именно потому я за inetd, postfix main, и CGI:)
                                                Ну я так понимаю, что и эрланг тоже так работет
                                                Ответить
                                                • У эрланга свои "процессы" безопасные, они не могут по хардкору уронить процесс, хоть и в том же адресном пространстве. А сишный код у него обычно во внешних слейвах крутится чтобы не поднасрал (хотя вроде можно и dll'кой если очень доверяешь).
                                                  Ответить
                                                  • Понятно, спасибо.

                                                    Мне это нравится.

                                                    А вот питухи, ловящие рантайм исключение в джаве не нравятся, равно как и собачки в пыхе.


                                                    ps: а зачем майки запилили сервис хост, и гоняют охулион .dllок в одном процессе?
                                                    Ответить
                                            • а что там за коньтекст?

                                              thesis это вроде тема дипломной работы по-буржуйски
                                              Ответить
                                              • Совершенно верно.

                                                контекст такой

                                                Many design ideas for the language came from Craig's Master's thesis in computer science at the University of Toronto.
                                                Ответить
                                                • охуенно, когда из дипломной работы вырастает ЯП, про который вообще левые питухи пиздят через тридцать лет на сайте, который ориентирован на другую половину Земли
                                                  Ответить
                                                    • Качан И.Н. e-mail kinz@peterlink.ru

                                                      единственный человек в России (ну кроме меня) который знает про Эйфорию.

                                                      Если честно, что про Петерлинк я последний раз слышал 17 лет назад.

                                                      >Состояние на ноябрь 2002 года
                                                      понятно

                                                      http://pl-euphoria.narod.ru/peter/kinz/2002/index.html
                                                      Ответить
                                                      • Давай поймем, что есть у нашего героя

                                                        Windows XP, Opera, антивирус (зонтик?) проводной интернет или дайлап (экраничики), само собой far, windirtree, msn messenger, gimp, все существующие в то время браузеры (зачем?!), и весьма мелкий экран
                                                        Ответить
                                                        • иконка с чёрно-белым квадратом слева от справки вроде знакома, но не могу вспомнить, что это
                                                          Ответить
                                                          • Иканус знает наверняка

                                                            ну или вырежи ее гимпом, да поищи
                                                            Ответить
                                                            • ты переоцениваешь мою заинтересованность

                                                              тем более, когда действительно есть Инканус
                                                              Ответить
                                                            • «Инканус» не помнит иконок многих программ, потому что он их запускает через «Win+R» или через «FAR».
                                                              Ответить
                                                              • Фуууууу. Ты фароблядь? У тебя синий фон там? Глаза не сосёт?
                                                                Ответить
                                                                  • Если все меняют на чёрный, то почему он не по дефолту такой?
                                                                    Ответить
                                                                      • Edit.com синий, как и «Кубейсик». Чёрным был «GW-BASIC», но его, наверное, уже никто не помнит.
                                                                        Ответить
                                                                        • дададад, точно, у него верхушка черная.
                                                                          Я помню, что он от турбовиженовых IDE цветом отличался.

                                                                          у gw-basic снизу вроде была панлька с инфой
                                                                          Ответить
                                                                          • Чёрный в «Кубарсике» и в «edit.com» хелп. Почему-то для хелпа выбрали другой набор цветов.
                                                                            Ответить
                                                                              • Как это? Сайт про программирование, мы и обсуждаем языки и средства разработки. Что не так?
                                                                                Ответить
                                                                                  • ничего себе заявление

                                                                                    А кто это решает, и что такое "современное средство разработки"? VSCode?
                                                                                    Ответить
                                                                                    • Если в 32-битный процесс влезает - значит не современное.
                                                                                      Ответить
                                                                                      • Не влезает же. Вообще ничего не знает про 32-х битные процессы. Выходит, современное?
                                                                                        Ответить
                                                                                        • я на комодоре играл только в какого-то перца, который ездил на велике и почту кидал: paperboy, чтоль
                                                                                          Ответить
                                                                                          • Я тебя могу уверить, что тридцать лет назад тоже была цензура

                                                                                            Можешь почитать про Probotector или как вообще Контру переименовывали, например
                                                                                            Ответить
                                                                                      • У C64 была интересная звуковуха:
                                                                                        https://ru.wikipedia.org/wiki/MOS_Technology_SID

                                                                                        Это не 8-битный ЦАП, как было у игровых приставок той эпохи, а аппаратный трёхканальный FM-синтезатор с фильтрами и с формирователем огибающей.
                                                                                        Ответить
                                                                                        • Это примерно когда IBM PC писиспикером менадр пищал?
                                                                                          Ответить
                                                                                          • Ага.

                                                                                            Для писюка SB вышел в 1989-м году, GUS — в 1992-м. А SID на C64 был уже в 1982-м.
                                                                                            Ответить
                                                                                            • еще были адлиб и дизни саунд систем

                                                                                              кто-то из них умел только PCM, кто-то только MIDI (уже не помню), но SB всех убил.

                                                                                              Как ща помню три переменных окружения: IO, DMA и IRQ
                                                                                              Ответить
                                                                                              • Переменная окружения была одна (BLASTER или типа того), но в её значении были три ключевых слова (что-то типа "IO=265 IRQ=5 DMA=7").
                                                                                                Ответить
                                                                                                • блядь, значит все таки напутал(((

                                                                                                  я чото писал даже него, помню, что он дочитывал буфер, и дергал меня за IRQ..
                                                                                                  Ответить
                                                                                                  • Вот, нашёл в файле C:\Windows\System32\AUTOEXEC.NT реальный пример:
                                                                                                    SET BLASTER=A220 I5 D1 P330 T3
                                                                                                    Ответить
                                                                                                    • 220 это для проца, который звук играл, а 330 это для Midi?

                                                                                                      IRQ и DMA понятно, что такое T надо гугльнуть
                                                                                                      Ответить
                                                                                                      • Начал гуглить. Нашёл параметр H — его нужно установить, если карточка использует два канала DMA (оказывается, и такое бывало).
                                                                                                        Ответить
                                                                                                      • Да, P — это порт MIDI (MPU-401), J — это порт джойстика, E — это порт миди для AWE32 (EMU8000).

                                                                                                        T — тип звуковой карты.
                                                                                                        Возможные значения:
                                                                                                        1 — Sound Blaster.
                                                                                                        2 — Sound Blaster Pro.
                                                                                                        3 — Sound Blaster 2.0.
                                                                                                        4 — Sound Blaster Pro (SB Pro 2.0).
                                                                                                        5 — MCA Sound Blaster.
                                                                                                        6 — Sound Blaster 16, Vibra 16 или AWE32.
                                                                                                        Ответить
                                                                                                        • MPU-401 это обычный старый миди, а AWE32 вроде болеекрутой был?

                                                                                                          >джойстик
                                                                                                          я тут недавно как раз приносил его чудесный API, где время между записью и чтением кодирует положение палочки)

                                                                                                          >тип
                                                                                                          ох, сколко же их было. У меня под паскаль был спец модуль натырен, который умеет играть .wav и .midi на разных картах, и имел свою утилиту для настройки даже
                                                                                                          Ответить
                                                                                                    • >C:\Windows\System32\AUTOEXEC.NT
                                                                                                      пиздец, и как тебе живется с тремя гигами памяти?
                                                                                                      Ответить
                                                                                                        • Эта песня - кочегара рок! Эта песня - кочегара рок!
                                                                                                          Эта песня - кочегара рок! Эта песня - кочегара рок!
                                                                                                          Эта песня - кочегара рок! Эта песня - кочегара рок!
                                                                                                          Эта песня - кочегара рок! Эта песня - кочегара рок!
                                                                                                          Эта песня - кочегара рок! Эта песня - кочегара рок!
                                                                                                          Эта песня - кочегара рок! Эта песня - кочегара рок!
                                                                                                          Ответить
                                                                                              • Adlib:
                                                                                                • в 1987-м году первая звуковая карта;
                                                                                                • в 1992-м году банкротство.

                                                                                                Недолго что-то они продержались.

                                                                                                В 1984-м году у «IBM» вышла машина «Junior»:
                                                                                                https://en.wikipedia.org/wiki/IBM_PCjr

                                                                                                Она умела выдавать трёхголосый меандр (без частотной модуляции), что было, конечно, лучше писиспикера (у него меандр был одноголосый), но хуже, чем SID и звуковые карты, появившиеся в конце 1980-х — начале 1990-х.

                                                                                                Погуглил «DSS» (он называется «дизни саунд соурс», а не «систем»), нашёл вот эту статью:
                                                                                                https://bellofuturo.livejournal.com/4760.html

                                                                                                Как я понял, это банальный ковокс. Аналогичную питушню можно было спаять самому на 16 резисторах и воткнуть в LPT-порт.

                                                                                                *****

                                                                                                Итого получается, что в 1980-х писюк мог порадовать только писиспикером, а на C64 уже был хоть какой-то синтезатор.
                                                                                                Ответить
                                                                                                • Про джуниора я читал в Журдена) Там было много нота бене типа "данный сервис есть только у JR (или наоборот -- нету у JR), так что всегда проверяйте тип машины, его по такому-то адресу записывает бивос"
                                                                                                  Ответить
                                          • Лолшто. В эрланге можно и нужно ловить исключения, если ты знаешь, что они вот тут возникнут, и знаешь что с ними делать. Let it crash про другое, это про случаи, когда после исключения ты не знаешь, что дальше делать с пользовательской сессией какой-нибудь, и проще на неё забить и начать с чистого листа.
                                            Ответить
                                            • так ведь речь про рантиайм исключения, которые возникнуть не должны

                                              одно дело поймать факт недоступности файла или невозможности прибайндить сокет к адресу

                                              и совсем другое поймать обращение к минус первому элементу массива, например
                                              Ответить
                                              • Вообще кстати error handling это отдельная сложная тема, которая почему-то в литературе не всегда освещена, и при обучении ей уделяют недостаточно внимания порой.

                                                В итоге многие молодые программисты в нормальный error handling не могут, и у них то весь код забит ненужными проверками и кетчами (которые часто просто давят ошибку) то наоборот -- программа падает от ошибки в пользовательских данных
                                                Ответить
                                            • Другое дело, когда, например, по протоколу базовая станция ожидает один ответ, а от разрядившейся китайской мобилки ей приходит другой, согласно let it crash базовая станция крашит процесс-сессию и говорит, мол, давай подключайся заново.
                                              Ответить
            • Ну питоний assert это же просто raise AssertionError, не? Никакой магии там вроде больше и нет.
              Ответить
              • AssertionError, не exception. Считается, что его лучше не ловить
                Ответить
  • Согласитесь, код на Python вообще нечитаем. Даже долбоёбская Ява в этом плане лучше.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8