#!/usr/bin/python3 '''Convert number in one radix to another radix''' import sys import string SYMBOLS = string.digits + string.ascii_lowercase def main(): '''Main function''' if len(sys.argv) != 4: sys.stderr.write('usage: '+sys.argv[0]+' input_radix output_radix') sys.stderr.write(' number_to_convert\n') sys.exit(1) input_radix = int(sys.argv[1]) if input_radix > 36 or input_radix < 2: sys.stderr.write('bad input radix\n') sys.exit(1) output_radix = int(sys.argv[2]) if output_radix > 36 or output_radix < 2: sys.stderr.write('bad input radix\n') sys.exit(1) number_to_convert = sys.argv[3].lower() #print input_radix,output_radix,number_to_convert accumulator = 0 for character in number_to_convert: accumulator = accumulator * input_radix position_value = SYMBOLS.find(character) if position_value < 0 or position_value >= input_radix: sys.stderr.write('character: {}, SYMBOLS: {}\n'.format(character, SYMBOLS)) sys.stderr.write('position_value {}\n'.format(position_value)) sys.stderr.write('{}: symbol {} too big for input radix {}\n'.format(sys.argv[0], character, input_radix)) sys.exit(1) #print 'accumulator',accumulator,'position_value',position_value accumulator = accumulator + position_value #print accumulator,'in decimal' print_in_radix(accumulator, output_radix) def print_in_radix(value, radix): '''Print value in radix''' list_ = [] while True: quotient, remainder = divmod(value, radix) list_.append(remainder) value = quotient if value == 0: break list_.reverse() for element in list_: sys.stdout.write(SYMBOLS[element]) sys.stdout.write('\n') main()