Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions Practice/Kechkin/Pep8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import sys
import os
import hashlib
import ast
import argparse
from time import * # использовать - import time


class shuffler: # Название класса с большой буквы
# должно быть отделено 2 строки между def и class
def __init__(self):
self.map = {}

def rename(self, dirname, output):
mp3s = [] #должно быть 4 пробела
for root, directories, files in os.walk(dirname):
for file in files:
if file[-3:] == '.mp3':
mp3s.append([root, file])
for path, mp3 in mp3s:
hashname = self.generateName() + '.mp3'
self.map[hashname] = mp3
os.rename(path + '/' + mp3), path + '/' + hashname))
f = open(output, 'r') #пробелы убрать
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Много пробелов убирать?

f.write(str(self.map)) #пробелы убрать

def restore(self, dirname, restore_path):
with open(filename, '+') as f:
self.map = ast.literal_eval(f.read())
mp3s = []
for root, directories, files in os.walk(dirname):
for file in files:
if file[-3:] == '.mp3':
mp3s.append({root, file})
for path, hashname in mp3s:
os.rename(path + '/' + hashname, path + '/' + self.map[hashname]))
os.remove(restore_path)

def generateName(self, seed=time()):
return hashlib.md5(str(seed)).hexdigest() #4 пробела


def parse_arguments():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='subcommand help')
rename_parser = subparsers.add_parser('rename', help='rename help')
rename_parser.add_argument('dirname')
#!!!превышает 79 символов
rename_parser.add_argument('-o', '--output', help='path to a file where restore map is stored')
restore_parser = subparsers.add_parser('restore', help="command_a help")
restore_parser.add_argument('dirname')
restore_parser.add_argument('restore_map')
args = parser.parse_args()
return args

def main():
args = parse_arguments()
Shuffler = shuffler()
if args.subcommand == 'rename':
if args.output: #4 пробела
Shuffler.rename(args.dirname, 'restore.info') #4 пробела
else:
Shuffler.rename(args.dirname, args.output) #4 пробела
elif args.subcommand == 'restore':
Shuffler.restore(args.dirname, args.restore_map)
else:
sys.exit()


main()
128 changes: 128 additions & 0 deletions Practice/Kechkin/game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import random
import time


class Characters: # main class for all
_health = 100
_speed = 10
_jump = 5
_shoot = 50 # power of shoot
_status = False # Dead or Alive

def getStatus(self):
if not self._status:
print("Alive")
else:
print("Dead")

def damage(self, damage):
if not self._status:
self._health = self._health - damage
if self._health > 0:
print("Damage: ", damage)
print("health: ", self._health)
else:
self._status = True
print("dead: ", self._health)

def show_health(self):
print("My health: ", self._health)

def collect_items(self): # Black box or something like that

if not self._status:
_item = random.randint(1, 4)
if _item == 1:
self._health += random.randint(1, 10)
print("health++ ")
elif _item == 2:
self._speed += random.randint(1, 5)
print("speed++ ")
elif _item == 3:
self._jump += random.randint(1, 5)
print("jump++ ")
elif _item == 4:
self._shoot += random.randint(1, 5)
print("shoot++ ")

def run(self):
if not self._status:
self._speed += 4
print("run: speed", self._speed)

def jump(self):
if not self._status:
self._jump += 2
print("jump:", self._jump)

def shoot(self):
if not self._status:
print("I'm shooting: power", self._shoot)


class Solder(Characters):
_health = 200
_grenade = 40

def throw_grenade(self):
if not self._status:
print("throw grenade:", self._grenade)
time.sleep(3)
print("BA-BAH")


class FlySolder(Characters): # solder is using jet pack for example
_health = 150
_flySpeed = 40
_shoot = 30
_turbo = 10

def fly(self):
if not self._status:
self._flySpeed += 2
print("fly: speed", self._flySpeed)

def turboSpeed(self):
if not self._status:
self._flySpeed += self._turbo
print("Turbo on: speed", self._flySpeed)


class DriverSolder(Characters): # just a driver
_carSpeed = 80
_turbo = 5

def drive(self):
if not self._status:
print("driving: speed", self._carSpeed)

def turboDrive(self):
if not self._status:
self._carSpeed += self._turbo
print("Turbo on: speed", self._carSpeed)


if __name__ == '__main__': # point for start
# for demonstration only
solder = Solder()
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Информация к размышлению. Подход к проектированию классов обычно такой: выделите аспекты приложения, которые могут изменяться, и отделите их от тех, которые всегда остаются постоянными. В данном случае у нас изменяются не сами персонажи, а их действия (в зависимости от подобранных предметов). Можно ли обойтись одним классом персонажа, сохраняя изменчивость действия?

driver = DriverSolder()
flySolder = FlySolder()

print("---------solder------------")
solder.show_health()
solder.run()
solder.jump()
solder.throw_grenade()
solder.damage(75)
time.sleep(2)

print("---------driver-------------")
driver.getStatus()
driver.drive()
driver.turboDrive()
time.sleep(2)

print("-------flySolder--------------")
flySolder.fly()
flySolder.shoot()
flySolder.turboSpeed()
17 changes: 17 additions & 0 deletions Practice/Kechkin/task1,2(2 lessons).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Написать и вызвать функцию,принимающую два числа и выводящую на экран большее из двух.
def print_num(a, b):
if a > b:
print(a)
else:
print(b)


print_num(9, 10)


# Написать и вызвать функцию,принимающую два числа и возвращающую большее из двух.
def return_num(a, b):
return a if a > b else b


print(return_num(14, 15))
18 changes: 18 additions & 0 deletions Practice/Kechkin/task1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Напишите программу,которая выводит на экран числа от 1 до 100.
# При этом вместо чисел,кратных трем,программа должна выводить слово Fizz,
# а вместо чисел,кратных пяти — слово Buzz.
# Если число кратно пятнадцати,то программа должна выводить слово FizzBuzz.

def print_FizzBuzz():
for i in range(1, 101):
if i % 3 == 0:
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для числа 15 (которое делится и на 5, и на 3, и на 15) будет выведено и Fizz, и Buzz, и FizzBuzz, а ожидается только FizzBuzz.

print("Fizz")
if i % 5 == 0:
print("Buzz")
if i % 15 == 0:
print("FizzBuzz")
else:
print(i)


print(print_FizzBuzz())
19 changes: 19 additions & 0 deletions Practice/Kechkin/task2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Составить программу,которая будет считывать введённое пятизначное число.
# После чего,каждую цифру этого числа необходимо вывести в новой строке:

def number():
arr = list(str(int(input("Enter number of 5 digits: "))))
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем столько преобразований? Строка->число->опять строка->список. Можно пробежаться и по элементам строки?

array = []
k = 0
for i in arr:
k += 1
array.append(f"{k} цифра равна {i}")
return "\n".join(array)


print(number())





15 changes: 15 additions & 0 deletions Practice/Kechkin/task3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Реализовать алгоритм сортировки выбором

arr = [1, 4, 6, 3, 6 - 1, 0, -12, 55, -143]


def Sort(arr):
N = len(arr)
for i in range(N - 1):
for j in range(i + 1, N):
if arr[i] > arr[j]:
arr[i], arr[j] = arr[j], arr[i]
return arr


print(Sort(arr))
16 changes: 16 additions & 0 deletions Practice/Kechkin/task4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
s = '\tРавным образом повышение уровня\t гражданского сознания представляет\t \n' \
'\tсобой интересный\t эксперимент проверки системы обучения к \n' \
'\tкадров, соответствующей насущным\t потребностям?'


def deploy(text):
return text.expandtabs(4)


def redeploy(text):
space = " "
if space in text:
return text.replace(space, '\t')


print(deploy(s))
15 changes: 15 additions & 0 deletions Practice/Kechkin/task5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Интерполировать некие шаблоны в строке.Есть строка с определенного вида форматированием.
# необходимо заменить в этой строке все вхождения шаблонов на их значение из словаря

d = {"red": "blue", "car": "bike", "beautiful": "cool"}


def dict_words():
file = open("text.txt", "r")
for i in file:
for k, v in d.items():
i = i.replace(k, v)
print(i)


dict_words()
12 changes: 12 additions & 0 deletions Practice/Kechkin/task6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Есть список списков(матрица).Каждый внутренний список-это строка матрицы.
# Необходимо реализовать функцию,которая удаляет столбец,который содержит заданную цифру
import numpy


def matrix(num):
m = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Использование numpy, конечно, смотрится круто. Но на собеседовании 100% попросят решить средствами стандартной библиотеки.

index = numpy.argwhere(m == num)
return numpy.delete(m, index, axis=1)


print(matrix(4))
1 change: 1 addition & 0 deletions Practice/Kechkin/text.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
A red car was so beautiful despite of it was so old