【问题标题】:Converting number to hexadecimal [closed]将数字转换为十六进制 [关闭]
【发布时间】:2013-03-16 11:43:42
【问题描述】:

作为练习,我将数字转换为十六进制值。有没有更专业的做法?

def hexayacheviren(reqem):
    if reqem==10: 
        return "A"
    elif reqem==11: 
        return "B"
    elif reqem==12: 
        return "C"
    elif reqem==13: 
        return "D"
    elif reqem==14: 
        return "E"
    elif reqem==15: 
        return "F"
    else: 
        return reqem

def hexadecimal(n):
    cavab=[ ]
    i=0
    while (n>0):
        netice=n%16
        cavab.append(hexayacheviren(netice))
        i=i+1
        n=n//16
    string=''.join(str(e) for e in cavab)
    cvbstrng = string[::-1]
    print (cvbstrng)

hexadecimal(3200)

【问题讨论】:

    标签: python


    【解决方案1】:

    使用内置函数:hex。 Python 自带电池

    >>> hex
    <built-in function hex>
    >>> hex(9)
    '0x9'
    >>> hex(21)
    '0x15'
    >>> hex(10101010101010101010101010101010101)
    '0x1f204abeac202ce18095d40a57eb5L'
    

    【讨论】:

    • 感谢您指出这一点但是我刚刚开始学习编程并且转换为十六进制不是我的任务...我只是想了解优化代码,或者向有经验的人学习如何去做程序员
    【解决方案2】:

    您可以使用dict 简单地使用您的第一个函数,并可能进行一些错误处理,例如:

    def hexayacheviren(reqem):
        if not 0 <= reqem < 16:
            raise ValueError('Out of range')
        return {10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'}.get(reqem, str(reqem))
    

    如果值为 10、11、12... 之一,则返回相应的字母,否则,将原始数字作为字符串返回。这将导致您能够简化您的第二个函数,因为它的输入始终采用 int,而其输出始终是字符串。

    【讨论】:

      【解决方案3】:

      这是我的解决方案,它使用了 Python 的一些更有趣的功能,例如产量、生成器理解、三元运算符、字符串索引和各种位旋转杂项:

      #!/usr/bin/env python
      
      def nibbles(n):
          m = max(4, (n.bit_length()+3) & -4)
          while m > 0:
              m -= 4
              yield (n >> m) & 0x0F
      
      def _hexadecimal(n):
          return "".join("0123456789ABCDEF"[nib] for nib in nibbles(n))
      
      def hexadecimal(n):
          return "-"+_hexadecimal(-n) if n < 0 else _hexadecimal(n)
      
      if __name__ == "__main__":
          import sys
          u = [hexadecimal(i) for i in range(0x10010)]
          v = [hex(i)[2:].upper() for i in range(0x10010)]
      
          if u == v:
              print("tested ok")
              sys.exit(0)
          else:
              print("test failed!")
              sys.exit(1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-04
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 2017-12-01
        相关资源
        最近更新 更多