Don Python [DATA SCIENCE]
71 subscribers
6 photos
1 file
19 links
Путь python разработчика после 30. Знания, обсуждения, книги, rock & roll
Download Telegram
Channel name was changed to «Don Python»
Если в условии нам нужно поймать промежуток от N до M значения, вместо размашистого:
if credit_rating > 120 and credit_rating <= 60:

можно написать:
if 60 <= credit_rating < 120:
Если вы работаете в PyCharm, то по неопытности можете столкнуться с таким предупреждением:

Multi-step list initialization can be replaced with a list literal


Дословный перевод выглядит так:

Многоступенчатая инициализация списка может быть заменена литералом списка


Проще (но длиннее) говоря, вы добавляете что то в список сразу после его инициализации, хотя можно сразу создать список не используя дополнительных элементов.

Рассмотрим два примера.

Пример попроще:

food = ['pizza', 'hamburger', 'hotdog', 'spaghetti']
food.append('ice cream')


В этом случае можно 'ice cream' сразу объявить в списке:

food = ['pizza', 'hamburger', 'hotdog', 'spaghetti', 'ice cream']


Либо если вы ранее как то изменяли список, то метод append() будет оправдан:

food = ['pizza', 'hamburger', 'hotdog', 'spaghetti']
food.remove('hotdog')
food.append('ice cream')


Пример посложнее:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for i in range(5):
cache = [x[0], x[1], x[2]]
cache.append(0 if sum(cache) == 0 else 1)


Здесь можно не сразу догадаться как улучшить код, особенно на ранних этапах изучения. Например мы не сможем обратиться к cashe внутри списка. Но если немного углубиться в синтаксис, то мы узнаем что [x[0], x[1], x[2]] это тоже что и x[:3]. Следуя этому правилу, можно сократить код на одну строку:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for i in range(5):
cache = x[:3] + [0 if sum(x[:3]) == 0 else 1]


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

Предположим что в файле main.py есть такая функция:

def test():
print('I am a function!')


Мы хотим импортировать ее в файле hello.py из модуля 00_numbers:

from 00_numbers.main import test


Получаем ошибку:

SyntaxError: invalid decimal literal


Для решения проблемы нам нужно воспользоваться стандартной библиотекой:

import importlib
main = importlib.import_module('00_numbers.main')

main.test() # output: I am a function!


Good coding 👨🏻‍💻
🔍 Поиск среднего значения

Давайте представим, что у нас есть три случайных числа и нам нужно вывести то число, которое больше одного, но меньше второго — n1 < n2 < n3.

Можно это сделать с помощью условий:

v1 = int(input())
v2 = int(input())
v3 = int(input())

if (v2 < v1 < v3) or (v2 > v1 > v3):
print(v1)
elif (v1 < v2 < v3) or (v1 > v2 > v3):
print(v2)
else:
print(v3)


А можно упростить себе жизнь:

weights = sorted([v1, v2, v3])
print(weights[1])


Good coding 👨🏻‍💻

#sorted #list
🎵 Музыкальная задачка

Задача о которой идет речь тут.

Есть у нас такой код:

a_minor_count = 0 
for tone in accented_tones:
if tone in a_minor_main_tones:
a_minor_count += 1


А вот это оказывается по смыслу такой же код:

a_minor_count = sum(1 for tone in accented_tones if tone in a_minor_main_tones)


Всё было понятно, кроме того, где хранится и как суммируется единичка с другой единичкой. А получается, что каждая итерация, которая возвращает единицу, по сути генерирует аргумент функции sum(). То есть если цикл вернул 4 единицы, то это эквивалентно записи sum(1, 1, 1, 1).

Good coding 👨🏻‍💻

#for #sum