Помещение моих целых чисел в список в Python

Я создаю программу, которая использует шифр Цезаря для кодирования и декодирования сообщений. Пока я создаю основу, я пытаюсь получить свой список символов, которые дает мне пользователь, и составить список целых чисел, используя 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]

4 ответа

Решение

Это должно уладить вас. смотрите комментарии в коде. Я буду рад предоставить дополнительные объяснения, если это будет необходимо

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

Лучшая ставка - на самом деле понимание списка... см. Ответ Джордана Льюиса для более аккуратного подхода

Вместо использования цикла for, длина которого равна длине входной строки, вы можете использовать понимание списка.

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

Поменяйте последнюю часть на что-то вроде

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)

Просто как примечание, а не

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()

так что вам не нужно использовать слишком много orв вашем заявлении if.

Другие вопросы по тегам