J'essaie de formater cette chaîne ci-dessous où une ligne contient cinq mots. Cependant, je continue à avoir ceci comme sortie:
J aime les biscuits oui je vois un chien
Premièrement, je ne reçois pas 5 mots sur une ligne, mais tout sur une ligne.
Deuxièmement, pourquoi le "Let's" est-il divisé? Je pensais qu'en scindant la chaîne en utilisant des "mots", il ne se séparerait que s'il y avait un espace entre les deux?
Suggestions?
string = """I love cookies. yes I do. Let's see a dog."""
# split string
words = re.split('\W+',string)
words = [i for i in words if i != '']
counter = 0
output=''
for i in words:
if counter == 0:
output +="{0:>15s}".format(i)
# if counter == 5, new row
Elif counter % 5 == 0:
output += '\n'
output += "{0:>15s}".format(i)
else:
output += "{0:>15s}".format(i)
# Increase the counter by 1
counter += 1
print(output)
Pour commencer, n'appelez pas une variable "chaîne" car elle masque le module avec le même nom
Deuxièmement, utilisez split()
pour fractionner vos mots
>>> s = """I love cookies. yes I do. Let's see a dog."""
>>> s.split()
['I', 'love', 'cookies.', 'yes', 'I', 'do.', "Let's", 'see', 'a', 'dog.']
De re-module
\ W Correspond à tout caractère qui n'est pas un caractère Word Unicode. C'est l'opposé de\w. Si le drapeau ASCII est utilisé, il devient l’équivalent de [^ a-zA-Z0-9_] (mais ce drapeau affecte toute l’expression régulière. Ainsi, dans ce cas, vous utilisez un [^ a-zA-Z0- 9_] peut être un meilleur choix).
Puisque le '
ne figure pas dans la liste ci-dessus, l’expression rationnelle utilisée divise la chaîne "Let's" en deux parties:
>>> words = re.split('\W+', s)
>>> words
['I', 'love', 'cookies', 'yes', 'I', 'do', 'Let', 's', 'see', 'a', 'dog', '']
Voici le résultat obtenu en utilisant la méthode strip () - ci-dessus:
$ ./sp3.py
I love cookies. yes I
do. Let's see a dog.
Le code pourrait probablement être simplifié à ceci depuis counter==0
et la clause else fait la même chose. Je passe dans un énumérer là aussi pour me débarrasser du compteur:
#!/usr/bin/env python3
s = """I love cookies. yes I do. Let's see a dog."""
words = s.split()
output = ''
for n, i in enumerate(words):
if n % 5 == 0:
output += '\n'
output += "{0:>15s}".format(i)
print(output)
words = string.split()
while (len(words))
for Word in words[:5]
print(Word, end=" ")
print()
words = words[5:]
C'est le concept de base, divisez-le en utilisant la méthode split ()
Puis coupez-le en utilisant la notation slice pour obtenir les 5 premiers mots.
Puis coupez les 5 premiers mots, et bouclez à nouveau