1.1 --- a/lib/__builtins__/character.py Sun Dec 11 01:37:33 2016 +0100
1.2 +++ b/lib/__builtins__/character.py Sun Dec 11 01:49:54 2016 +0100
1.3 @@ -22,8 +22,51 @@
1.4 from native import str_ord
1.5
1.6 def chr(i): pass
1.7 -def hex(number): pass
1.8 -def oct(number): pass
1.9 +
1.10 +_hexdigits = "0123456789abcdef"
1.11 +
1.12 +def _base(number, base, prefix=""):
1.13 +
1.14 + """
1.15 + Return 'number' encoded in the given 'base', prefixed with 'prefix'.
1.16 + """
1.17 +
1.18 + if number < 0:
1.19 + number = -number
1.20 + sign = "-"
1.21 + else:
1.22 + sign = ""
1.23 +
1.24 + digits = []
1.25 +
1.26 + while number:
1.27 + digits.append(_hexdigits[number % base])
1.28 + number = number / base
1.29 +
1.30 + digits.append(prefix)
1.31 +
1.32 + if sign:
1.33 + digits.append(sign)
1.34 +
1.35 + return "".join(reversed(digits))
1.36 +
1.37 +def hex(number, prefix="0x"):
1.38 +
1.39 + """
1.40 + Return 'number' encoded as a hexadecimal (base 16) value, prefixed with
1.41 + 'prefix' ("0x" by default).
1.42 + """
1.43 +
1.44 + return _base(number, 16, prefix)
1.45 +
1.46 +def oct(number, prefix="0"):
1.47 +
1.48 + """
1.49 + Return 'number' encoded as an octal (base 8) value, prefixed with 'prefix'
1.50 + ("0" by default).
1.51 + """
1.52 +
1.53 + return _base(number, 8, prefix)
1.54
1.55 def ord(c):
1.56
2.1 --- a/tests/numbers.py Sun Dec 11 01:37:33 2016 +0100
2.2 +++ b/tests/numbers.py Sun Dec 11 01:49:54 2016 +0100
2.3 @@ -7,9 +7,13 @@
2.4
2.5 i = 2 ** 30
2.6 print i # 1073741824
2.7 +print hex(i) # 0x40000000
2.8 +print oct(i) # 010000000000
2.9
2.10 j = -2 ** 30
2.11 print j # -1073741824
2.12 +print hex(j) # -0x40000000
2.13 +print oct(j) # -010000000000
2.14
2.15 print i + j # 0
2.16
2.17 @@ -33,3 +37,6 @@
2.18 print ~j # 1073741823
2.19 print i & ~j # 0
2.20 print i - 1 & ~j # 1073741823
2.21 +
2.22 +print hex(31) # 0x1f
2.23 +print oct(31) # 037