|
| 1 | +""" |
| 2 | +Crea una función que calcule el número de la columna de una hoja de Excel |
| 3 | + teniendo en cuenta su nombre. |
| 4 | +- Las columnas se designan por letras de la "A" a la "Z" de forma infinita. |
| 5 | +- Ejemplos: A = 1, Z = 26, AA = 27, CA = 79. |
| 6 | +""" |
| 7 | + |
| 8 | +def column_number(row: str) -> int: |
| 9 | + """ |
| 10 | + Convierte una etiqueta de columna de Excel a su número entero correspondiente. |
| 11 | +
|
| 12 | + Excel asigna letras a las columnas de forma secuencial con un sistema numérico |
| 13 | + posicional en base 26, donde: |
| 14 | + A = 1, B = 2, ..., Z = 26, |
| 15 | + AA = 27, AB = 28, ..., AZ = 52, |
| 16 | + BA = 53, y así sucesivamente. |
| 17 | +
|
| 18 | + Ejemplos: |
| 19 | + >>> column_number("A") |
| 20 | + 1 |
| 21 | + >>> column_number("Z") |
| 22 | + 26 |
| 23 | + >>> column_number("AA") |
| 24 | + 27 |
| 25 | + >>> column_number("CA") |
| 26 | + 79 |
| 27 | +
|
| 28 | + args: |
| 29 | + row (str): Cadena formada únicamente por letras (A-Z o a-z) que representa |
| 30 | + el nombre de la columna en Excel. |
| 31 | +
|
| 32 | + returns: |
| 33 | + int: El número de columna correspondiente. |
| 34 | +
|
| 35 | + raises: |
| 36 | + ValueError: Si la cadena está vacía. |
| 37 | + TypeError: Si la cadena contiene caracteres no alfabéticos. |
| 38 | +
|
| 39 | + """ |
| 40 | + if not row: |
| 41 | + raise ValueError("Error. El valor de entrada no puede estar vacio.") |
| 42 | + if not row.isalpha(): |
| 43 | + raise TypeError("Error. Solo se aceptan letras del abecedario.") |
| 44 | + |
| 45 | + row = row.upper() |
| 46 | + result = 0 |
| 47 | + |
| 48 | + for char in row: |
| 49 | + result = result * 26 + (ord(char) - ord('A') + 1) |
| 50 | + |
| 51 | + return result |
| 52 | + |
| 53 | + |
| 54 | +if __name__ == "__main__": |
| 55 | + print(column_number("A")) |
| 56 | + print(column_number("Z")) |
| 57 | + print(column_number("AA")) |
| 58 | + print(column_number("CA")) |
| 59 | + print(column_number("XFD")) |
| 60 | + print(column_number("ZZZZ")) |
0 commit comments