Мне нужно иметь возможность циклически перемещаться по строке символов, используя оператор modulo, чтобы каждый символ мог быть передан функции. Это простой вопрос, я знаю, но я серьезно запутался в том, как это сделать. Вот что я имею, но он дает мне ошибку «TypeError: не все аргументы, преобразованные во время форматирования строки». Мы ценим любые предложения.Цикл через строку
ответ
Ингредиенты
Вот некоторые ингредиенты, которые помогут вам написать encrypt
функции в краткой форме:
Вы можете непосредственно перебрать символы строки:
>>> my_string = 'hello' >>> for c in my_string: ... print(c) ... h e l l o
Вы можете циклически перебирать любую итерабельную (например, строку) с помощью функции
cycle
изitertools
модуль стандартной библиотеки:>>> from itertools import cycle >>> for x in cycle('abc'): ... print(x) ... a b c a b c a # goes on infinitely, abort with Ctrl-C
Вы можете использовать функцию
zip
перебрать двух последовательностей одновременно:>>> for a, b in zip('hello', 'world'): ... print(a, b) ... h w e o l r l l o d
Edit: в кичик предлагает, вы можете также используйте
itertools.izip
, что выгодно, если вы имеете дело с очень большими входными строками.Вы вычислить
xor
двух чисел с помощью^
оператора:>>> 5^3 6
Вы можете конкатенировать последовательность отдельных строк в одну строку с помощью
join
функции:>>> ''.join(['hello', 'how', 'are', 'you']) 'hellohowareyou'
Вы можете подать
join
с так называемым выражением генератора, который похож наfor
петли, но как одно выражения:>>> ''.join(str(x+5) for x in range(3)) '567'
Собирает все вместе
from itertools import cycle, izip
def encrypt(key, string):
return ''.join(chr(ord(k)^ord(c))
for k, c in izip(cycle(key), string))
Вы можете (вероятно, должны) перебор символов без использования диапазона(), и вы захотите запустить ord() для каждого символа перед тем, как запустить mod на нем, поскольку оператор% означает что-то еще для строки. Это должно работать:
key = 'abc'
for c in key:
print XOR(ord(c), ord(c) % 3)
Вы можете использовать itertools.cycle()
для цикла через ключ и itertools.izip()
для легкой комбинации двух.
import itertools
def encrypt(key, string):
keyi = itertools.cycle(key)
result = ''
for k, v in itertools.izip(keyi, string):
a = ord(v)^ord(k)
result += chr(a)
return result
И затем использовать его как это:
>>> encrypt('\x00', 'abc')
'abc'
>>> encrypt('\x01', 'abc')
'`cb'
Вы получили ошибку о форматировании, потому что % не является оператором по модулю строк. Он используется для форматирования строк. Вы, вероятно, должны были использовать что-то вроде этого:
key[i%3]
- 1. TWIG - цикл через строку
- 2. MySQL цикл через каждую строку (большой стол)
- 3. Вставка символов в строку через цикл
- 4. Python цикл через строку в вложенных циклах
- 5. Цикл через многомерный $ _GET
- 6. Рекурсивный цикл через текст
- 7. JQuery цикл через таблицу
- 8. Цикл через столбцы SQL
- 9. Цикл через массив объектов?
- 10. цикл через изображения через jquery
- 11. Итерацию через цикл и возвращаемую строку из массива
- 12. как SQL SELECT & цикл через каждую строку результатов с кодом?
- 13. Как добавить строку в список массива строк через цикл
- 14. Цикл через каждую строку в текстовом файле с переменными, партия
- 15. цикл через массив, выводят каждый элемент в новую строку
- 16. Цикл через две таблицы данных из столбца в строку мудрый?
- 17. Цикл через возможную строку, разделенную запятой, в mySQL
- 18. Как продолжить цикл через строку и возвращаемый символ данного индекса?
- 19. Добавить строку в jTable каждый проход через цикл?
- 20. цикл через каждую строку в параметре значения таблицы
- 21. Пакетный цикл через разделительную строку, содержащую пробелы и запятые
- 22. цикл через строку и заменить определенные значения? Javascript
- 23. Нарезка/цикл через строку, содержащую круглые скобки в C#
- 24. PHP foreach цикл через массив, который имеет строку и массив
- 25. JavaScript: цикл через строку с «для» ведет себя неожиданно
- 26. Android цикл через строку для цветных конкретных слов
- 27. Поместите цикл while в строку
- 28. цикл через значение NSStringEncoding (enum)
- 29. .getJSON и цикл через массив
- 30. Excel, цикл через несколько caculations
Что вы ожидаете от '' abc '% 3'? –
Я хочу, чтобы он разделил каждый символ в строке так, чтобы они могли быть переданы в ord (t) в x – Tony