-3
votes

Je ne suis pas capable de réparer un problème de code dans Python

J'essaie de définir 2 fonctions, mais seulement has_33 code> fonctionne et myfunction code> ne fonctionne pas.

J'essaie ce code dans Jupyter Notebook: p> xxx pré>

et ce code: p>

def has_33(nums):
    for i in range(0, len(nums)-1):
        if nums[i:i+2] == [3,3]:
            return True  
    return False


5 commentaires

C'est à cause de l'indentation. Dans MyFunction , si la condition num [0: 2] == [3,3] n'est pas satisfait, la fonction renvoie immédiatement False. Alors que dans has_33 , il iTère via une liste complète, puis ne reviendra que FALSE s'il n'y a pas de consécutif [3,3] .


@AneShPalsule: Vous pourriez peut-être écrire votre commentaire comme réponse.


@quamrana Le problème avec la rédaction de cela comme une réponse est que le problème d'indentation sous-jacent est dupliqué ad nauseam et est un peu plus qu'une faute de frappe (faite par une personne qui ne réalise pas la signification de ces fautes de frappe)


@Johncoleman: Oui, j'aimerais que quelque chose puisse être fait à propos de ce problème éternel. Mais dans le même temps, il y a un autre utilisateur qui a besoin d'encouragement.


@Quamrana Une partie du problème est que même si ce bogue apparaît tout le temps, il y a rarement une bonne cible en double (surtout celle que la personne demandant au problème pourrait être raisonnablement prévue de trouver). S'ils savaient chercher une indentation, ils seraient capables de résoudre leur propre problème sans demander.


3 Réponses :


0
votes

Salut, il y a une différence de tige dans le code: Dans la première fonction, le second retour est à l'intérieur de la boucle où, comme dans la deuxième fonction, il est hors de la boucle:

donc dans la première fonction lorsque si la condition est fausse et que cela se passe au deuxième retour et renvoie false pour la première valeur 0

dans la deuxième fonction Si l'évaluation conserve False jusqu'à ce que je soit 3 et pour la boucle n'exécute pas le retour. Une fois que si l'évaluation est devenue truelle sur i = 0, il exécute le retour de si et le retour de VRAI de sorte que le contrôle sort de la fonction et un deuxième retour de pour ne pas être exécuté:

première fonction corrigée: xxx


0 commentaires

0
votes

Erreur d'indentation! Juste besoin d'effacer une empiète de la dernière ligne de votre premier code. La boucle pour retournera faux maintenant. Essayez comme ceci: xxx


0 commentaires

0
votes

Poster mon commentaire comme une réponse suggérée par @quamrana.

Ce comportement est dû à l'indentation. Dans myfunction code>, si la condition nums [0: 2] == [3,3] code> n'est pas satisfait, la fonction renvoie immédiatement false code> . Tandis que dans has_33 code>, il iTère via une liste entière, puis retournera false code> s'il n'y a pas de consécutif [3,3] code>. P >

EG P>

nums = [1,2,3,3,5]

has_33(nums)
True


0 commentaires