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:
- 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
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"]