-
Notifications
You must be signed in to change notification settings - Fork 46
tasks from lessons 1,2,4 #272
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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') #пробелы убрать | ||
| 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() | ||
| 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() | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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() | ||
| 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)) |
| 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: | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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()) | ||
| 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: ")))) | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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()) | ||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
| 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)) |
| 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)) |
| 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() |
| 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]]) | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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)) | ||
| 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Много пробелов убирать?