【问题标题】:Formatting issue involving lists涉及列表的格式问题
【发布时间】:2014-03-24 23:15:19
【问题描述】:

我有这个函数,它将名称作为输入,将其放入列表中,然后针对它运行 ord()。但是,我遇到了一些(我相信的)格式问题。 我试图让它看起来像这样:

b = (ascii value)
a = (ascii value)
t = (ascii value)
m = (ascii value)
a = (ascii value)
n = (ascii value)

我的名称显示正确,但 ascii 值显示如下:

b = [98, 97, 116, 109, 97, 110]
a = [98, 97, 116, 109, 97, 110]
t = [98, 97, 116, 109, 97, 110]
m = [98, 97, 116, 109, 97, 110]
a = [98, 97, 116, 109, 97, 110]
n = [98, 97, 116, 109, 97, 110]

不知道哪里出错了,下面是我为它制作的代码:

def x():
     name = requestString("name")
     usersName = list(name)
     ascii = [orc(c) for c in usersName]
     for name in name: 
          print name, "=", ascii 

谢谢!

编辑: 谢谢,真的很感激。马上找出我哪里出错了!

【问题讨论】:

  • 仅供参考for name in name 不是一个好主意。将循环变量命名为您正在循环的集合之外的其他名称。
  • (在这种情况下 - lettercharchchar 的缩写)等......经常使用)

标签: python function split ord


【解决方案1】:

以下是对您出错的地方的一些回顾:

def x():
     name = requestString("name")
     usersName = list(name)
     ascii = [orc(c) for c in usersName] # here's the list
     for name in name: 
          print name, "=", ascii # and you're printing it here everytime

您可以像这样更以 Python 方式进行修复:

def x():
     name = requestString("name")
     # usersName = list(name) # no need for this line, you can iterate over the string
     ascii = [orc(c) for c in name] #so this is just name
     for i, c in enumerate(name):  # use c for your character var name, 
          print c, "=", ascii[i]   # and enumerate provides the index

由于您没有返回任何内容,因此无需创建列表,您不妨即时提供 ord(c):

def print_ords_of_word(name):
    for c in name:
        print c, '=', ord(c)

【讨论】:

    【解决方案2】:

    ascii 是所有字符的ord 列表。要将它们与它们所代表的字符配对,请使用zip

    for num, char in zip(ascii, name):
        print "'{0}'={1}".format(char, num)
    

    【讨论】:

      【解决方案3】:

      你可以在一个循环中完成:

      for item in name:
          print item, "=", ord(item)
      

      演示:

      >>> def x(name):
      ...      for item in name:
      ...           print item, "=", ord(item)
      ... 
      >>> x('batman')
      b = 98
      a = 97
      t = 116
      m = 109
      a = 97
      n = 110
      

      【讨论】:

      • 我认为这是最好的解决方案。伟大的头脑,嗯? :)
      • @AaronHall 同意,在纽约 python 聚会上见,Aaron :)
      • 为了完整起见:for item, val in zip(item, bytearray(item)): print item, '=', val
      • 这不是一个实际的答案,但它使用了一个字节数组在迭代时给出整数的事实......只是觉得你可能会觉得它很有趣:-)
      • @JonClements 当然,这绝对是开箱即用的东西。我敢打赌你还有很多类似的技巧:)
      【解决方案4】:

      [ord(c) for c in usersName]usersName 中字母的所有ord 值的列表。这不是你想在信旁边放的东西——你只想放那个。

      你可以这样做:

      def x():
          name = requestString("name")
          ascii = {letter:ord(letter) for letter in name}
          for letter in name:
              print(letter+" = "+ascii[letter])
              # or use string formatting which is better
      

      或者只是:

      def x():
          name = requestString("name")
          for letter in name:
              print(letter+" = "+ord(letter))
      

      【讨论】:

        【解决方案5】:

        您得到了一个列表,因为您使用列表推导将整个 usersName 转换为一个 ords 列表。这可以写在一行中:

        print "\n".join("{0} = {1}".format(c, ord(c)) for c in name)
        

        字符串的连接方法接受一个序列或迭代器,并用字符串的原始内容(在本例中为 \n)分隔每个项目。

        join 调用中的 for 循环创建了一个生成器,如果它可以帮助您更好地理解(但实际上并非如此),您可以将其视为列表推导式。

        【讨论】:

          猜你喜欢
          • 2014-06-08
          • 2018-06-18
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          • 2014-05-29
          相关资源
          最近更新 更多