Напишите программу для поиска меток столбцов Excel по заданному количеству столбцов в Python.
Столбцы Microsoft Excel помечаются стилем A, B, C,., Z, AA, AB, AC,., AZ, BA, BB, . ЗЗ, ААА, ААВ. Скажем, столбец 1 будет помечен как A, столбец 2 будет помечен как B, а столбец 27 будет помечен как AA.
Проблема: по количеству столбцов найдите соответствующую метку столбца в Excel.
Например:
Вход Выход 26 Z 51 AY 52 AZ 80 CB 676 YZ 702 ZZ 705 AAC
В этой статье TipsMake.com вместе с вами научится писать программу для поиска меток столбцов Excel по заданному количеству столбцов в Python.
Способ 1:
Предположим, у нас есть число n, допустим, n = 28. Нам нужно найти метку столбца в Excel, соответствующую n. Нам нужно рассмотреть остаток операции n, деленный на 26.
Если n делится на 26, а остаток равен 0 (это означает, что n равно 26, 52,.), то мы помещаем Z в выходную строку, и n становится n/26-1, потому что здесь мы 26 – это Z, когда на самом деле это 25-е число. для.
Точно так же, если остаток не равен нулю (например, 1, 2, 3,.), тогда мы просто вставляем соответствующий символ в строку и делаем n = n/26.
Наконец, мы переворачиваем строку и возвращаем результат.
Например:
n = 700 Số dư của phép toán (n% 26) là 24. Do đó, chúng ta đưa X vào trong chuỗi output và n trở thành n/26 với kết quả là 26. Số dư c ủa phép toán 26%26 là 0 Do đó, chúng ta đưa Z vào trong chuỗi output và n trở thành n/26-1 với kết quả là 0.
Вот пример кода для справки:
# Программа на Python для поиска имени столбца Excel из # заданного номера столбца MAX = 50 # Функция для печати имени столбца Excel # для заданного номера столбца def printString(n): # Для сохранения результата (имя столбца Excel) string = (“� “) * MAX # Чтобы сохранить текущий индекс в str, который является результатом i = 0, в то время как n > 0: # Найдите остаток rem = n % 26 # если остаток равен 0, то # ‘Z’ должен быть в выводе, если rem = = 0: string(i) = ‘Z’ i += 1 n = (n / 26) – 1 else: string(i) = chr((rem – 1) + ord(‘A’)) i += 1 n = n / 26 string(i) = ‘�’ # Перевернуть строку и распечатать результат string = string(::-1) print “”.join(string) # Программа-драйвер для проверки вышеуказанной функции printString(26) printString (51) printString(52) printString(80) printString(676) printString(702) printString(705) # Этот код предоставлен БХАВЬЯ ДЖЕЙН
Возвращаемый результат:
Z AY AZ CB YZ ZZ AAC
Способ 2:
Эта задача аналогична задаче преобразования десятичного числа в двоичное, но вместо двоичного только с 2 числами 0 и 1 здесь у нас 26 символов от A до Z. Поэтому вместо них мы будем выполнять задачу преобразования с коэффициентом 26. бинарного фактора.
Это интересная проблема, потому что в этой системе счисления у нас не будет нуля, потому что A представляет 1, B представляет 2 и, наконец, Z представляет 26.
Чтобы облегчить понимание проблемы, мы подойдем к ней в два этапа:
1. Преобразуйте число в коэффициент 26, предполагая, что 0 все еще присутствует в системе.
2. Измените коэффициент на систему ноль-ноль.
Вот пример:
Шаг 1:
Допустим, у нас есть число 676, как преобразовать его в множитель 26? Мы по-прежнему делаем это так же, как и в двоичной системе, вместо деления на 2 и вычисления остатка мы делаем деление на 26 и вычисляем остаток.
676 фунтов стерлингов 26 фунтов стерлингов 100
Шаг 2:
Но у нас нет нуля в нашей базовой системе. Как убрать ноль?
- В десятичной системе счисления для обработки нуля мы заимствуем 10 и вычитаем 1 из следующего значащего числа.
- В системе с числом 26 для работы с нулем мы заимствуем 26 и вычитаем 1 из следующего значащего числа.
Таким образом, чтобы преобразовать 100 в 26 раз в 26 раз, но без нуля, мы получим число (25 26).
Символьное представление этого числа: YZ.
Вот пример кода для справки:
def printString(n): arr = (0) * 10000 i = 0 # Шаг 1: Преобразование в число # Предполагая 0 в системе счисления while (n > 0): arr(i) = n % 26 n = int(n / / 26) i += 1 #Шаг 2: Избавляемся от 0, так как 0 не является # частью системы счисления для j в диапазоне(0, i – 1): if (arr(j) 0): print(chr( ord(‘A’) + (arr(j) – 1)), end = “”); Распечатать(); # Код драйвера if __name__ == ‘__main__’: printString(26); строка печати (51); строка печати (52); строка печати (80); строка печати (676); строка печати (702); строка печати (705); # Этот код предоставлен Princi Singh
Возвращаемый результат:
Z AY AZ CB YZ ZZ AAC
Способ 3:
Мы можем использовать рекурсивную функцию, чтобы решить эту проблему быстрее и эффективнее.
Алфавиты упорядочены как «ABCDEFGHIJKLMNOPQRSTUVWXYZ», а обозначения столбцов Excel вы уже знаете выше.
Поэтому мы можем применить следующую логику, чтобы найти ответ.
В математических терминах (a,b) означает от a до b. (1,26) = (A,Z) интерпретируется как A, представляющий A, и Z, представляющий 26. При этом (27,52) будет равно (AA,AZ), а (57,78) будет равно (BA, BZ) .
Логика заключается в том, что мы будем добавлять алфавит в правильном порядке каждый раз, когда он заканчивается на 26.
Пример: если n равно 27, то мы просто делим на 26 и получаем остаток 1. Мы видим, что 1 — это A, и это можно сделать рекурсивно.
Конкретный алгоритм таков:
1. Возьмите массив и отсортируйте буквы от А до Я.
2. Если число n меньше или равно 26, просто получить соответствующую букву из массива и вернуть ее.
3. Если оно больше 26, используйте правило остаточного частного, если остаток равен 0, есть 2 возможных способа, если частное равно 1, просто хешируйте букву из индекса (r-1) ( r – остаток), в противном случае вызовите функцию из num = (q-1) и добавьте буквенный индекс (r-1).
4. Если остаток не равен нулю, вызовите функцию для num = (q) и добавьте буквенный индекс (r-1).
Вот пример кода для справки:
# Или вы можете просто взять строку и выполнить эту логику, я не нашел здесь проблем. alpha=”ABCDEFGHIJKLMNOPQRSTUVWXYZ” # здесь определена рекурсивная функция. # если число меньше “26”, просто хешируйте (индекс-1) # В возможностях есть дополнительные возможности, # 1. если остаток равен нулю (если частное равно 1 или не равно 1) и # 2. если остаток не равен ноль по определению num_hash(num): если num
Возвращаемый результат:
Z AY AZ CB YZ ZZ AAC
TipsMake.com надеется, что эта статья будет вам полезна.