1. Python / Говнокод #28423

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    #!/usr/bin/env python3
    # -*- coding: UTF8 -*-
    from datetime import date
    from os import environ, mkdir, system
    from os.path import dirname, exists, join as path_join
    from time import time
    
    
    def check_verbose():
        return environ.get("DEBUG") in ("true", "True", "TRUE", True, "yes", "Yes", "YES")
    
    
    class Timer:
        def __init__(self):
            """
            Объект добавляет в начале текста временные метки
            """
            self.start_epoch = self.last_call = time()
    
        @staticmethod
        def __fully_scope(timer: int or str) -> str:
            """
            Преобразует однозначные значения в двузначные.
            :param timer: Время
            :return: Двузначное значение
            """
            if len(str(timer)) == 2:
                return str(timer)
            elif len(str(timer)) == 1:
                return "0" + str(timer)
            elif len(str(timer)) <= 0:
                return "00"
            elif len(str(timer)) >= 2:
                return str(timer)[:2]
    
        def __formatter(self, timestep: float) -> str:
            """
            Форматирует время
                :return: время hh:mm:ss
            """
            _hours = int(timestep // 3600), int(timestep % 3600)
            _minute = int(_hours[1] // 60), int(_hours[1] % 60)
    
            _current_epoch = f"{self.__fully_scope(_minute[0])}:{self.__fully_scope(_minute[1])}"
            if _hours[0] > 0:
                _current_epoch = f"{_hours[0]}:" + _current_epoch
            return _current_epoch
    
        def __call__(self, fix_call: bool = True) -> str:
            """
            Считает время с начала сценария + с последнего шага
                :return: время hh:mm:ss(+hh:mm:ss)
            """
            current_epoch = self.__formatter(time() - self.start_epoch)
            timedelta_epoch = self.__formatter(time() - self.last_call)
            if fix_call:
                self.last_call = time()
    
            return f"{current_epoch}(+{timedelta_epoch})"
    
        def __bool__(self):
            return True
    
    
    class Logger:
        def __init__(self, name: str):
            self.start_time = time()
            self.name = name.upper()
            self.timer = Timer()
            self.log_file = path_join(environ["RESULT_DIR"], name, f"{name}_{date.today().isoformat()}.log")
    
        def check_file(self):
            if not exists(self.log_file):
                if not exists(dirname(self.log_file)):
                    mkdir(dirname(self.log_file))
                system(f"echo {date.today().isoformat()}> {self.log_file}")
    
        def save_log(self, msg: str):
            self.check_file()
            with open(self.log_file, "a+") as _log_file:
                _log_file.write(msg + "\n")
    
        def massage(self, msg: str):
            print(f"{self.timer()}::{self.name}::{msg}")
            self.check_file()
            self.save_log(f"{self.timer()}::{self.name}::{msg}")
    
        def multi_msg(self, level: str, msg: any):
            if isinstance(msg, (str, int, float, bool)):
                self.massage(f"{level.upper()}::{msg}")
            elif isinstance(msg, (tuple, list, set)):
                for _msg in msg:
                    self.multi_msg(level, _msg)
            elif isinstance(msg, dict):
                for _msg_key in msg:

    Ну собственно самописный логгер, потому что "библиатечный логгер переусложнен НИНАДА!"

    dicklover, 19 Октября 2022

    Комментарии (50)
  2. Python / Говнокод #28422

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    words = ['Broom', 'Being', 'Boring', 'Breeding', 'Dreaming', 'Doing', 'Dancing', 'Drinking',
         'Freezing', 'Falling', 'Flooding', 'Fearing', 'Saying', 'Sleeping', 'Standing',
         'Screaming', 'Running', 'Reading', 'Rolling', 'Rushing', 'Twerking', 'Telling']
    
    def make_rows(row_size: int) -> list:
        row_size = abs(int(row_size)); index = 0; amount = len(words)
        # Найти кол-во групп / Calculate the amount of sublists
        if row_size>amount: row_size=amount
        if row_size > 0:
            subs = (amount // row_size) + 1 if amount % row_size > 0 else amount // row_size
            print(f'Слов: {len(words)} | | Ячеек: {subs}\n')
            # Создать найденное кол-во групп / Create the found amount of sublists
            rows = [[] for i in range(subs)]
            for x in range(amount):
                rows[index].append(words[x])
                if len(rows[index]) == row_size: index += 1
            return rows
        else: return words
            
    print(make_rows(2))

    rockkley94, 19 Октября 2022

    Комментарии (19)
  3. Python / Говнокод #28403

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    class FileCheckError(Exception):
    
        def __init__(self, check, file):
            self.check = check
            self.file = file
            self.exceptions = ['не является файлом',
                               'не является .wav файлом',
                               'не находится в списке требуемых сэмплов',]
    
        def __str__(self):
            return f'{self.file} {self.exceptions[self.check]}'
    
    
    def validate_pack(pack) -> list:
        """
        Checks for invalid files in a pack folder
        Makes a list of invalid files if found any or
        makes a list of accepted samples
        """
        accepted_samples = []
        found_errors = []
    
        for sample in listdir(pack):
            checks = [isfile(join(pack, sample)),
                      fnmatch(sample, '*.wav'),
                      Path(pack / sample).stem in required_samples, ]
            try:
                for check in range(len(checks)):
                    if not checks[check]:
                        raise FileCheckError(check=check, file=sample)
            except FileCheckError as E:
                found_errors.append(str(E))
                continue
    
            accepted_samples.append(sample)
    
        if len(found_errors) != 0:
            return found_errors
        else:
            return accepted_samples
    
    result = validate_pack(Path('drumpacks/rock'))
    print(result, sep='\n')

    rockkley94, 07 Октября 2022

    Комментарии (8)
  4. Python / Говнокод #28398

    −4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    a = float(input())
    b = float(input())
    
    operation = input()
    if operation == '+':
        print(a + b)
    elif operation == '-':
        print(a-b)
    elif operation == '*':
        print(a*b)
    elif operation == '/':
        print (a /b)
    elif operation == 'mod':
        print(a%b)
         if b == 0:
            print ("Деление на 0!")
    elif operation == 'div':
        print(a//b)
    elif operation == 'pow':
        print(a**b)

    Шикарный калькулятор

    rootOtotot, 05 Октября 2022

    Комментарии (2)
  5. Python / Говнокод #28367

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    >>> import math
    >>> n = math.factorial(1559)
    >>> n
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: Exceeds the limit (4300) for integer string conversion

    https://github.com/sympy/sympy/issues/24033

    Какой багфикс )))

    3_dar, 12 Сентября 2022

    Комментарии (12)
  6. Python / Говнокод #28360

    0

    1. 1
    2. 2
    3. 3
    def decode_flag(event_states: str) -> bool:
        flag = 1 if int(event_states, 16) & 10_000_000_000_000_000 else 0
        return bool(flag)

    Кусок из реального коммерческого проекта
    Есть стринга из 8 символов - флагов (0 или 1), но нас интересует только 4 символ в ней

    lpjakewolfskin, 08 Сентября 2022

    Комментарии (12)
  7. Python / Говнокод #28351

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    from datetime import datetime, date, time, timedelta
    
    date= datetime.now().date()
    e = datetime.now().date()-timedelta(days=1)
    ee = date
    delta = e-ee
    for i in range(0, delta.days+1):
        dfa = ee+timedelta(days=i)
        dfa = dfa.strftime('%Y-%m-%d')
    
    print(dfa)

    Кусок кода с реального промышленного решения. Попросили глянуть почему не работает...лол

    Sasha324, 02 Сентября 2022

    Комментарии (14)
  8. Python / Говнокод #28279

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    '''
    Main file of bot
    Главный фаил бота
    '''
    from discord.ext import commands
    
    import wotb_api
    import settings
    import messages as m
    from messages_gen import pars
    from settings import bot_settings
    
    
    class App():
        '''
        Main class of bot
        Главный класс бота
        '''
        def __init__(self):
            self.pars = pars()
            self.msg = m.msg()
            self.api = wotb_api.API()
            self.bot = commands.Bot(command_prefix=
                                    bot_settings['command_prefix'])
            self.__token__ = settings.bot_settings['TOKEN']
    
        def error_handler(self,data):
            '''
            Сопостовляем полученную ошибку со словарём
            и возвращаем True если данные совпадают
            со словарём ошибок.
            '''
            for i in self.api.error_list:
                if data == i:
                    return True
            return False
    
        def main(self):
            '''
            Здесь описанна логика бота, и его взаимодействие
            с другими модулями
            '''
            @self.bot.command()
            async def stats(ctx):
                command = ctx.message.content
                command = command.split(' ')
                print(f'Запрос: {command}')
    
                if len(command) == 2:
                    player_data = self.api.get_player_stats(command[1])
                    if self.error_handler(player_data):
                        await ctx.send(embed = self.
                                       msg.return_error_emb(player_data))
                    else:
                        embed = self.pars.get_data(player_data,
                                                   self.api.last_id)
                        await ctx.send(embed = embed)
    
                elif len(command) == 3:
                    player_data = self.api.get_player_stats(command[1],
                                                            command[2])
                    if self.error_handler(player_data):
                        await ctx.send(embed = self.
                                       msg.return_error_emb(player_data))
                    else:
                        embed = self.pars.get_data(player_data,
                                                   self.api.last_id)
                        await ctx.send(embed = embed)
    
                elif len(command) > 3:
                    await ctx.send(embed = self.msg.return_error_emb('CFE'))
                else:
                    await ctx.send(embed = self.msg.return_error_emb('NN'))
    
            @self.bot.command()
            async def ver(ctx):
                await ctx.send(embed = self.msg.about_embed())
    
            @self.bot.command()
            async def server(ctx):
                command = ctx.message.content
                command = command.split(' ')
    
                if len(command) == 2:
                    if command[1].lower() == 'all':
                        s_status = ''
                        s_status = self.api.get_server_status('all')
                        if self.error_handler(s_status):
                            embed = ''
                            embed = self.msg.return_error_emb(s_status)
                            await ctx.send(embed = embed)
                        else:
                            embed = ''
                            embed = self.pars.server_status_all(s_status)
                            await ctx.send(embed = embed)

    Как вам код в плане читаемости. Pylint дал мне 9.78/10 балов (это не полный код)

    Non_type_object, 17 Июля 2022

    Комментарии (12)
  9. Python / Говнокод #28188

    −2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    try:
        self._api = caller(self.url)
    except ValueError as e:
        logging.error(f"Не удалось инициализировать класс API: ({str(e)})")
        raise ValueError(str(e))

    hvx, 24 Мая 2022

    Комментарии (38)
  10. Python / Говнокод #28164

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    import asyncio
    
    async def hello():
        return "hello"
    
    async def world():
        return "world"
    
    async def comma():
        return ","
    
    async def space():
        return " "
    
    async def excl():
        return "!"
    
    async def capitalize(coro):
        return (await coro).capitalize()
    
    async def main():
        print(''.join(await asyncio.gather(*[asyncio.create_task(task) for task in (capitalize(hello()), comma(), space(), capitalize(world()), excl())])))
    
    asyncio.run(main())

    Изучаем asyncio через говнокод

    valo94, 12 Мая 2022

    Комментарии (29)