problem-oj5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
你需要实现一个转换器,将一个正整数在不同的进制(通用的/自定义的)之间转换。
后面有一些预定义的进制及其字符集。

示例:
func("15", dec_chr, bin_chr) --> "1111"
func("15", dec_chr, oct_chr) --> "17"
func("1010", bin_chr, dec_chr) --> "10"
func("1010", bin_chr, hex_chr) --> "a"
func("0", dec_chr, alpha_chr) --> "a"
func("27", dec_chr, allow_chr) --> "bb"
func("hello", allow_chr, hex_chr) --> "320048"
"""

import unittest


bin_chr = '01'
oct_chr = '01234567'
dec_chr = '0123456789'
hex_chr = '0123456789abcdef'
allow_chr = 'abcdefghijklmnopqrstuvwxyz'
allup_chr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
alpha_chr = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
alphanum_chr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'


def func(input, source, target):
"""
二进制 八进制 十进制 十六进制
小写(26) 大写(26) 字母(52) 字母和数字(62)
辗转相除
"""
# your code
# oct()
# hex()
# bin()
if len(target) != len(source):
transfer = input2dec(input, source)
# print(transfer)
get_re = dec2target(transfer, target)
print(get_re)

else:
if target.startswith("A"):
get_re = input.upper()
if target.startswith("a"):
get_re = input.lower()

return get_re


def input2dec(input, source):
get_power = len(source)
get_sum = 0
s = [i for i in input]
s.reverse()
for index, i in enumerate(s):
num = source.find(i)
get_value = num * (get_power**index)
get_sum += get_value

return get_sum


def dec2target(n, target):
b=[]
x = len(target)
while True:
s=n//x #商
y=n%x #余数
b=b+[y]
if s==0:
break
n=s
b.reverse()
s = ''
a = [i for i in target]
for i in b:
# print(a[i], end='')
s += a[i]
return s


class DefaultTestCase(unittest.TestCase):

def test_func(self):
self.assertEqual(func("15", dec_chr, bin_chr), "1111")
self.assertEqual(func("15", dec_chr, oct_chr), "17")
self.assertEqual(func("1010", bin_chr, dec_chr), "10")
self.assertEqual(func("1010", bin_chr, hex_chr), "a")
self.assertEqual(func("0", dec_chr, alpha_chr), "a")
self.assertEqual(func("27", dec_chr, allow_chr), "bb")
self.assertEqual(func("hello", allow_chr, hex_chr), "320048")
self.assertEqual(func("SAME", allup_chr, allup_chr), "SAME")
self.assertEqual(func("WORLD", allup_chr, alphanum_chr), 'Hgrz')


if __name__ == '__main__':
unittest.main()