Найти - Пользователи
Полная версия: Избежать частых повторений одного и того же кода
Начало » Python для новичков » Избежать частых повторений одного и того же кода
1 2 3
py.user.next
Palrom
Убунту подойдёт последняя? Гугл говорит, что это лучшее решение как для новичков так и для профи.
Ubuntu - это просто распиаренная хрень. Поэтому подойдёт любая система. Смотри, чтобы оболочка была KDE, иначе будешь скован в возможностях тупыми однокнопочными интерфейсами. Для новичка подойдёт Ubuntu, Fedora, OpenSUSE, Mint и другие. Они всё равно все одинаковые. Не ставь админские системы типа Arch, Gentoo, CentOS и подобные, так как потратишь кучу времени, чтобы их настроить, а плюсов никаких.

Palrom
может знаете где можно поглазеть на образцовый код?
Код Git'а красивый, но его писал японец. Обычно все коды уродливые, оптимизированные и на чтение не расчитаны. А чтобы чисто на питоне красивый код смотреть, бери книжки по питону, там примеры приводятся.

Palrom
достаточно открыть и почитать любую встроенную библиотеку
Они все уродливо написаны, потому что оптимизированы.
xam1816
Palrom
Убунту подойдёт последняя?
я на ней и остановился, поставил на отдельный ssd.Поначалу будет казаться что все неудобно и непонятно, но все моменты есть в сети, читаешь, изучаешь и со временем понимаешь что все это делается, настраивается, меняется.Потом понимаешь,что на линуксе как-то все стабильнее работает и не грузит систему
m0nte-cr1st0
Можно для main не сделать словарь с функциями под каждый блок. Ну или паттерн Стратегия?
Palrom
py.user.next
Они всё равно все одинаковые.
Ну чтоб не мудрить накатил Kubuntu. Говорят та же Ubuntu, но со встроенной KDE. Пишу уже с неё.
py.user.next
чтобы чисто на питоне красивый код смотреть, бери книжки по питону
О, книжка книжке рознь. Качнул тут “Грокаем алгоритмы”, код в примерах там заявлен как Пайтон, вроде основную инфу-то автор разжевал, но код - лютый треш с опечатками и ошибками. Причём питоновский код там перемежается с псевдокодом а иногда вообще одно в другом попадается, полагаю ошибки сканирования. Приходилось читать и параллельно гуглить всё время.
xam1816
Поначалу будет казаться что все неудобно и непонятно
Одну только память разметить при установке, как бомбу разминировать, особенно с виндой по соседству) За это не люблю android. Но в целом отторжения не вызывает, не удобно что-то но не смертельно. Привыкну.
m0nte-cr1st0
паттерн Стратегия
Воу воу, полегче Я ещё не готов даже мыслить такими понятиями, не то что в коде воплощать
У программы в целом неправильная структура, я это уже понял, переделаю, опубликую.

В общем, всем спасибо за советы, буду думать, изучать.
py.user.next
Palrom
Ну чтоб не мудрить накатил Kubuntu. Говорят та же Ubuntu, но со встроенной KDE.
Она не встроенная, а как бы добавленная. То есть Linux это такой конструктор. Windows - это монолит, а Linux - конструктор. Вот там есть ядро “Linux”, есть программы от “GNU”, поэтому называется это всё GNU/Linux - ядро + программы. И потом это всё разрослось и стали появляться программы не только от GNU. Поэтому в целом сейчас просто называем всё это Linux и всё.
Ubuntu - это система, сделанная из Debian. KDE - это графический блок, есть там ещё Xfce. Эти графические блоки тоже устроены как конструкторы, поэтому их можно настраивать, в них можно лепить что-то. В KDE и раньше можно было лепить много чего, чтобы удобно работать, а с появлением Plasma стало вообще возможно делать живые рабочие столы. Ну, типа виджет можно было сделать, который ходит в Интернет, собирает там какие-то данные и выводит их сразу на рабочий стол. Ну, типа можно сделать такую лампочку круглую, которая будет красной, жёлтой или зелёной и которая будет сообщать типа много у тебя сообщений пришло на сайт, средне, или мало. И вот она будет становиться то красной, то зелёной просто на рабочем столе. Причём эту лампочку ты рисуешь сам, хоть треугольную, хоть с глазами.

