【问题标题】:Placing my integers into a list in python将我的整数放入python中的列表中
【发布时间】:2012-10-27 17:38:48
【问题描述】:

我正在创建一个使用凯撒密码对消息进行编码和解码的程序。到目前为止,我正在构建基础工作,我正在尝试获取用户给我的字符列表并使用 ord 制作整数列表......到目前为止,我遇到的所有问题是将收到的整数重新放入一个列表。

import random

encode_decode = input("Do you want to encode, or decode? (e/d)")

shift_amount = input("Please enter the shift amount for your message")

if encode_decode == "e" or encode_decode == "E":
    user_words_unrefined = input("Enter your message to encode!")
elif encode_decode == "d" or encode_decode == "D":
    user_words_unrefined = input("Enter your message to decode!")

user_words_refined = list(user_words_unrefined)

Alphabet = [chr(i) for i in range(ord('a'), ord('z') + 1)]

Counter = 0
for i in range(len(user_words_refined)):
    user_words_numbers = (ord(user_words_refined[Counter]))
    user_numbers_list = [user_words_numbers]
    print(user_numbers_list)
    Counter += 1

输入(“你好,派对的人!”) 输出 它将它们全部打印在单独的行上,并在它们周围加上方括号......有什么想法吗?

[72]
[101]
[108]
[108]
[111]
[44]
[32]
[80]
[97]
[114]
[116]
[121]
[32]
[112]
[101]
[111]
[112]
[108]
[101]

【问题讨论】:

  • 您将在user_numbers_list = [user_words_numbers] 行的每次迭代中创建一个新列表。您想使用append 方法将user_words_numbers 添加到列表中。
  • 顺便说一句 - Alphabet 写成 Alphabet = [ord(c) for c in string.ascii_lowercase] 时会更清楚一点

标签: python string list char ord


【解决方案1】:

您可以使用列表推导,而不是使用跨越输入字符串长度的 for 循环。

user_numbers_list = [ord(letter) for letter in user_words_refined]

【讨论】:

    【解决方案2】:

    这应该可以解决您的问题。请参阅代码中的 cmets。如果需要,我很乐意提供进一步的解释

    user_numbers_list = []    #initialise the list
    Counter = 0
    for i in range(len(user_words_refined)):
        user_words_numbers = (ord(user_words_refined[Counter]))
        user_numbers_list.append(user_words_numbers)     #add to the end of the list
        print(user_numbers_list)
        Counter += 1
    

    最好的选择实际上是列表理解......请参阅 Jordan Lewis 的答案以获得更简洁的方法

    【讨论】:

      【解决方案3】:

      把最后一部分改成类似

      user_numbers_list = []
      Counter = 0
      for i in range(len(user_words_refined)):
          user_words_numbers = (ord(user_words_refined[Counter]))
          user_numbers_list.append(user_words_numbers)
          print(user_numbers_list)
          Counter += 1
      

      另外,考虑直接通过 user_words_refined 进行迭代,比如

      for word in user_words_refined:
          user_words_numbers = ord(word)
          user_numbers_list.append(user_words_numbers)
          print(user_numbers_list)
      

      【讨论】:

        【解决方案4】:

        只是作为旁注,而不是

        encode_decode = input("Do you want to encode, or decode? (e/d)")
        

        你可以使用

        encode_decode = input("Do you want to encode, or decode? (e/d)").lower()
        

        因此您不必在 if 语句中使用太多 or

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 2013-05-15
          • 1970-01-01
          • 2014-02-11
          • 1970-01-01
          • 1970-01-01
          • 2017-08-19
          相关资源
          最近更新 更多