@zlodiak

Нужно ли заранее объявлять переменную?

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

#!/usr/bin/env python3

def likes(names):
    names_length = len(names)

    if names_length == 0:
        result = 'no one likes this'
    elif names_length == 1:
        result = names[0] + ' likes this'
    elif names_length == 2:
        result = names[0] + ' and ' + names[1] + ' like this'
    elif names_length == 3:
        result = names[0] + ', ' + names[1] + ' and ' + names[2] + ' like this'
    else:
        result = names[0] + ', ' + names[1] + ' and ' + str(names_length - 2) + ' others like this'

    return result


res = likes([])
print(res)

res = likes(["Peter"])
print(res)

res = likes(['Jacob', 'Alex'])
print(res)

res = likes(['Max', 'John', 'Mark'])
print(res)

res = likes(['Alex', 'Jacob', 'Mark', 'Max'])
print(res)

res = likes(['Alex', 'Jacob', 'Mark', 'Max', 'sergey'])
print(res)

res = likes(['Alex', 'Jacob', 'Mark', 'Max', 'sergey', 'anton'])
print(res)


Он рабочий, но меня смущает, что я несколько раз в пределах блока объявил переменную result. Судя по тому, что ошибок в консоли не было, так делать можно. Но хороший ли это стиль?

В javascript в подобных случаях я сначала объявлял переменную в пределах блока так let result;, а потом уже изменял.

Подскажите пожалуйста как правильнее поступать в подобных ситуациях
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
ScriptKiddo
@ScriptKiddo
result в любом случае объявится в блоке else, поэтому - нет, не нужно.

Попробуйте вот так, с помощью срезов и format

result = '{} and {} likes this'.format(', '.join(names[:-1]), names[-1])


Вариант покороче, для Python > 3.6

result = f'{", ".join(names[:-1])} and {names[-1]} likes this'


Информация по срезам
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы