Преобразование числа в базу Excel 26Python

Программы на Python
Ответить
Anonymous
 Преобразование числа в базу Excel 26

Сообщение Anonymous »

Хорошо, я застрял на чем-то, казалось бы, простом. Я пытаюсь преобразовать число в базу 26 (т. е. 3 = C, 27 = AA и т. д.). Я предполагаю, что моя проблема связана с отсутствием 0 в модели? Не уверен. Но если вы запустите код, вы увидите, что числа 52, 104 и особенно числа около 676 действительно странные. Может ли кто-нибудь подсказать мне, чего я не вижу? Я буду признателен за это. (на всякий случай, чтобы не тратить зря время, @ — это ascii char 64, A — это ascii char 65)

def toBase26(x):
x = int(x)
if x == 0:
return '0'
if x < 0:
negative = True
x = abs(x)
else:
negative = False
def digit_value (val):
return str(chr(int(val)+64))
digits = 1
base26 = ""
while 26**digits < x:
digits += 1
while digits != 0:
remainder = x%(26**(digits-1))
base26 += digit_value((x-remainder)/(26**(digits-1)))
x = remainder
digits -= 1
if negative:
return '-'+base26
else:
return base26

import io
with io.open('numbers.txt','w') as f:
for i in range(1000):
f.write('{} is {}\n'.format(i,toBase26(i)))


Итак, я нашел временное решение, внеся пару изменений в свою функцию (два оператора if в цикле while). В любом случае мои столбцы ограничены 500, и следующее изменение в функции, похоже, помогает до x = 676, так что я доволен. Однако, если кто-нибудь из вас найдет общее решение для любого x (возможно, мой код поможет), было бы очень здорово!

def toBase26(x):
x = int(x)
if x == 0:
return '0'
if x < 0:
negative = True
x = abs(x)
else:
negative = False
def digit_value (val):
return str(chr(int(val)+64))
digits = 1
base26 = ""
while 26**digits < x:
digits += 1
while digits != 0:
remainder = x%(26**(digits-1))
if remainder == 0:
remainder += 26**(digits-1)
if digits == 1:
remainder -= 1
base26 += digit_value((x-remainder)/(26**(digits-1)))
x = remainder
digits -= 1
if negative:
return '-'+base26
else:
return base26


Подробнее здесь: https://stackoverflow.com/questions/489 ... -s-base-26
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»