Druk woorden verticaal af in Python

| | | | | | | | | | | | | | | | | | | | | |

De gegeven string s. Retourneer alle woorden verticaal in dezelfde volgorde als ze in s voorkomen. Woorden worden geretourneerd als een tekenreekslijst, waar nodig opgevuld met spaties. (Op de trappen lopen is niet toegestaan). Elk woord zal slechts in één kolom worden geplaatst en er zal slechts één woord per kolom zijn.

Voorbeeld 1:

Invoer: s = "HOE BEN JE" Uitvoer: ["HAY ","ORO","WEU"] Uitleg: Elk woord wordt verticaal afgedrukt. "HAY" "ORO" "WEU" 

Voorbeeld 2:

Invoer: s = "TO BE OR NOT TO BE" Uitvoer: ["TBONTB","OEROOE"," T"] Uitleg: Spaties achteraan zijn niet toegestaan. "TBONTB" "OEROOE" " T" 

Voorbeeld 3:

Invoer: s = "WEDSTRIJD KOMT" Uitvoer: ["CIC","OSO","NM", "TI","EN","SG","T"] 

Beperkingen:

  • 1 <= s.length <= 200
  • s bevat alleen Engelse hoofdletters.
  • Er is gegarandeerd slechts één spatie tussen 2 woorden.

Methode #1: [Horizontaal naar Verticaal] met lus + " ‚"

Hierin voegen we een teken voor een nieuwe regel toe na elk teken, zodat elk element op de volgende regel wordt weergegeven.

# Python3-code om de werking van # Interconvert Horizontal en Vertical String # gebruik [Horizontaal naar verticaal] met loop + " " # initialisatie string test_str = `geeksforgeeks` # print original String print("De originele string is: " + str(test_str)) # gebruik lus om " " toe te voegen na elke karakter res = `` voor ele in test_str: res += ele + " " # printresultaat print("De geconverteerde string: " + str(res)) 

Uitvoer:

 Uitvoer De originele string is: geeksforgeeks T hij converteerde string: geeksforgeeks 

Methode #2: [Verticaal naar Horizontaal] met behulp van Replace() + " ‚"

Hierin voeren we de taak van conversie uit door het verwijderen van " ‚" door vervanging door leeg string.

# Python3-code om de werking te demonstreren van # Interconvert Horizontal and Vertical String # met [Vertical to Horizontal] met Replace() + " " # initializing string test_str = `geeksforgeeks ` # originele afdrukken String print( "De originele string is: " + str(test_str)) # gebruik Replace() + " " om dit probleem op te lossen res = test_str.replace(" ", "") # printing result print("De geconverteerde string: " + str (res)) 

Uitvoer:

De originele string is: geeksforgeeks De geconverteerde string: geeksforgeeks 

Vertical Print String - Python3.2

StackOverflow-vraag

Ik schrijf een script dat als door de gebruiker ingevoerde tekenreeks en druk deze verticaal af, zoals zo:

input = "John liep naar de winkel" output = J wttsoaohthleonkreed 

Ik heb het meest geschreven van de code, die als volgt is:

import  sys def verticalPrint(astring span>): wordList = astring.split(" ") wordAmount = len(wordList) maxLen = 0 voor i in bereik (wordAmount): lengte = len(wordList[i]) if lengte >= maxLen: maxLen = lengte ### maakt alle woorden even lang om bereikfouten te voorkomen ### voor i in bereik (wordAmount): if len(wordList[i]) < maxLen: wordList[i] = wordList[i] + (" ")*(maxLen-len( wordList[i])) voor i in bereik (wordAmount): voor j in bereik (maxLen): print(wordList[i][j]) def main(): astring = input("Voer een tekenreeks in:" + ` `) verticalPrint(astring) main() 

Ik heb problemen om erachter te komen hoe ik de uitvoer kan krijgen correct. Ik weet dat het een probleem is met de for-lus. De output is:

input = "John liep" output = J ohn liep 

Enig advies? (Ik wil ook dat de opdracht print maar één keer wordt gebruikt.)

Antwoord:

Gebruik itertools.zip_longest:

>>> van itertools import zip_longest >> > text = "John liep naar de winkel" voor x in zip_longest(*text.split(), fillvalue=` `): afdrukken (` `.join(x)) ...  J wttsoaohthleonkreed 

Stel dat we string s hebben. We moeten alle woorden verticaal zoeken in dezelfde volgorde als waarin ze in s voorkomen. Hier worden de woorden geretourneerd als een lijst met strings, indien nodig moeten we spaties invullen. (Spaties zijn niet toegestaan.) Elk woord wordt in slechts één kolom geplaatst en er zal slechts één woord in één kolom staan. Dus als de invoerreeks "LIKE YOU?" is, dan is de uitvoer ["HAY‚", "ORO‚", "WEU‚"]

Om dit probleem op te lossen, volgen we de volgende stappen:

  • s:= maak een lijst met strings gesplitst door de spaties, maak een lege array x, stel rij = 0 in
  • voor elk woord I in s, stel rij in: = max van rij en lengte van i
  • col:= lengte van s
  • maak één array en vul deze met een lege string, en de grootte is de rij
  • voor I in bereik 0 tot col ‚Äì 1
    • j:= 0
    • terwijl j < lengte van s[i]
      • terwijl i ‚Äì lengte van ans[j] >= 1, doe ans[j]:= ans[j] samenvoegen " ‚"
      • ans[j]:= ans[j] samenvoegen s[i , j]
      • verhoog j met 1
  • return ans
  • class Oplossing(object): def printVertical(self, s ): s = s.split(" ") x = [] rij = 0 voor i in s: rij = max(rij, len(i)) col = len(s) ans = ["" voor i in bereik( rij)] j = 0 voor 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.printVertical("HOE BENT U")) print(ob.printVertical("TO BE OR NOT TO BE")) 

    Invoer:

    "HOE BENT U" "TO ZIJN OF NIET TE ZIJN" 

    Output:

    ["HAY","ORO","WEU"] ["TBONTB", "OEROOE", "T"]