Как уменьшить количество выражений «если» - PullRequest
0 голосов
/ 09 мая 2020
def tribonacci(signature, n):
    f = 0
    if n == 0:
        return []
    if n == 1:
        return [signature[0]]
    if n == 2:
        return [signature[0], signature[1]]
    while len(signature) != n:
        i = signature[0 + f] + signature[1 + f] + signature[2 + f]
        signature.append(i)
        f += 1
    return signature

Это код Трибоначчи (то же самое с Фибоначчи, но с 3 числами) с codewars.com, я знаю, что он мог бы быть более красивым и элегантным, но я хочу знать, как уменьшить эту конкретную часть:

if n == 0:
    return []
if n == 1:
    return [signature[0]]
if n == 2:
    return [signature[0], signature[1]]

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Вы можете видеть в ваших операторах if, когда n == 0 return является пустым списком, для n == 1 возвращает один элемент в списке, а также для n == 2 возвращает два элемента в списке.

Для этого вы можете использовать один оператор if, как показано ниже:

if 0 <= n < 3:
   return list(signature[:n])

И вот ваш полный код для вашей проблемы.

def tribonacci(signature, n):
   #your code here
   f = 0
   if 0 <= n < 3:
      return list(signature[:n])
   while len(signature) != n:
      i = signature[0 + f] + signature[1 + f] + signature[2 + f]
      signature.append(i)
      f += 1
   return signature
0 голосов
/ 09 мая 2020

3 случая 0, 1, 2 могут быть сокращены до одного, потому что все возвращают список подписей до заданного n

if n < 3: # if 0 <= n < 3: can be used for satefy
    return signature[:n]
...