Кто знает Python

Аватара пользователя
Mad Hatter
⭐ Top 5 most interesting users
Reactions: 1548
Сообщения: 8109
Зарегистрирован: Пн июн 13, 2022 7:22 am

Re: Кто знает Python

Сообщение Mad Hatter »

Buddy писал(а): Пт июл 21, 2023 6:31 am Eсли использовать

Код: Выделить всё

test = open("test.txt", "wb")
без то нужно закрывать файл после чтения

Код: Выделить всё

test.close()
, а то утечка памяти на этот файл. Tак как файлы бывают разные. Я помню это в Жабе такое же вроде.
Да, with с файлом - стандартная фича питоновского кода
1 Изображение
Bobeg
Reactions: 1777
Сообщения: 12832
Зарегистрирован: Ср июн 15, 2022 4:01 am

Re: Кто знает Python

Сообщение Bobeg »

WebFunk писал(а): Пт июл 21, 2023 7:20 am Это называется не "код ревью", а "найдите проблемы в коде для проверки вас на вшивость". Код на ревью посылается после прохождения всех тестов, во время которых все явные баги будут вычищены. Так принято в компаниях, иначе это просто неуважение к коллегам.
Во. Мудро
Poet77
Reactions: 335
Сообщения: 864
Зарегистрирован: Вт июн 14, 2022 10:26 pm

Re: Кто знает Python

Сообщение Poet77 »

Bobeg писал(а): Пт июл 21, 2023 6:20 am Проблема с пунктами 1 и 5 состоит в том што они выдают полнейшее непонимание ревьюэром того чего он делает. Прям как чят гопота.
В комбинации пункты 5 и 7 вообще выглядят как испанский стыд.

В пункте 8 написан откровенный бред про все три упомянутые линии. .

Наконец в пункте 9 опять какоето невразумительное заявление про линию кода номер 5.

Выводы

Ривьюэр. Не надо творчества. Как люди написали так и копируй. Чтоб заниматься творчеством надо хоть чуть чуть понимать что происходит.

насчет #9 - line 5 - The script could be improved by handling user input more gracefully.

мне нужно указывать line number для всех проблем что я нашел, а input проишодит именно в line #5, разве нет ?

А что с #3 :

3. line 30 - Must be called main() instead of calling getBreeds() - все согласны с етим ?

ОК, ишодя из ваших коментов(надеюсь что вы знаете Питон ) - я оставлю так:

1. line 5 - remove "wb+" in - we don't need it
2. line 19 -The findBreed function is not defined before it is called in the main function.
3. line 30 - Must be called main() instead of calling getBreeds()
4. line 11 - The findBreed function does not return after finding a match, so it will always print "You do not have a known breed" even if the breed is found.
move return "list_of_breeds" to the end of getBreeds() function after line 13
5. line 13 - switch "return" to "print"
6. line 21 - The findBreed function could be simplified, in particular we can use a "set" instead of a "list" to store the breeds.
7. line 5 - The script could be improved by handling user input more gracefully.

Так нормально ?
Python_Code.jpg
Python_Code.jpg (96.35 КБ) 276 просмотров
Последний раз редактировалось Poet77 Пт июл 21, 2023 11:22 am, всего редактировалось 1 раз.
Аватара пользователя
Uzito
⭐ Top 5 most interesting users
Reactions: 1226
Сообщения: 5310
Зарегистрирован: Пт июн 24, 2022 1:35 pm

Re: Кто знает Python

Сообщение Uzito »

Poet77 писал(а): Пт июл 21, 2023 10:34 am Так нормально ?

6. Во-первых, нужно исправить ошибку форматирования на строке 25 и 26 - нужно добавить 1 tab на каждую чтобы else был на том же уровне что предыдущий if. После исправления останется проблема что на каждую не совпадающую породу из списка будет выдаваться сообщение. Поэтому менять метод проверки целиком.


Исправляютсь. Между строкой 24 и 25 поставить break, тогда сообщение об не найденой породе будет только если ничего не найдено и цикл не будет гоняться по всему списку после нахождения породы.
Последний раз редактировалось Uzito Пт июл 21, 2023 12:28 pm, всего редактировалось 1 раз.
alex_127
Reactions: 967
Сообщения: 4602
Зарегистрирован: Ср июн 15, 2022 9:44 am

Re: Кто знает Python

Сообщение alex_127 »

Poet77 писал(а): Пт июл 21, 2023 10:34 am
Bobeg писал(а): Пт июл 21, 2023 6:20 am Проблема с пунктами 1 и 5 состоит в том што они выдают полнейшее непонимание ревьюэром того чего он делает. Прям как чят гопота.
В комбинации пункты 5 и 7 вообще выглядят как испанский стыд.

В пункте 8 написан откровенный бред про все три упомянутые линии. .

Наконец в пункте 9 опять какоето невразумительное заявление про линию кода номер 5.

Выводы

Ривьюэр. Не надо творчества. Как люди написали так и копируй. Чтоб заниматься творчеством надо хоть чуть чуть понимать что происходит.

насчет #9 - line 5 - The script could be improved by handling user input more gracefully.

мне нужно указывать line number для всех проблем что я нашел, а input проишодит именно в line #5, разве нет ?

А что с #3 :

3. line 30 - Must be called main() instead of calling getBreeds() - все согласны с етим ?

ОК, ишодя из ваших коментов(надеюсь что вы знаете Питон ) - я оставлю так:

1. line 5 - remove "wb+" in - we don't need it
2. line 19 -The findBreed function is not defined before it is called in the main function.
3. line 30 - Must be called main() instead of calling getBreeds()
4. line 11 - The findBreed function does not return after finding a match, so it will always print "You do not have a known breed" even if the breed is found.
move return "list_of_breeds" to the end of getBreeds() function after line 13
5. line 13 - switch "return" to "print"
6. line 21 - The findBreed function could be simplified, in particular we can use a "set" instead of a "list" to store the breeds.
7. line 5 - The script could be improved by handling user input more gracefully.

Так нормально ?

Python_Code.jpg
1 - use proper access mode when opening file, not wb+
в этом мире мрачно все / как поэзия басё
alex_127
Reactions: 967
Сообщения: 4602
Зарегистрирован: Ср июн 15, 2022 9:44 am

Re: Кто знает Python

Сообщение alex_127 »

Uzito писал(а): Пт июл 21, 2023 10:46 am
Poet77 писал(а): Пт июл 21, 2023 10:34 am Так нормально ?
6. Во-первых, нужно исправить ошибку форматирования на строке 25 и 26 - нужно добавить 1 tab на каждую чтобы else был на том же уровне что предыдущий if. После исправления останется проблема что на каждую не совпадающую породу из списка будет выдаваться сообщение. Поэтому менять метод проверки целиком.
цикл фор в питоне (которого я не знаю) имеет синтах елсе :-)
в этом мире мрачно все / как поэзия басё
Bobeg
Reactions: 1777
Сообщения: 12832
Зарегистрирован: Ср июн 15, 2022 4:01 am

Re: Кто знает Python

Сообщение Bobeg »

Он над нами издеваеца!
Ну сумасшедший, шо возьмешь
Аватара пользователя
Uzito
⭐ Top 5 most interesting users
Reactions: 1226
Сообщения: 5310
Зарегистрирован: Пт июн 24, 2022 1:35 pm

Re: Кто знает Python

Сообщение Uzito »

alex_127 писал(а): Пт июл 21, 2023 12:19 pm цикл фор в питоне (которого я не знаю) имеет синтах елсе :-)
Век живи, век учись.

Ну тогда нужно добавить break чтобы не гнать по всему списку
caltrain
Reactions: 23
Сообщения: 125
Зарегистрирован: Чт авг 18, 2022 9:28 pm

Re: Кто знает Python

Сообщение caltrain »

Uzito писал(а): Пт июл 21, 2023 10:46 am
Poet77 писал(а): Пт июл 21, 2023 10:34 am Так нормально ?

6. Во-первых, нужно исправить ошибку форматирования на строке 25 и 26 - нужно добавить 1 tab на каждую чтобы else был на том же уровне что предыдущий if. После исправления останется проблема что на каждую не совпадающую породу из списка будет выдаваться сообщение. Поэтому менять метод проверки целиком.


Исправляютсь. Между строкой 24 и 25 поставить break, тогда сообщение об не найденой породе будет только если ничего не найдено и цикл не будет гоняться по всему списку после нахождения породы.
И вот вы попались с этим циклом.
Породы надо загрузить в set ,
Тогда вся проверка схлопывается до
return input in breed_set
O(1), это как раз выпускники колледжей могут помнить
Понимаете вероломство ?
Bobeg
Reactions: 1777
Сообщения: 12832
Зарегистрирован: Ср июн 15, 2022 4:01 am

Re: Кто знает Python

Сообщение Bobeg »

caltrain писал(а): Пт июл 21, 2023 1:26 pm
Uzito писал(а): Пт июл 21, 2023 10:46 am

6. Во-первых, нужно исправить ошибку форматирования на строке 25 и 26 - нужно добавить 1 tab на каждую чтобы else был на том же уровне что предыдущий if. После исправления останется проблема что на каждую не совпадающую породу из списка будет выдаваться сообщение. Поэтому менять метод проверки целиком.


Исправляютсь. Между строкой 24 и 25 поставить break, тогда сообщение об не найденой породе будет только если ничего не найдено и цикл не будет гоняться по всему списку после нахождения породы.
И вот вы попались с этим циклом.
Породы надо загрузить в set ,
Тогда вся проверка схлопывается до
return input in breed_set
O(1), это как раз выпускники колледжей могут помнить
Понимаете вероломство ?
List тоже подлерживает in
Не обязательно грузить в лист штоб сработало.
Аватара пользователя
Uzito
⭐ Top 5 most interesting users
Reactions: 1226
Сообщения: 5310
Зарегистрирован: Пт июн 24, 2022 1:35 pm

Re: Кто знает Python

Сообщение Uzito »

caltrain писал(а): Пт июл 21, 2023 1:26 pm Понимаете вероломство ?
О замене цикла мы сказали две страницы назад.

Если мы этот скрипт переписывать начнём, то там вообще в пять строчек все сделать можно.
alex_127
Reactions: 967
Сообщения: 4602
Зарегистрирован: Ср июн 15, 2022 9:44 am

Re: Кто знает Python

Сообщение alex_127 »

caltrain писал(а): Пт июл 21, 2023 1:26 pm
Uzito писал(а): Пт июл 21, 2023 10:46 am

6. Во-первых, нужно исправить ошибку форматирования на строке 25 и 26 - нужно добавить 1 tab на каждую чтобы else был на том же уровне что предыдущий if. После исправления останется проблема что на каждую не совпадающую породу из списка будет выдаваться сообщение. Поэтому менять метод проверки целиком.


Исправляютсь. Между строкой 24 и 25 поставить break, тогда сообщение об не найденой породе будет только если ничего не найдено и цикл не будет гоняться по всему списку после нахождения породы.
И вот вы попались с этим циклом.
Породы надо загрузить в set ,
Тогда вся проверка схлопывается до
return input in breed_set
O(1), это как раз выпускники колледжей могут помнить
Понимаете вероломство ?
https://wiki.python.org/moin/TimeComplexity
set worst case complexity is o(n)
so you got n^2 worst case!
в этом мире мрачно все / как поэзия басё
Poet77
Reactions: 335
Сообщения: 864
Зарегистрирован: Вт июн 14, 2022 10:26 pm

Re: Кто знает Python

Сообщение Poet77 »

Uzito писал(а): Пт июл 21, 2023 3:15 pm
caltrain писал(а): Пт июл 21, 2023 1:26 pm Понимаете вероломство ?
О замене цикла мы сказали две страницы назад.

Если мы этот скрипт переписывать начнём, то там вообще в пять строчек все сделать можно.
Так может напишите 5 строчек ?
Вот что оно должно делать :

The following small python program (see image) is designed to ask the user which breed of cat
they have (if any). The results are compared to the list of breeds held within breeds.txt (the file
has the format breedname,breedname2,breedname3...,...).
Вложения
Python_Code.jpg
Python_Code.jpg (96.35 КБ) 227 просмотров
Аватара пользователя
Uzito
⭐ Top 5 most interesting users
Reactions: 1226
Сообщения: 5310
Зарегистрирован: Пт июн 24, 2022 1:35 pm

Re: Кто знает Python

Сообщение Uzito »

Poet77 писал(а): Пт июл 21, 2023 3:39 pm Так может напишите 5 строчек ?
Ну если совсем минимизировать и оставить только суть проблемы

Код: Выделить всё

try:
    with open("breeds.txt") as f:
        breeds = set(f.read().split(","))
except:
    print("Error loading list of breeds")
    breeds = set()
print("What breed of cat do you have:")
print("You have a known breed" if input() in breeds else "You do not have a known breed")
1 Изображение
caltrain
Reactions: 23
Сообщения: 125
Зарегистрирован: Чт авг 18, 2022 9:28 pm

Re: Кто знает Python

Сообщение caltrain »

Poet77 писал(а): Пт июл 21, 2023 3:39 pm
Так может напишите 5 строчек ?
Вот что оно должно делать :

