Squeak.ru - шаблоны программирования

Добавление 2 преобразованных символов ascii с использованием вложенных циклов в Python 3.2

Я пытаюсь сложить вместе строки, в которых каждая буква была преобразована в ASCII, а затем соответственно сложена. Так, например, складывая вместе строки "goodbye" "hello", я хотел бы преобразовать каждую букву в ascii, а затем добавить их вместе следующим образом:

103 + 104 (g + h) 
111 + 101 (o + e)
111 + 108 (o + l)
100 + 108 (d + l)
98 + 111  (b + o)
121 + 104 (y + h)
101 + 101 (e + e) 

В этом случае "goodbye" должен быть взаимозаменяемым, т. е. вводиться пользователем. Это код, который я сгенерировал до сих пор:

input1 = input("Enter word: ")
input2 = "goodbye"
l = len(upnumber)
count = 0

for i in (input1):
     x = (ord(i))
     while count <= l:
         for j in (input2):
              y = (ord(j))
              total = (x + y)
              count = count + 1
              print (total)

Этот код не работает. Просто кажется, что первый символ input1 добавляется к каждому символу input2 бесчисленное количество раз.

Счетчик находится там, так как я хотел бы, чтобы цикл останавливался после того, как каждый символ в input1 был добавлен в цикл input2.


  • Похоже, ваш код повторяет input2, но вместо этого ваш образец повторяет input1 (пользовательский ввод). Должен ли здесь повторяться пользовательский ввод или жестко закодированная клавиша (goodbye)? 14.12.2014
  • Это моя ошибка, извините, ваш ответ ниже идеально подходит, большое спасибо! 14.12.2014

Ответы:


1

Вы перебираете все input2 для каждого символа в input1, потому что вы вложили циклы.

Вместо этого используйте функцию zip() для объединения букв:

input1 = input("Enter word: ")
input2 = "goodbye"
# make input1 at least as long as input2
while len(input1) <= len(input2):
    input1 += input1
for x, y in zip(input1, input2):
    total = ord(x) + ord(y)
    print(total)

где zip() прекратит итерацию, как только будет выполнена самая короткая из двух строк. Поскольку input1 был расширен для повторения до тех пор, пока он не будет по крайней мере таким же длинным, как input2, это означает, что вы в конечном итоге обрабатываете все символы input2 и не более, если только input1 не был длиннее для начала.

Вместо того, чтобы вручную повторять input2, вы также можете использовать itertools.cycle() для цикла через все символы в input1 до бесконечности:

from itertools import cycle

input1 = input("Enter word: ")
input2 = "goodbye"
for x, y in zip(cycle(input1), input2):
    total = ord(x) + ord(y)
    print(total)

Демонстрация последнего подхода с дополнительным форматированием для иллюстрации того, что происходит:

>>> from itertools import cycle
>>> input1 = 'hello'
>>> input2 = "goodbye"
>>> for x, y in zip(cycle(input1), input2):
...     total = ord(x) + ord(y)
...     print('{!r} + {!r} = {:3d} + {:3d} = {:3d}'.format(x, y, ord(x), ord(y), total))
... 
'h' + 'g' = 104 + 103 = 207
'e' + 'o' = 101 + 111 = 212
'l' + 'o' = 108 + 111 = 219
'l' + 'd' = 108 + 100 = 208
'o' + 'b' = 111 +  98 = 209
'h' + 'y' = 104 + 121 = 225
'e' + 'e' = 101 + 101 = 202
13.12.2014
  • Большое спасибо за ваш вклад, у меня есть ваше разрешение использовать это в моем текущем исследовании в университете, пожалуйста? 14.12.2014
  • @ajh: весь пост лицензирован как Creative Commons; это означает, что у вас уже есть мое разрешение, но вы должны соблюдать требования к атрибуции. 14.12.2014
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...