Python论坛  - 讨论区

标题:Re: Re: [python-chinese]大家帮我看看int函数

2006年01月10日 星期二 18:25

Jay wz12 at yeah.net
Tue Jan 10 18:25:43 HKT 2006

thank you all
I understand.

> 
> Jay wrote:
> > 是和道理呢?为什么不能转化到二进制?三进制?
> >>>> int('98',2)
> > Traceback (most recent call last):
> >   File "", line 1, in ?
> > ValueError: invalid literal for int(): 9
> 
> 你看看下面的例子:
> 
> 二进制数字符串 -> 数值:
> .>>> int('10101101', 2)
> 173
> 
> 数值 -> 十六进制数字符串:
> .>>> hex(173)
> '0xad'
> 或者
> .>>> '%x' % 173
> 'ad'
> 
> 数值 -> 八进制数字符串:
> .>>> oct(173)
> '0255'
> 或者
> .>>> '%o' % 173
> '255'
> 
> 数值 -> 十进制数字符串:
> .>>> str(173)
> '173'
> 或者
> .>>> '%d' % 173
> '173'
> 
> 数值转到其他进制可能需要自己编写函数,ASPN上有一个现成的[1],抄在下面:
> 
> [1] http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/365468
> 
> def num_in_base(val, base, min_digits=1, complement=False,
>                 digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"):
>     """Convert number to string in specified base
> 
>        If minimum number of digits is specified, pads result to at least
>        that length.
>        If complement is True, prints negative numbers in complement
>        format based on the specified number of digits.
>        Non-standard digits can be used. This can also allow bases greater
>        than 36.
>     """
>     if base < 2: raise ValueError("Minimum base is 2")
>     if base > len(digits): raise ValueError("Not enough digits for base")
>     # Deal with negative numbers
>     negative = val < 0
>     val = abs(val)
>     if complement:
>         sign = ""
>         max = base**min_digits
>         if (val > max) or (not negative and val == max):
>             raise ValueError("Value out of range for complemented format")
>         if negative:
>             val = (max - val)
>     else:
>         sign = "-" * negative
>     # Calculate digits
>     val_digits = []
>     while val:
>         val, digit = divmod(val, base)
>         val_digits.append(digits[digit])
>     result = "".join(reversed(val_digits))
>     leading_digits = (digits[0] * (min_digits - len(result)))
>     return sign + leading_digits + result
> 
> if __name__ == "__main__":
>     # Quick sanity check
>     for base in range(2, 37):
>         for val in range(-1000, 1000):
>             assert val == int(num_in_base(val, base), base)
> 
>     # Quick sanity check of complemented format
>     def comp(val, base, digits):
>         return num_in_base(val, base, digits, complement = True)
>     for base in range(2, 37):
>         for digits in range(1, 11):
>             limit = base ** digits
>             for val in range(-min(limit, 1000), 0):
>                 assert limit + val == int(comp(val, base, digits), base)
>             for val in range(0, min(limit, 1000)):
>                 assert val == int(comp(val, base, digits), base)
> 
> 
> 
> -- 
> Qiangning Hong
> http://hongqn.hn.org
> Registered Linux User #396996
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060110/8786b258/attachment-0001.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号