Palrom
О, книжка книжке рознь. Качнул тут “Грокаем алгоритмы”, код в примерах там заявлен как Пайтон, вроде основную инфу-то автор разжевал, но код - лютый треш с опечатками и ошибками.
В большинстве книг код почищен, это же книги. Но есть книги, которые пишут мальчики-студенты-американских-колледжей, короче, умственно отсталые. Никто им не запрещает книжки писать. Соответственно, надо иметь навыки дифференцирования материала. Если книжка тупая, это видно. Если книжка умная, это видно. Если книжка сделана, чтобы чисто на ней подзаработать, это видно. Поэтому нужно все эти книжки читать, листать, чтобы выработать у себя навыки вот этого различения. Потом уже, после книжек, когда ты будешь видеть разный уровень кодов, ты уже сможешь находить программы с открытым исходным кодом и читать их. Программы тоже друг другу рознь. Бывает какое-нибудь хорошее расширение для браузера, открываешь его код, а там говнокод от начала до конца, то есть работает оно на соплях. А бывает какая-то программа невзрачная, открываешь её код, а там всё идеально. Где-то даже что-то улавливаешь, перехватываешь, берёшь на вооружение. Я вот читал код программы Ассанжа (который сидит в английской тюрьме), он же программист. Так вот код у него говно сплошное, знаешь, хакерство ещё никого хорошим программистом не сделало (ломать не строить), но приём я у него подтянул один - он флажки с буквой f в начале делал. Где-то он тоже этому научился, не изобрёл же он это сам, но там, где учился он, не учился я, поэтому я к тем материалам доступа не имел, но через него дотянулся. Поэтому надо много кодов читать, даже если они говно полное. Там может быть что-то полезное.

Palrom
Приходилось читать и параллельно гуглить всё время.
Ты вот открой код YouTube'а или Google'а и посмотри, какие ебланы его делают. Вот мне сейчас надо сделать программу, которая выкачивает комментарии к видео на YouTube (их бывают тысячи и их сложно просматривать, так как они всё время подгружаются, а искать по ним вообще нельзя ничего), так нихера там не сделаешь сходу. Эти комментарии подгружаются там через три пизды колено. В итоге даже пришлось отложить, так как за три часа такую не напишешь, а времени сейчас нет. Просто индусов наняли за три копейки и те делают затычку на затычке, чтобы просто всё работало. А в Яндексе тупая нейронная сеть, всё время блокирует ящики. Я из-за этого вообще отказался от их сервисов, кроме электронной почты (что у них было изначально), потому что приходишь, а эта тупая хуета опять сломала ящик. Тебе дела делать надо, а у тебя ящик заблокирован по подозрению “мы думаем, вас взломали” или там “мы думаем, у вас не очень хорошая защита”. Им пишешь, подключается человек и разблокирует всё, через какое-то время опять эта тупая хуета блокирует всё. Вот так я потерял один раз их диск. Ты просто хочешь зайти на диск и взять свои файлы, которые там хранишь, а аккаунт заблокирован, при этом с диска ничего обратно выкачать нельзя из того, что ты туда складывал. Это вот всё потому, что какой-то дебил там что-то решил придумать своими мозгами тупыми. Как то было я им пишу “я отравляю сам себе письмо, разблокируйте мне мой ящик”, там блять баба какая-то на связи “а зачем вы отправляете самому себе письмо?”, да тебя ебёт что ли? ты типа умная, да? овца. Ну, конечно, не грубишь им, ведь дурость это не порок, любой может дураком родиться и у родителей алкашей в Саратове вырасти и потом выиграть счастливый билет и в Москву перебраться (ночью на автобусе с последним рюкзаком), светануть ебалом с хлопающими ресницами и устроиться куда-то там, чтобы просто сидеть и красотой своей радовать кого-то, но в такие моменты, конечно, думаешь о будущем и меняешь сервис по предоставлению услуг просто. Вот, например, в Google нет такого дебилизма, как же они со спамом борятся? неужели они ничего в спаме не понимают? Так что всё всему рознь. Всё всему рознь, но где-то что-то можно узнать, какую-то мелочь выхватить для себя.

Palrom
особенно с виндой по соседству
Некоторые ставят в виртуалку и потом типа “да это одно и то же ведь”. Это не одно и то же. У меня, наоборот, в Linux стоит виртуалка, а в виртуалке Windows. Так эту Windows в любой момент можно выключить, когда она там решила поиндексировать диск или повиснуть. С реальной же виндой, которая работает на компе, в которой виртуалка, в которой Linux, ты ничего не сделаешь. И процессор она жрёт, и память, и диск забивает своей хуетой не нужной никому, даже ей самой. Это всё тоже индусские последствия.

Palrom
У программы в целом неправильная структура, я это уже понял, переделаю, опубликую.
У тебя копипаст. Вот надо от него избавиться. Копипаст - плохой признак. И рано или поздно такой весёлый, добрый и хороший копипаст вылезет боком и превратится в невыкорчёвываемую хренотень по всей программе, из-за которой ничего не сделаешь и только программу можно будет целиком переписать.
xam1816
 from datetime import datetime
import random as rd
 
def get_user_answer():
    while True:
        try:
            return int(input())
        except:
            pass
 
def get_rand_addition():
    a, b = rd.choices(range(1, 10), k=2)
    return '+', a, b, a + b
 
