Podany ciąg s. Zwróć wszystkie słowa pionowo w tej samej kolejności, w jakiej występują w s. Słowa są zwracane jako lista ciągów, w razie potrzeby uzupełniona spacjami. (Chodzenie po schodach jest zabronione). Każde słowo zostanie umieszczone tylko w jednej kolumnie i będzie tylko jedno słowo w kolumnie.
Przykład 1:
Input: s = "JAK SIĘ TY" Wyjście: ["HAY ","ORO","WEU"] Objaśnienie: Każde słowo jest drukowane pionowo. "HAY" "ORO" "WEU"
Przykład 2:
Wejście: s = "BYĆ ALBO NIE BYĆ" Wyjście: ["TBONTB","OEROOE"," T"] Objaśnienie: Spacje na końcu są niedozwolone. "TBONTB" "OEROOE" "T"
Przykład 3:
Wejście: s = "KONKURS NADCHODZI" Wyjście: ["CIC","OSO","NM", "TI","EN","SG","T"]
Ograniczenia:
- 1 <= s.length <= 200
- s zawiera tylko wielkie litery angielskie.
- Gwarantujemy, że jest tylko jedna spacja między dwoma słowami.
Metoda nr 1: [Poziomo do pionu] przy użyciu pętli + " ‚ù
W tym przypadku dodajemy znak nowej linii po każdym znaku, aby każdy element był renderowany w następnym wierszu.
# Kod Python3 demonstrujący działanie # Interconvert Poziomo i Vertical String # using [Horizontal to Vertical] using loop + " " # inicjowanie ciągu test_str = `geeksforgeeks` # drukowanie oryginalnego String print("Oryginalny ciąg to: " + str(test_str)) # używanie pętli do dodawania " " po każdym znak res = `` for ele in test_str: res += ele + " " # wynik drukowania print("Przekonwertowany ciąg: " + str(res))
Wyjście:
Wyjście Oryginalny ciąg to: geeksforgeeks T przekonwertował ciąg: geeksforgeeks
Metoda nr 2: [Pionowo na poziomo] za pomocą replace() + „
W tym celu wykonujemy zadanie konwersji, usuwając „ przez zastąpienie pustym string.
# Kod Python3 demonstrujący działanie # Interkonwertuj w poziomie i w pionie String # używając [Vertical to Horizontal] using replace() + " " # inicjowanie string test_str = `geeksforgeeks ` # drukowanie oryginalnego String print( "Oryginalny ciąg to: " + str(test_str)) # użycie replace() + " " do rozwiązania tego problemu res = test_str.replace(" ", "") # wynik drukowania print("Przekonwertowany ciąg: " + str (res))
Wyjście:
Oryginalny ciąg to: geeksforgeeks Przekonwertowany ciąg: geeksforgeeks
Pionowy ciąg znaków — Python3.2
Pytanie StackOverflow
Piszę skrypt, który zajmie jako ciąg wprowadzony przez użytkownika i wydrukuj go pionowo, na przykład:
input = "Jan poszedł do sklepu" output = J wttsoaohthleonkreed
Napisałem większość kodu, który wygląda następująco:
import sys def verticalPrint(string): wordList = astring.split(" ") wordAmount = długość(wordList) maxLen = 0 dla i w zakres (wordAmount): length = len(wordList[i]) if length >= maxLen: maxLen = length ### powoduje, że wszystkie słowa mają tę samą długość, aby uniknąć błędów zakresu ### dla i w zakresie (wordAmount): if dł(wordList[i]) < maxLen: wordList[i] = wordList[i] + (" ")*(maxLen-długość( wordList[i])) dla i w zakresie (wordAmount): dla j w zakresie (maxLen): drukuj(wordList[i][j]) def główne(): ciąg = dane wejściowe("Wprowadź ciąg:" + ` `) verticalPrint(astring) main()
Mam problem ze znalezieniem danych wyjściowych prawidłowy. Wiem, że to problem z pętlą for. Jego dane wyjściowe to:
dane wejściowe = "John chodził" dane wyjściowe = Jan chodził
Jakaś rada? (Ponadto chcę, aby polecenie drukuj zostało użyte tylko raz.)
Odpowiedź:
Użyj itertools.zip_longest
:
>>> z itertools import zip_longest >> > text = "Jan poszedł do sklepu" dla x in zip_longest(*text.split(), fillvalue=` `): drukuj (` `.join(x)) ... J wttsoaohthleonkreed
Załóżmy, że mamy ciąg s. Musimy znaleźć wszystkie słowa pionowo w tej samej kolejności, w jakiej występują w s. Tutaj słowa są zwracane jako lista ciągów, jeśli to konieczne, musimy wypełnić spacje. (Spacje końcowe są niedozwolone.) Każde słowo zostanie umieszczone tylko w jednej kolumnie, aw jednej kolumnie będzie tylko jedno słowo. Tak więc, jeśli ciąg wejściowy to „LUBI CIEBIE?”, to wynikiem będzie [„HAY”, „ORO”, „WEU”
Aby rozwiązać ten problem, zastosujemy następujące kroki:
- j:= 0
- podczas gdy j < długość s[i]
- podczas gdy ja – długość ans[j] >= 1, wykonaj ans[j]:= ans[j] połącz " ‚
- ans[j]:= ans[j] połącz s[i , j]
- zwiększ j o 1
class Solution(object): def printVertically(self, s ): s = s.split(" ") x = [] row = 0 for i in s: row = max(row, len(i)) col = len(s) ans = ["" for i in range( wiersz)] 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("JAK JESTEŚ")) print(ob.printVertically("BYĆ ALBO NIE BYĆ"))
Wejście:
"JAK JESTEŚ" "BYĆ ALBO NIE BYĆ"
Wyjście:
["HAY","ORO","WEU"] ["TBONTB", „OEROOE”, „T”]