The following small python program (see image) is designed to ask the user which breed of cat
they have (if any). The results are compared to the list of breeds held within breeds.txt (the file
has the format breedname,breedname2,breedname3...,...).

Код: Выделить всё

import csv


def findBreed(breed: str) -> str:
    file = "breeds.txt"
    try:
        with open(file) as f: 
            for x in next(csv.reader(f)):
                if x == breed:
                    return f"found breed {breed}"
            return f"NOT found breed {breed}"
    except IOError as e:
        return e.message


if __name__ == "__main__":
    breed = input("What breed of cat do you have? ")
    print(findBreed(breed))
в принципе нужен какой-то красивый токенайзер/генератор, потому что это все скрытые формы загрузить в память и сделать split в массив
kyk
Reactions: 458
Сообщения: 6195
Зарегистрирован: Ср июн 15, 2022 6:54 pm

Re: Кто знает Python

Сообщение kyk »

alex_127 писал(а): Пт июл 21, 2023 3:32 pm https://wiki.python.org/moin/TimeComplexity
что значит "Amortized Worst Case" ? чем отличается от "Worst Case" ?
caltrain
Reactions: 23
Сообщения: 125
Зарегистрирован: Чт авг 18, 2022 9:28 pm

Re: Кто знает Python

Сообщение caltrain »

kyk писал(а): Пт июл 21, 2023 6:54 pm
alex_127 писал(а): Пт июл 21, 2023 3:32 pm https://wiki.python.org/moin/TimeComplexity
что значит "Amortized Worst Case" ? чем отличается от "Worst Case" ?
А для этого нужна последовательность. Так, каждый день, вы запускаете эту программу с вопросом "кого бы ещё приготовить?"
alex_127
Reactions: 967
Сообщения: 4602
Зарегистрирован: Ср июн 15, 2022 9:44 am

Re: Кто знает Python

Сообщение alex_127 »

kyk писал(а): Пт июл 21, 2023 6:54 pm
alex_127 писал(а): Пт июл 21, 2023 3:32 pm https://wiki.python.org/moin/TimeComplexity
что значит "Amortized Worst Case" ? чем отличается от "Worst Case" ?
Там же ссылка есть - прямо имя колонки и есть ссылка.
https://en.wikipedia.org/wiki/Amortized_analysis
в этом мире мрачно все / как поэзия басё
caltrain
Reactions: 23
Сообщения: 125
Зарегистрирован: Чт авг 18, 2022 9:28 pm

Re: Кто знает Python

Сообщение caltrain »

alex_127 писал(а): Пт июл 21, 2023 3:32 pm
caltrain писал(а): Пт июл 21, 2023 1:26 pm
И вот вы попались с этим циклом.
Породы надо загрузить в set ,
Тогда вся проверка схлопывается до
return input in breed_set
O(1), это как раз выпускники колледжей могут помнить
Понимаете вероломство ?
https://wiki.python.org/moin/TimeComplexity
set worst case complexity is o(n)
so you got n^2 worst case!
n^2 - это вы сгоряча?
смотрите по ссылке именно set
и там worst c case О(n), но поскольку данные human , то для большого массива не будет corner-case
при строительстве set данные будут равномерно раскидываться
ну, все поиски будут уже О(1)
питоновский set, да как и все остальные современные, вполне нормально написан https://stackoverflow.com/questions/394 ... mplemented
и ещё там комментариях обратите внимание, что "since Python sets use a hash table that resizes."
alex_127
Reactions: 967
Сообщения: 4602
Зарегистрирован: Ср июн 15, 2022 9:44 am

Re: Кто знает Python

Сообщение alex_127 »

caltrain писал(а): Пт июл 21, 2023 8:49 pm
alex_127 писал(а): Пт июл 21, 2023 3:32 pm

https://wiki.python.org/moin/TimeComplexity
set worst case complexity is o(n)
so you got n^2 worst case!
n^2 - это вы сгоряча?
смотрите по ссылке именно set
и там worst c case О(n), но поскольку данные human , то для большого массива не будет corner-case
при строительстве set данные будут равномерно раскидываться
ну, все поиски будут уже О(1)
питоновский set, да как и все остальные современные, вполне нормально написан https://stackoverflow.com/questions/394 ... mplemented
и ещё там комментариях обратите внимание, что "since Python sets use a hash table that resizes."
ну тут одного товарища зовут X Æ A-Xii
так что не вижу проблемы если имена бреедов что-то вроде слкдйфлксфглкещфгн
а вы делаете предположения что там за бриды.
в этом мире мрачно все / как поэзия басё
Ответить