Stampare le parole verticalmente in Python

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

La stringa data s. Restituisci tutte le parole verticalmente nello stesso ordine in cui appaiono in s. Le parole vengono restituite come un elenco di stringhe, riempito con spazi quando necessario. (Non è consentito camminare sui gradini). Ogni parola sarà inserita solo in una colonna e ci sarà solo una parola per colonna.

Esempio 1:

Input: s = "COME SEI" Output: ["HAY ","ORO","WEU"] Spiegazione: Ogni parola viene stampata verticalmente. "HAY" "ORO" "WEU" 

Esempio 2:

Input: s = "ESSERE O NON ESSERE" Output: ["TBONTB","OEROOE"," T"] Spiegazione: Gli spazi finali non sono consentiti. "TBONTB" "OEROOE" " T" 

Esempio 3:

Input: s = "CONTEST IS COMING" Output: ["CIC","OSO","NM", "TI","EN","SG","T"] 

Vincoli:

  • 1 <= s.lunghezza <= 200
  • s contiene solo lettere inglesi maiuscole.
  • È garantito che ci sia solo uno spazio tra 2 parole.

Metodo n. 1: [da orizzontale a verticale] usando il loop + " ‚"

In questo, aggiungiamo un carattere di nuova riga dopo ogni carattere in modo che ogni elemento venga renderizzato alla riga successiva.

# Codice Python3 per dimostrare il funzionamento di # Interconvert Horizontal e Stringa verticale # usando [Orizzontale a Verticale] usando loop + " " # inizializzazione stringa test_str = `geeksforgeeks` # stampa stringa originale print("La stringa originale è: " + str(test_str)) # using loop per aggiungere " " dopo ogni carattere res = `` for ele in test_str: res += ele + " " # print result print("La stringa convertita: " + str(res)) 

Output:

 Output La stringa originale è: geeksforgeeks T ha convertito la stringa: geeksforgeeks 

Metodo n. 2: [da verticale a orizzontale] usando replace() + " ‚"

In questo, eseguiamo il compito di conversione rimuovendo " ‚" per sostituzione con vuoto string.

# Codice Python3 per dimostrare il funzionamento di # Interconvert Horizontal and Vertical String # usando [Vertical to Horizontal] using replace() + " " # initializing string test_str = `geeksforgeeks ` # printing original String print( "La stringa originale è: " + str(test_str)) # using replace() + " " per risolvere questo problema res = test_str.replace(" ", "") # print result print("La stringa convertita: " + str (res)) 

Output:

La stringa originale è: geeksforgeeks La stringa convertita: geeksforgeeks 

Stringa di stampa verticale - Python3.2

Domanda StackOverflow

Sto scrivendo uno script che richiederà come stringa immessa dall`utente e stamparla verticalmente, in questo modo:

input = "John è andato al negozio" output = J wttsoaohthleonkreed 

Ho scritto di più del codice, che è il seguente:

import  sys def verticalPrint(astring): wordList = astring.split(" ") wordAmount = len(wordList) maxLen = 0 per i in intervallo (wordAmount): lunghezza = len(wordList[i]) if lunghezza >= maxLen: maxLen = lunghezza ### rende tutte le parole della stessa lunghezza per evitare errori di intervallo ### per i in intervallo (wordAmount): se len(wordList[i]) < maxLen: wordList[i] = wordList[i] + (" ")*(maxLen-len( wordList[i])) per i in intervallo (wordAmount): per j in intervallo (maxLen): stampa(wordList[i][j]) def main(): astring = input("Inserisci una stringa:" + ` `) verticalPrint(astring) main() 

Ho problemi a capire come ottenere l`output corretta. So che è un problema con il ciclo for. Il suo output è:

input = "Giovanni camminava" output = Giovanni camminava 

Qualche consiglio? (Inoltre, voglio che il comando stampa venga utilizzato solo una volta.)

Risposta:

Usa itertools.zip_longest:

>>> da itertools import zip_longest >> > text = "John è andato al negozio" per x in zip_longest(*text.split(), fillvalue=` `): stampa (` `.join(x)) ...  J wttsoaohthleonkreed 

Supponiamo di avere la stringa s. Dobbiamo trovare tutte le parole verticalmente nello stesso ordine in cui compaiono in s. Qui le parole vengono restituite come un elenco di stringhe, se necessario dobbiamo riempire degli spazi. (Gli spazi finali non sono consentiti.) Ogni parola verrà inserita in una sola colonna e ci sarà solo una parola in una colonna. Pertanto, se la stringa di input è "LIKE YOU?", l`output sarà ["HAY‚", "ORO‚", "WEU‚"]

Per risolvere questo problema, seguiremo il seguenti passaggi:

  • s:= crea un elenco di stringhe divise per spazi, crea un array vuoto x, imposta riga = 0
  • per ogni parola I in s, imposta riga: = max di riga e lunghezza di i
  • col:= lunghezza di s
  • crea un array e riempilo con una stringa vuota, e la sua dimensione è la riga
  • per I nell`intervallo da 0 a col ‚Äì 1
    • j:= 0
    • mentre j < lunghezza di s[i]
      • mentre i ‚Äì lunghezza di ans[j] >= 1, do ans[j]:= ans[j] concatenate " ‚"
      • ans[j]:= ans[j] concatenate s[i , j]
      • incrementa j di 1
  • return ans
  • class Solution(object): def printVertical(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( row)] 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.printVertical("COME SEI")) print(ob.printVertical("ESSERE O NON ESSERE")) 

    Input:

    "COME SEI" "ESSERE O NON ESSERE" 

    Output:

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