Вертикальная печать слов в Python

| | | | |

Данная строка s. Вернуть все слова по вертикали в том же порядке, в котором они появляются в s. Слова возвращаются в виде строкового списка, при необходимости дополненного пробелами. (Хождение по ступенькам запрещено). Каждое слово будет помещено только в один столбец, и в каждом столбце будет только одно слово.

Пример 1:

Ввод: s = "КАК ТЫ" Вывод: ["ЭЙ ","ORO","WEU"] Объяснение: Каждое слово печатается вертикально. "HAY" "ORO" "WEU" 

Пример 2:

Ввод: s = "БЫТЬ ИЛИ НЕ БЫТЬ" Вывод: ["TBONTB","OEROOE"," T"] Объяснение: Завершающие пробелы не допускаются. "TBONTB" "OEROOE" " T" 

Пример 3:

Ввод: s = "КОНКУРС ПРИБЛИЖАЕТСЯ" Вывод: ["CIC","OSO","NM", "TI","EN","SG","T"] 

Ограничения:

  • 1 <= s.length <= 200
  • s содержит только заглавные буквы латинского алфавита.
  • Гарантируется, что между двумя словами есть только один пробел.

Способ №1: [По горизонтали в вертикаль] с использованием цикла + " ‚"

Здесь мы добавляем символ новой строки после каждого символа, чтобы каждый элемент отображался на следующей строке.

# Код Python3 для демонстрации работы # Interconvert Horizontal и Вертикальная строка # с использованием [Horizontal to Vertical] с использованием цикла + " " # инициализация строки test_str = `geeksforgeeks` # печать исходной строки print("Исходная строка: " + str(test_str)) # использование цикла для добавления " " после каждого символ res = `` для ele в test_str: res += ele + " " # результат печати print("Преобразованная строка: " + str(res)) 

Вывод:

 Выходные данные Исходная строка: geeksforgeeks T он преобразовал строку: geeksforgeeks 

Метод № 2: [Вертикальное в горизонтальное] с помощью replace() + " ‚"

В этом мы выполняем задачу преобразования, удаляя " ‚" путем замены пустым string.

# Код Python3 для демонстрации работы # Преобразования горизонтальной и вертикальной строк # с использованием [Vertical to Horizontal] с помощью replace() + " " # инициализация строки test_str = `geeksforgeeks ` # вывод исходной строки print( "Исходная строка: " + str(test_str)) # использование replace() + " " для решения этой проблемы res = test_str.replace(" ", "") # результат печати print("Преобразованная строка: " + str (res)) 

Вывод:

Исходная строка: geeksforgeeks Преобразованная строка: geeksforgeeks 

Вертикальная строка печати — Python3.2

Вопрос StackOverflow

Я пишу скрипт, который займет в виде строки, введенной пользователем, и вывести ее вертикально, например:

input = "Джон пошел в магазин" output = J wttsoaoohthleonkreed 

Я написал больше всего кода, который выглядит следующим образом:

import  sys def verticalPrint(astring): wordList = asstring.split(" ") wordAmount = len(wordList) maxLen = 0 для я в диапазон (wordAmount): length = len(wordList[i]) if length >= maxLen: maxLen = length ### делает все слова одинаковой длины, чтобы избежать ошибок диапазона ### для i в диапазоне (wordAmount): if len(wordList[i]) < maxLen: wordList[i] = wordList[i] + (" ")*(maxLen-len( wordList[i])) для я в диапазоне (wordAmount): для j в диапазоне (maxLen): print(wordList[i][j]) def main(): astring = input("Введите строку:" + ` `) verticalPrint(astring) main() 

Я не могу понять, как получить вывод правильный. Я знаю, что это проблема с циклом for. Вывод:

input = "Джон шел" output = Джон шел 

Есть совет? (Кроме того, я хочу, чтобы команда print использовалась только один раз.)

Ответ:

Используйте itertools.zip_longest:

>>> из itertools импорт zip_longest >> > text = "Джон шел в магазин" для x в zip_longest(*text.split(), fillvalue=` `): print (` `.join(x)) ...  J wttsoaoohthleonkreed 

Предположим, у нас есть строка s. Мы должны найти все слова по вертикали в том же порядке, в котором они стоят в s. Здесь слова возвращаются в виде списка строк, при необходимости приходится заполнять пробелы. (Конечные пробелы не допускаются.) Каждое слово будет помещено только в один столбец, и в одном столбце будет только одно слово. Таким образом, если входная строка "LIKE YOU?", то вывод будет ["HAY", "ORO", "WEU", "WEU"]

Чтобы решить эту проблему, мы будем следовать следующие шаги:

  • s:= составить список строк, разделенных пробелами, создать один пустой массив x, установить строку = 0
  • для каждого слова I в s, установить строку: = max of row and length of i
  • col:= length of s
  • сделать один массив и заполнить пустой строкой, а его размер равен строке
  • для I в диапазоне от 0 до col ‚Äì 1
    • j:= 0
    • в то время как j < длина s[i]
      • в то время как i – длина ans[j] >= 1, do ans[j]:= ans[j] concatenate " ‚"
      • ans[j]:= ans[j] concatenate s[i , j]
      • увеличить j на 1
  • вернуть ans
  • class Solution(object): def printVertically(self, s ): s = s.split(" ") x = [] row = 0 для i в s: row = max(row, len(i)) col = len(s) ans = ["" для i в диапазоне( row)] j = 0 for i in range(col): j = 0, while j < len(s[i]): #print(j, i) while i - len(ans[j]) >= 1: ans [j] += " " ans[j] += s[i][j] j += 1 return ans ob = Solution() print(ob.printVertically("КАК ТЫ")) print(ob.printVertically("БЫТЬ ИЛИ НЕ БЫТЬ")) 

    Ввод:

    "КАК ТЫ" "БЫТЬ ИЛИ НЕ БЫТЬ" 

    Вывод:

    ["HAY","ORO","WEU"]["TBONTB", "ОЭРООЕ", "Т"]