CodingBat sum67: pourquoi est-ce une solution de mal?

Je suis en train de travailler sur la suite de codingbat problème:

Retour à la somme des nombres dans le tableau, à l'exception ignorer les sections de numéros commençant par un 6 et s'étendant jusqu'à la prochaine 7 (tous les 6 sera suivie par au moins un 7). De retour de 0 pour pas de numéros.

sum67([1, 2, 2])  5
sum67([1, 2, 2, 6, 99, 99, 7])  5
sum67([1, 1, 6, 7, 2])  4

Ma solution est la suivante:

def sum67(nums):
    sum = 0 
    throwaway = 0
    for i in range(len(nums)):
        if throwaway == 0:
            if nums[i] == 6:
                throwaway = 1
        elif throwaway == 1 and i > 0 and nums[i-1] == 7:
            throwaway = 0
        if throwaway == 0:
            sum += nums[i]
    return sum

Je suis totalement d'sais que ce n'est pas la meilleure solution, mais je suis juste curieux de savoir pourquoi c'est mauvais. Pourriez-vous svp m'expliquer pourquoi c'est faux, et dans lequel cas particulier, il donne un mauvais résultat?

  • Êtes-vous conscient de la bool type?
  • for i in range(len(nums))? Eek!
  • totalement [k]maintenant, ce n'est pas la meilleure solution" -- il n'y a que peu de sens de critiquer son style. En dehors de n'être pas très "pythonic", il n'y a rien de mal avec for i in range(len(seq)):
  • Merci Ferdinand! Facile pour moi, les gars! Cependant, je ne sais for i in range(len(seq)): n'est pas très pythonic, mais je voulais passer à l'élément précédent de la liste à l'aide [i-1]. Évidemment, ce n'est pas nécessaire, mais j'ai juste écrit la première solution qui est venu à mon esprit, sans beaucoup de réflexion (comme vous pouvez le dire...), Le grand Nick aurait pu ajouter visible comme le test d'un Ferdinand suggéré: sum67([6,7,6,7]) -> 0, juste pour prendre mon erreur en compte. Bonne journée les gars!
InformationsquelleAutor Wilco | 2011-12-05