Intervalo alfabético

Como você sabe, a função range() retorna um intervalo de números, mas não funciona com alfabetos. Neste desafio, tentamos preencher essa lacuna.

Escreva uma função alpha_range() que receba três argumentos: start, stop e step (cujo valor padrão é um). A função deve retornar uma lista de caracteres alfabéticos, do caractere inicial ao caractere final com base no valor de step.

A função deve seguir estas condições:

  • Se step for zero, maior ou igual a 26, ou menor ou igual a -26, retorne "step must be a non-zero value between -26 and 26, exclusive".

  • Tanto start quanto stop devem ter a mesma capitalização; caso contrário, retorne "both start and stop must share the same case".

Assim como a função range():

  • step não deve ser zero.

Ao contrário da função range():

  • a lista retornada deve ser inclusiva.
  • a ordem dos caracteres não afeta o resultado (ou seja, a saída de alpha_range("a", "f") é a mesma de alpha_range("f", "a"); veja os exemplos).

Exemplos

alpha_range("a", "f") ➞ ["a", "b", "c", "d", "e", "f"]

alpha_range("f", "a") ➞ ["a", "b", "c", "d", "e", "f"]

alpha_range("a", "f", -1) ➞ ["f", "e", "d", "c", "b", "a"]

alpha_range("f", "a", -1) ➞ ["f", "e", "d", "c", "b", "a"]

alpha_range("A", "F", -1) ➞ ["F", "E", "D", "C", "B", "A"]

alpha_range("A", "F", 0) ➞ "step must be a non-zero value between -26 and 26, exclusive"

alpha_range("A", "F", -26) ➞ "step must be a non-zero value between -26 and 26, exclusive"

alpha_range("a", "F", -1) ➞ "both start and stop must share the same case"

Observações

Todos os valores de start e stop nos testes são caracteres alfabéticos válidos.