Skip to content

homework lec.1#8

Open
SolReykan wants to merge 6 commits into
mainfrom
obugrova
Open

homework lec.1#8
SolReykan wants to merge 6 commits into
mainfrom
obugrova

Conversation

@SolReykan
Copy link
Copy Markdown
Collaborator

No description provided.

Copy link
Copy Markdown
Owner

@IlyaOrlov IlyaOrlov left a comment

Choose a reason for hiding this comment

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

Хорошо, но есть пара вопросов/замечаний.

for root, directories, files in os.walk(dirname):
for file in files:
if file[-3:] == '.mp3':
mp3s.append([root, file]) # лишний отступ
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.

В этой строке с отступами все в порядке. PyCharm может подсвечивать эту строку, как ошибочную из-за строки 15. Интерпретатор Python требует, чтоб все строки внутри блока выравнивались одинаковыми отступами, однако не указывает конкретный размер этих отступов. Строка 15 и строки 16-19 относятся к одному блоку, но имеют разное выравнивание. Это несоответствие и сбивает PyCharm с толку. Согласно рекомендациям PEP8, размер отступа - 4 пробела, поэтому строки 16-19 можно считать отформатированными корректно, а строку 15 - ошибочной.

f.write(str(self.map))

def restore(self, dirname, restore_path):
with open(filename, '+') as f: # лишние отступы
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.

Только в этой строке или во всем блоке 28-30?

Comment thread Practice/obugrova/lec2_ex.1,2.py Outdated
@@ -0,0 +1,14 @@
def biggest (a, b):
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.

Небольшие замечания по стилю:

  1. В строках 1, 3, 5, 6, 8 перед скобкой пробелы не нужны PEP8: Avoid extraneous whitespace in the following situations
  2. В строках 6 и 13 нужно отделить вызов функции от определения функции двумя строками PEP8: Surround top-level function and class definitions with two blank lines.
    В остальном все ОК.

Copy link
Copy Markdown
Owner

@IlyaOrlov IlyaOrlov left a comment

Choose a reason for hiding this comment

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

Замечательно! Особенно решение с палиндромом! Но есть небольшие замечания.

w = w.lower()

def palindrome(w):
if len(w) == 1 or len(w) == 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.

Можно чуть упростить: if len(w) < 2

@@ -0,0 +1,16 @@
w = input("Введите слово: ")
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.

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

else:
return 1

test = palindrome(w)
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.

Замечательная идея - реализовать функцию через рекурсию! Если вместо 0/1 возвращать True/False, то и проверку можно чуть упростить:

if palindrom(w):
    print("Это палиндром")
else:
    print("Введённое слово не является палиндромом")

Есть, правда пара нюансов:

  1. w[1:-1] - это копирование подсписка, что может оказаться достаточно затратной по времени операцией; лучше передавать тот же список (w) и два индекса, которые будут сравниваться (1 и -1, 2 и -2, и так пока первый не превысит len(w)/2).
  2. Лучше если lower() будет выполняться внутри функции, т.к. эта операция тоже относится к проверке на палиндром, а чтоб lower() не выполнялся на каждом рекурсивном вызове, можно сделать функцию-обертку:
def palindrome_ci(w):  # ci - case insensitive - регистронезависимый
    def palindrome(w):
        # здесь ваш код для рекурсивной проверки на палиндром
    
    return palinfrome(w.lower())

w = input("Введите слово: ")
if palindrome_ci(w):
    ....

speed
coordinate

def Move(self):
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.

Здесь и в стр.45: функции и методы без тела интерпретатор не пропустит. Надо добавить хотя бы pass.



class Shot:
direction # выстрел имеет направление
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.

Просто так объявлять поля класса бессмысленно. Надо им присвоить какие-то значения.

@@ -0,0 +1,45 @@
class Tank:
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.

Нужно еще создать экземпляр класса Tank (ниже) и написать примеры вызова его методов.

@@ -0,0 +1,4 @@
num = int(input("Введите пятизначное число: "))
for i in range(4, -1, -1):
n = (num % 10**(i + 1)) // 10**i
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.

Да, если работать c num, как с числом, то проще не получится. И с этой точки зрения решение корректное. НО мы же запросто можем привести число к строковому типу и работать с ним, как с последовательностью символов (тем более input сразу возвращает строку), тогда и никакие сложные вычисления не потребуются.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants