Imprimer des mots verticalement en Python

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

La chaîne donnée s. Renvoie tous les mots verticalement dans le même ordre qu`ils apparaissent dans s. Les mots sont renvoyés sous la forme d`une liste de chaînes, complétée par des espaces si nécessaire. (Marcher sur les marches n`est pas autorisé). Chaque mot ne sera placé que dans une seule colonne et il n`y aura qu`un seul mot par colonne.

Exemple 1 :

Entrée : s = "COMMENT VA TU" Sortie : ["HAY ","ORO","WEU"] Explication : Chaque mot est imprimé verticalement. "HAY" "ORO" "WEU" 

Exemple 2 :

Entrée : s = "ÊTRE OU NE PAS ÊTRE" Sortie : ["TBONTB","OEROOE"," T"] Explication : Les espaces de fin ne sont pas autorisés. "TBONTB" "OEROOE" " T" 

Exemple 3 :

Entrée : s = "CONCOURS ARRIVE" Sortie : ["CIC","OSO","NM", "TI","EN","SG","T"] 

Contraintes :

  • 1 <= s.length <= 200
  • s ne contient que des lettres anglaises majuscules.
  • Il est garanti qu`il n`y a qu`un seul espace entre 2 mots.

Méthode n°1 : [Horizontal vers Vertical] en utilisant la boucle + " ‚"

Dans ce cas, nous ajoutons un caractère de nouvelle ligne après chaque caractère afin que chaque élément soit rendu à la ligne suivante.

# code Python3 pour démontrer le fonctionnement de # Interconvert Horizontal and Chaîne verticale # en utilisant [Horizontal to Vertical] en utilisant loop + " " # chaîne d`initialisation test_str = `geeksforgeeks` # impression de la chaîne originale print("La chaîne originale est : " + str(test_str)) # utilisation de la boucle pour ajouter " " après chaque caractère res = `` pour ele dans test_str : res += ele + " " # impression du résultat print("La chaîne convertie : " + str(res)) 

Sortie :

 Sortie La chaîne d`origine est : geeksforgeeks T il a converti la chaîne : geeksforgeeks 

Méthode n°2 : [Vertical à Horizontal] en utilisant replace() + " ‚"

Dans ce cas, nous effectuons la tâche de conversion en supprimant " ‚" en remplaçant par vide string.

# Code Python3 pour démontrer le fonctionnement de # Interconvertir les chaînes horizontales et verticales # en utilisant [Vertical to Horizontal] en utilisant replace() + " " # initialisation de la chaîne test_str = `geeksforgeeks ` # impression de la chaîne originale print( "La chaîne d`origine est : " + str(test_str)) # en utilisant replace() + " " pour résoudre ce problème res = test_str.replace(" ", "") # impression du résultat print("La chaîne convertie : " + str (res)) 

Sortie :

La chaîne d`origine est : geeksforgeeks La chaîne convertie : geeksforgeeks 

Chaîne d`impression verticale - Python3.2

Question StackOverflow

J`écris un script qui prendra en tant que chaîne saisie par l`utilisateur et imprimez-la verticalement, comme suit :

input = "John est allé au magasin" output = J wttsoaohthleonkreed 

J`ai écrit la plupart du code, qui est le suivant :

import  sys def verticalPrint(astring) : wordList = astring.split(" ") wordAmount = len(wordList) maxLen = 0 pour je dans plage (wordAmount) : longueur = len(wordList[i]) if length >= maxLen : maxLen = length ### donne à tous les mots la même longueur pour éviter les erreurs de plage ### pour i dans plage (wordAmount) : if len(wordList[i]) < maxLen : wordList[i] = wordList[i] + (" ")*(maxLen-len( wordList[i])) pour i dans plage (wordAmount) : pour j dans plage (maxLen) : print(wordList[i][j]) def main() : astring = entrée("Entrez une chaîne :" + ` `) verticalPrint(astring) main() 

J`ai du mal à comprendre comment obtenir la sortie correct. Je sais que c`est un problème avec la boucle for. Sa sortie est :

input = "John a marché" output = J ohnwalked 

Un conseil ? (De plus, je souhaite que la commande print ne soit utilisée qu`une seule fois.)

Réponse :

Utilisez itertools.zip_longest :

>>> de itertools import zip_longest >> > text = "John est allé au magasin" pour x dans zip_longest(*text.split(), fillvalue=` `) : imprimer (` `.join(x)) ...  J wttsoaohthleonkreed 

Supposons que nous ayons la chaîne s. Nous devons trouver tous les mots verticalement dans le même ordre dans lequel ils apparaissent dans s. Ici, les mots sont renvoyés sous forme de liste de chaînes, si nécessaire, nous devons remplir des espaces. (Les espaces de fin ne sont pas autorisés.) Chaque mot sera placé dans une seule colonne et il n`y aura qu`un seul mot dans une colonne. Ainsi, si la chaîne d`entrée est "LIKE YOU ?", alors la sortie sera ["HAY‚", "ORO‚", "WEU‚"]

Pour résoudre ce problème, nous suivrons la étapes suivantes :

  • s := faites une liste de chaînes séparées par les espaces, créez un tableau x vide, définissez row = 0
  • pour chaque mot I dans s, définissez row : = max de ligne et longueur de i
  • col := longueur de s
  • faire un tableau et rempli de chaîne vide, et sa taille est la ligne
  • for I in range 0 to col ‚Äì 1
    • j:= 0
    • tandis que j < longueur de s[i]
      • tandis que i ‚Äì longueur de ans[j] >= 1, faire ans[j]:= ans[j] concaténer " ‚"
      • ans[j]:= ans[j] concaténer s[i , j]
      • augmenter j de 1
  • return ans
  • 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( 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 retour ans ob = Solution() print(ob.printVertically("COMMENT VA TU")) print(ob.printVertically("ÊTRE OU NE PAS ÊTRE")) 

    Saisie :

    "COMMENT ÊTES-VOUS" "ÊTRE OU NE PAS ÊTRE" 

    Sortie :

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