Pythonic способ добавления «ly» в конец строки, если она заканчивается на «ing»? - PullRequest
1 голос
/ 21 марта 2010

Это мое первое усилие по выполнению упражнения. Должен сказать, мне нравится Python. : D

# D. verbing
# Given a string, if its length is at least 3,
# add 'ing' to its end.
# Unless it already ends in 'ing', in which case
# add 'ly' instead.
# If the string length is less than 3, leave it unchanged.
# Return the resulting string.
def verbing(s):
  if len(s) >= 3:
    if s[-3:] == "ing":
      s += "ly"
    else:
      s += "ing"
    return s
  else:
    return s 

  # +++your code here+++
  return

Как вы думаете, что я мог бы улучшить здесь?

Ответы [ 4 ]

6 голосов
/ 21 марта 2010
def verbing(s):
  if len(s) >= 3:
    if s.endswith("ing"):
      s += "ly"
    else:
      s += "ing"
  return s
1 голос
/ 21 марта 2010

Я бы использовал s.endswith("ing") в if, что также немного быстрее, потому что оно не создает новую строку для сравнения.

И во-вторых, я бы использовал строки документации для комментариев,Таким образом, вы можете увидеть свое описание, когда вы делаете help(yourmodule) или когда вы используете какой-либо инструмент autodoc, например Sphinx , для создания справочника, описывающего ваш API.Пример:

def verbings(s):
    """Given a string, if its length is at least 3, add 'ing' to its end.
    Unless it already ends in 'ing', in which case add 'ly' instead.
    If the string length is less than 3, leave it unchanged."""
    # rest of the function

В-третьих, изменение входных параметров часто считается плохой практикой.Вы можете сделать это для параметров dict или list, которые также могут выступать в качестве выходных параметров.Но строки являются только входными параметрами (поэтому у вас есть возврат).Конечно, источник, который вы написали, действителен, но часто сбивает с толку.Другие языки часто используют ключевое слово final или const, чтобы избежать этой путаницы, но Python этого не делает.Поэтому я бы порекомендовал вам использовать либо вторую переменную result = s + "ing" и затем сделать return result, либо написать return s + "ing".

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

1 голос
/ 21 марта 2010

Как насчет этого небольшого переписывания:

def verbing(s):
    if len(s) < 3:
        return s
    elif s.endswith('ing'):
        return s + 'ly'
    else:
        return s + 'ing'
0 голосов
/ 21 марта 2010

Довольно хорошо для начинающего! Да, я бы сказал, что это Pythonic способ делать вещи. Мне особенно нравится, как вы прокомментировали, что именно делает функция. Хорошая работа там.

Продолжайте работать с Python. У тебя все хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...