0
votes

Comment faire une instruction si fonctionne une seule fois

J'ai fait une idée simple si la déclaration de Python 3 qui vérifie s'il y a un mot spécifique à l'intérieur d'une ligne et si cela change la valeur de la phrase. Dans l'exemple ci-dessous, je vous montre le code de la virgule. Problème est que j'ai besoin de cette déclaration pour ne postuler qu'une seule fois par ligne et que je me fâche en essayant de le mettre en œuvre.

C'est le code P>

Let me see your hard work
Come on, work harder


2 commentaires

Changer ce second si sur elif de sorte qu'il est ignoré si le premier si réussit.


Avez-vous essayé de garder un drapeau, qui serait faux initialement. Après d'abord, si vous le rendez vrai et une fois qu'il est vrai, il n'est pas nécessaire d'exécuter la première instruction si elle est vraie.


4 Réponses :


0
votes

re.sub a un paramètre de comptage qui vous permet de spécifier un nombre maximum de substitutions. Essayez re.sub (',', '\ n', ligne, compte = 1) .


0 commentaires

0
votes

Je n'ai pas testé cela, mais si vous ajoutez une déclaration de pause après avoir substitué la nouvelle ligne de la virgule, il doit quitter la boucle après avoir fractionné le texte une seule fois.

if n >= 30 and ', ' in line and line.find(', ') >= 20:
    line = re.sub(', ', '\n', line)
    break


1 commentaires

J'ai essayé de casser la pause mais j'ai d'autres personnes si des déclarations après celui-ci, ce n'était donc pas une option. Steele Farnsworth a fourni la réponse correcte Tho :)



0
votes

Ceci éclate la ligne de division de la ligne dans sa propre fonction de clarté, renvoyant une liste de lignes. Avec la liste, vous pouvez ré-ajouter les pauses de ligne comme vous le souhaitez.

phrase = "Let me see your hard work, come on, work harder"

MAX_LINE_LENGTH = 30

SPLIT_CHARS = ', '
SPLIT_CHARS_LENGTH = 19

def split_line(line) -> list:
    result = [line]
    if len(line) > MAX_LINE_LENGTH and SPLIT_CHARS in phrase[SPLIT_CHARS_LENGTH:]:
        split_index = SPLIT_CHARS_LENGTH + phrase[19:].find(SPLIT_CHARS)
        initial = line[:split_index]
        remaining = line[split_index + len(SPLIT_CHARS):].capitalize()
        result = [initial, remaining]
    return result

for line in testo.splitlines():
    parts = split_line(line)
    new_lines = "\n".join(parts)


0 commentaires

0
votes

Vous pouvez faire quelque chose comme ceci:

finished = False

if condition and not finished:
    do_something()
    finished = True


0 commentaires