5

次のように、ユーザーが入力した文字列を垂直に出力するスクリプトを作成しています。

input = "John walked to the store"

output = J w t t s
         o a o h t
         h l   e o
         n k     r
           e     e
           d

次のように、ほとんどのコードを作成しました。

import sys

def verticalPrint(astring):
    wordList = astring.split(" ")
    wordAmount = len(wordList)

    maxLen = 0
    for i in range (wordAmount):
        length = len(wordList[i])
        if length >= maxLen:
            maxLen = length

    ### makes all words the same length to avoid range errors ###
    for i in range (wordAmount):
        if len(wordList[i]) < maxLen:
            wordList[i] = wordList[i] + (" ")*(maxLen-len(wordList[i]))

    for i in range (wordAmount):
        for j in range (maxLen):
            print(wordList[i][j])

def main():
    astring = input("Enter a string:" + '\n')

    verticalPrint(astring)

main()

出力を正しく取得する方法がわかりません。for ループに問題があることはわかっています。出力は次のとおりです。

input = "John walked"

output = J
         o
         h
         n

         w
         a
         l
         k
         e
         d

何かアドバイス?(また、印刷コマンドを一度だけ使用したい。)

4

3 に答える 3

10

使用itertools.zip_longest:

>>> from itertools import zip_longest
>>> text = "John walked to the store"
for x in zip_longest(*text.split(), fillvalue=' '):
    print (' '.join(x))
...     
J w t t s
o a o h t
h l   e o
n k     r
  e     e
  d      
于 2013-10-27T19:07:58.310 に答える