Проблема (попробуйте печать split
) является то, что все элементы в split
не обязательно rows
долго:
Type a string to encrypt: hello world
How many table columns would you like: 3
['hel', 'lo ', 'wor', 'ld']
Вы должны решить, что Вы хотите сделать. Возможно, добавьте пробелы в конец последней строки, если это недостаточно.
Возможно, вы также захотите взглянуть на enumerate. Счастливый взлом.
Update: Допустим, вы решили использовать 2 колонки, а длина строки, которая делится на две части:
Type a string to encrypt: helo
How many table columns would you like: 2
['he', 'lo']
['h', 'l', 'e', 'o']
Кажется, работает. О, я должен был изменить немного код, потому что вход не делать то, что вы думаете:
def encrypt():
before = raw_input("Type a string to encrypt: ")
columns = int(raw_input("How many table columns would you like: "))
split = [before[i:i+columns] for i in range(0, len(before), columns)]
rows = len(split)
after = []
for i in range(0, columns):
for j in range(0,rows):
after.append(split[j][i])
print(after)
Update 2: Если вы хотите площадку вход с помощью пространства, просто добавьте эту строку:
before += " " * (columns - len(before) % columns)
Вы закончите с этим кодом:
def encrypt():
before = raw_input("Type a string to encrypt: ")
columns = int(raw_input("How many table columns would you like: "))
before += " " * (columns - len(before) % columns)
split = [before[i:i+columns] for i in range(0, len(before), columns)]
rows = len(split)
after = []
for i in range(0, columns):
for j in range(0,rows):
after.append(split[j][i])
print ''.join(after)
Пример вывода:
Type a string to encrypt: hello world
How many table columns would you like: 4
hore llwdlo
'range (n)' такой же, как 'range (0, n)'. 0 неявно –
Вы пытались заменить индексы?С 'i' вы перебираете столбцы и' j' над каждой подстрокой. Поэтому вы должны использовать их для этого. – glglgl
Вы проверили свой массив, чтобы увидеть, являются ли его элементы ожидаемой длиной? – tdelaney