6

I'm writing a script that will take as user inputed string, and print it vertically, like so:

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

I've written most of the code, which is as follows:

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()

I'm having trouble figure out how to get the output correct. I know its a problem with the for loop. It's output is:

input = "John walked"

output = J
         o
         h
         n

         w
         a
         l
         k
         e
         d

Any advice? (Also, I want to have the print command used only once.)

BennySunshine
  • 89
  • 1
  • 1
  • 6

3 Answers3

12

Use 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      
Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504
0

Thanks so much for the help! That definitely worked!

I ended up speaking to a friend of mine not long after posting this, and I modified the for loops to the following:

newline = ""

    for i in range (maxLen):
        for j in range (wordAmount):
            newline = newline + wordList[j][i]
        print (newline)
        newline = ""

which worked beautifully as well.

BennySunshine
  • 89
  • 1
  • 1
  • 6
-2
a = input()
for x in range (0,len(a)):
    print(a[x])
Michael
  • 3,093
  • 7
  • 39
  • 83
Suveil
  • 1
  • This does not solve the OP's problem, this will only print all letters in new lines, your indentation is messed and you did not add any explanation to your code, try to edit your answer or consider removing it, as it is incorrect. – Ruli Dec 09 '20 at 11:56