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!
Vous devez vous connecter pour publier un commentaire.
Bien, votre programme a un bug. Vérifier les résultats de l'suivantes:
Ce sera d'impression:
Si un 7 est suivie par un 6 immédiatement, vous devrez ajouter le 6 et tous les numéros suivants. Je ne suis pas sûr si plus d'une gamme de 6 ... 7 est autorisée dans l'entrée, mais si c'est le cas, vous devez corriger votre algorithme.
Cette simple mise en œuvre ne retour bons numéros:
En outre, si vous n'avez pas besoin d'utiliser un index pour quelques obscures raisons, vous pouvez directement effectuer une itération sur les éléments d'une liste (
for element in list: ...
).sum67([6,7,6,7]) -> 0
state
variable dans ma solution unbool
(True
ouFalse
), mais l'entier solution a l'avantage que vous pouvez avoir plus de deux membres et est, à mon avis, plus pédagogique. Content d'avoir pu aider!Ci-dessous est ma solution pour votre référence:
Juste pour ajouter, si le dernier élément est un 7, vous n'avez pas besoin de parcourir chaque élément. La question des états " 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)". Une fois que vous trouver un 6, vous pouvez simplement vérifier si le dernier élément est un 7 et si tout simplement sortir et de retourner la somme; sinon, vous pouvez continuer à passer par les éléments restants. Ceci est utile lorsque vous travaillez avec un grand nombre d'éléments dans un tableau.
ex. [1, 2, 2, 6, 99, 99, 2, 99, 99, 2, 99, 99, 2, 99, 99, 7]
Ma solution:
Voici ma solution à ce problème. Comme déjà répondu, le problème est lorsqu'un 6 se produit immédiatement après un 7. J'ai résolu ce problème de manière un peu différente, j'ai donc pensé à la poste.
Ma solution:
Je sais que ce n'est pas la meilleure solution, mais la pensée à l'action :
C'est mon montage de @TheNeophyte code. J'ai aimé cette solution parce que je serais probablement approcher le problème. La seule édition était vraiment de prendre le
et juste mettre un elif déclaration sans dire
puisqu'il n'est pas nécessaire de nouveau après la première boucle while.
Mon montage ci-dessous VVV
voici mes 6 liner réponse. Espérons que cela aide
Bien, vous pourriez utiliser des boucles imbriquées..
Ma solution pour cela, je Sais que c'est assez lisible mais pas le meilleur code:
J'espère que cela aide:)