【问题标题】:Convert string / character to integer in python在python中将字符串/字符转换为整数
【发布时间】:2010-12-27 17:46:23
【问题描述】:

我想将字符串的单个字符转换为整数,将其加 2,然后将其转换回字符串。因此,A 变为 C,K 变为 M,等等。

【问题讨论】:

    标签: python string integer


    【解决方案1】:

    对于那些需要对字符串的每个字符执行操作的人,另一种处理方法是将str 对象转换为bytes 对象/从bytes 对象转换,这将利用@987654326 @object 只是一个整数序列。

    import numpy
    
    
    old_text_str = "abcde"  # Original text
    old_num_list = list(old_text_str.encode())  # Integer values of the original text
    new_num_list = numpy.add(old_num_list, 2).tolist()  # Add +2 to the integer values
    new_text_str = bytes(new_num_list).decode()  # Updated text
    
    print(f"{old_text_str=}")
    print(f"{old_num_list=}")
    print(f"{new_num_list=}")
    print(f"{new_text_str=}")
    

    输出:

    old_text_str='abcde'
    old_num_list=[97, 98, 99, 100, 101]
    new_num_list=[99, 100, 101, 102, 103]
    new_text_str='cdefg'
    

    相关主题:

    【讨论】:

      【解决方案2】:

      “ord”只是解决方案的一部分。您在那里提到的拼图旋转,因此“X”+3 旋转到“A”。其中最著名的是 rot-13,它可以旋转 13 个字符。两次应用 rot-13(旋转 26 个字符)使文本恢复原状。

      处理此问题的最简单方法是使用转换表。

      import string
      
      def rotate(letters, n):
          return letters[n:] + letters[:n]
      
      from_letters = string.ascii_lowercase + string.ascii_uppercase
      to_letters = rotate(string.ascii_lowercase, 2) + rotate(string.ascii_uppercase, 2)
      
      translation_table = string.maketrans(from_letters, to_letters)
      
      message = "g fmnc wms bgblr"
      print message.translate(translation_table)
      

      这里没有一个 ord() 或 chr()。那是因为我回答的问题与所问的不同。 ;)

      【讨论】:

      • @dalke 已经知道这一点,但对于那些不知道的人来说,为 rot-13 执行上述操作的更简单的方法是 message.decode('rot13')。 (上面是rot-n。)
      【解决方案3】:

      通常情况下,只需 ord 并添加 2 并返回 chr,(Y, Z 会给你意想不到的结果 ("[","\")

      >>> chr(ord("A")+2)
      'C'
      

      如果你想将 Y、Z 更改为 A、B,你可以这样做。

      >>> chr((ord("A")-0x41+2)%26+0x41)
      'C'
      >>> chr((ord("Y")-0x41+2)%26+0x41)
      'A'
      >>> chr((ord("Z")-0x41+2)%26+0x41)
      'B'
      

      从A到Z

      >>> [chr((i-0x41+2)%26+0x41) for i in range(0x41,0x41+26)]
      ['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B']
      

      【讨论】:

        【解决方案4】:

        这听起来很像家庭作业,所以我会给你几张,让你填写其余的。

        要访问字符串 s 的单个字符,它的 s[x] 其中 x 是一个整数索引。索引从 0 开始。

        要获取字符的整数值,它是 ord(c),其中 c 是字符。要将整数转换回字符,它是 chr(x)。小心接近字母表末尾的字母!

        编辑:如果您对如何处理 Y 和 Z 有疑问,请发表评论,我会给出提示。

        【讨论】:

        • +1 提供良好的家庭作业指导,而不会泄露解决方案
        • 是的,我担心有人会认为这是作业。我已经有学士学位了。在计算机科学中,我是一名 ASP.NET 程序员。但我一直在学习 Django,并想通过这个网站提高我的 Python 技能:pythonchallenge.com/pc/def/map.html。无论如何,我认为'ord'是我正在寻找的功能;下班后我会试一试。感谢大家的意见!
        • 啊,好的。如果您愿意的话,我在制作听起来不像家庭作业的两分钱:只发布您想要回答的部分问题(例如“如何在 python 中将字符转换为 int”而不是我的完整问题实际上记得这是我在学校密码学课上的第一个问题)而且,我认为只是说“这听起来像家庭作业,但事实并非如此”会让我们所有人都从我们的回答中消除屈尊俯就:)看起来像一个很酷的网站,我得去看看。
        【解决方案5】:

        对于整个字符串,这将是:

        >>> s = "Anne"
        >>> ''.join([chr(ord(i)+2) for i in s]) 
        'Cppg'
        

        'Y'、'Z' 很难...

        >>> s = "Zappa"
        >>> ''.join([chr(ord(i)+2) for i in s]) 
        '\\crrc'
        

        函数:chrord

        【讨论】:

        • ''.join([chr(ord(i)+2) for i in s]) 会做同样的事情
        • 括号到底有什么作用?为什么不只是另一组括号?
        【解决方案6】:

        http://docs.python.org/library/functions.html

        ord(c)

        给定一个长度为 1 的字符串,当参数是 unicode 对象时,返回一个整数,表示字符的 Unicode 代码点,或者当参数是 8 位字符串时,返回字节的值。例如,ord('a') 返回整数 97,ord(u'\u2020') 返回 8224。这是 chr() 用于 8 位字符串和 unichr() 用于 unicode 对象的倒数。如果给出了 unicode 参数并且 Python 是使用 UCS2 Unicode 构建的,那么字符的代码点必须在 [0..65535] 范围内;否则字符串长度为 2,会引发 TypeError。

        【讨论】:

          【解决方案7】:

          这是通过 chr 和 ord 函数完成的。例如; chr(ord(ch)+2) 做你想做的事。这些都被完整描述了here

          【讨论】:

            【解决方案8】:

            试试ord(),应该可以解决问题:)

            【讨论】:

              猜你喜欢
              • 2010-10-31
              • 1970-01-01
              • 2013-02-18
              • 1970-01-01
              • 1970-01-01
              • 2015-09-25
              • 2023-03-06
              • 1970-01-01
              相关资源
              最近更新 更多