我是 Python 的完全初学者。我编写了一些代码来执行基本转换,我想知道是否有更好的替代方案,它们的代码更短(单行)或明显更快。代码看起来很丑,感觉“非 Pythonic”,虽然作为初学者我不应该有任何这样的意见。任何改进代码的反馈将不胜感激。这纯粹是为了学习目的。
#!/usr/bin/env python
import math
def number_to_digits( number, radix ):
'Converts a number into a vector of digits in given radix'
digits = [0]*int(math.ceil(math.log(number,radix)))
for ii in range(len(digits)):
(number,digit) = divmod(number,radix)
digits[ii] = digit
return digits
def digits_to_number( digits, radix ):
'Converts a vector of non-negative digits in given radix into a number'
number = 0;
for ii in range(len(digits)-1,-1,-1):
number *= radix
number += digits[ii]
return number
if __name__ == '__main__':
try:
number = int(raw_input('Enter number: '))
if number <= 0: raise ValueError()
radix = int(raw_input('Enter radix: '))
if radix <= 0: raise ValueError()
digits = number_to_digits(number,radix)
print digits
number_again = digits_to_number(digits,radix)
if not number_again == number:
print 'test failed'
except ValueError:
print 'unexpected input'
终端上的示例会话产生:
Enter number: 44
Enter radix: 6
[2, 1, 1]
很容易检查 2 + 1*6 + 1*6**2 == 44。谢谢!