def get_rand_subtraction():
    a, b = rd.choices(range(1, 10), k=2)
    return '-', a, b, a - b
 
def solve_exercise(count, exercise_type):
    num_right_answer = 0
    exercises = {'+': get_rand_addition,
                 '-': get_rand_subtraction}
    time_start = datetime.now()
    for _ in range(count):
        data = exercises[exercise_type]()
        print('{} {} {} = '.format(data[1], data[0], data[2]), end='')
        if get_user_answer() == data[3]:
            print('верно!')
            num_right_answer += 1
        else: print(f'неверно {data[3]}')
    time_end = datetime.now()
    return num_right_answer, time_end - time_start
 
def get_exercise_count():
    while True:
        try:
            n = int(input('сколько примеров решить?\n>>>'))
            if n > 0:
                return n
            else:
                print('минимум 1')
        except:
            print('должно быть целое число больше нуля')
 
def get_exercise_type():
    while True:
        s = input('выберите тип примеров: + | -\n>>>')
        if s in ['+', '-']:
            return s
        else:
            print('должно быть + или -')
 
def ask_continue():
    while True:
        s = input('решать еще раз? y|n\n>>>').lower()
        if s == 'y':
            return True
        elif s == 'n':
            return False
 
def main():
    print('калькуляция на время')
    run = True
    while run:
        count_ex = get_exercise_count()
        type_ex = get_exercise_type()
        num_right_answer, time = solve_exercise(count_ex, type_ex)
        print(f'правильных ответов {num_right_answer} из {count_ex}, время выполнения {time}')
        run = ask_continue()
    print('Goodbye')
 
if __name__ == '__main__':
    main()
Palrom
xam1816
Вот тут уже значительно более грамотная и лаконичная реализация, да. Чувствуется опыт. Спасибо. Что-то подобное я себе и представлял, только написать не успел. Есть пара огрехов, в частности get_user_answer() принимает любую абракадабру пока не удастся интовать ввод, хотелось бы чтоб как у меня: или цифры или если пустая строка, то “пропустить пример нельзя”, или ответ неверный. get_rand_subtraction() не отслеживает, меньше ли вычитаемое или нет, т.е. иногда ответ даёт минус а это уже в 5-х классах проходят вроде. Ну и нет / и *, но суть я понял, допилю всё уже сам, с вашего позволения
m0nte-cr1st0
Можно для main сделать словарь с функциями под каждый блок.
xam1816
  
exercises = {'+': get_rand_addition,
             '-': get_rand_subtraction}
Я так понимаю это оно и есть.
Palrom
py.user.next
И процессор она жрёт, и память, и диск забивает
Ну Microsoft в последнее время больше ломает, чем строит, увы. Даже базовые вещи, которые ещё с 98-ой прекрасно работали. Переключение раскладки клавиатуры стало бесячим и глючным в последних версиях 10-ки. И ничего с этим не сделать. Меню настроек раздвоилось, мало было панели управления, так зачем-то прикрутили ещё одно меню в стиле говно-метро, которое по большому счёту тупо дублирует все настройки из первой, но имеет и очень нелогично расположенные важные настройки.. Я и так уже в последнее время сижу только на LTSC да B, куда всякой ненужной требухи не пихают особо, но даже и она теперь перегружена и жрёт то диск то оперативу.. Переход на Линукс был вопросом времени, и оно видимо настало.
py.user.next
То есть Linux это такой конструктор.
Вот у меня вопрос, раз уж тема затронута. Можно как-то раз и навсегда разрешить superuser'а а не вбивать без конца через sudo и пароли вводить? А то меня вьетнамские флешбеки стали накрывать, я помню как я с самсунговскими и хуавеевскими планшетами и телефонами боролся..
xam1816
Palrom
Есть пара огрехов, в частности get_user_answer() принимает любую абракадабру пока не удастся интовать ввод,
да, тут смысл в том, что в функции get_user_answer() можешь менять условия как хочешь, только на выходе данные должны быть числом int, так же как и в get_rand_subtraction() внутри функции делай что хочешь, только верни данные в виде (знак, первое_число, второе_число, результат_операции), так как эти данные ждут от функции в коде как договоренность.

py.user.next
Palrom
Можно как-то раз и навсегда разрешить superuser'а а не вбивать без конца через sudo и пароли вводить?
Используй
sudo -s
Если же какой-то программе требуется sudo, то эту программу надо добавить в группу через chown, которой разрешены действия.
Например, чтобы писать в символьное устройство /dev/tty0 , программе достаточно быть в группе tty.
[guest@localhost ~]$ ls -l /dev/tty0
crw--w----. 1 root tty 4, 0 май 16 19:20 /dev/tty0
[guest@localhost ~]$
Если же тебе постоянно нужно в root'е находиться, значит ты делаешь что-то не то.
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