J'écris un code pour garder une trace des médailles gagnées par des pays qui sont renvoyés comme une liste des chaînes. Exemple de format: voici mon code jusqu'à présent: p> devrait revenir: p> Je reçois une erreur de type sur la ligne 20: p> Je ne sais pas pourquoi.
Quelqu'un peut-il expliquer comment je pourrais résoudre ce problème?
Merci d'avance! P> p>
3 Réponses :
Vous avez eu quelques problèmes avec votre code:
Voici une version de travail mise à jour p> sortie p>
Votre problème existe dans cette ligne:
Lorsque vous Lorsque vous l'exécutez: p> remarquer comment le la solution est soit simplement utiliser médaaltracker = [medaltracker.append (i) pour i in Allcountries] code> p> APPendez code > A Liste code>, il modifie la liste code> en place mais renvoie Aucun code>. Vous pouvez voir un peu plus plus clairement plus clair ce qui se passe ici: p> Medaltracker CODE> ID d'objet et valeurs ont changé après la compréhension de votre liste? C'est parce qu'après la compréhension de la liste terminée la boucle et l'adhension de la liste, il a également créé une liste de Aucun code> s et réaffectant cette liste (un nouvel objet) pour remplacer votre médaillier code> existant code>. MedAlTracker = liste (Allcountries) code>, ou si vous souhaitez ajouter, utilisez A pour la boucle: P> for i in allCountries:
medalTracker.append(i)
Tout d'abord, il est généralement fronça les sourcils pour utiliser des lettres majuscules pour autre chose que des classes. Se déplacer sur ...
def generate(results):
"""
return list of strings
based on data in results, a list of strings
"""
# [country_code, gold_count, silver_count, bronze_count ]
allCountries = []
for i in results:
x = i.split()
for country in x:
allCountries.append(country)
allCountries = list(set(allCountries))
medalTracker = []
# medalTracker = list(medalTracker)
for i in allCountries:
goldCount, silverCount, bronzeCount = 0, 0, 0
index = allCountries.index(i)
for rank in results:
rank = rank.split(' ')
if rank[0] == i:
goldCount += 1
elif rank[1] == i:
silverCount += 1
elif rank[2] == i:
bronzeCount += 1
medalTracker.append({i: {'goldCount': goldCount, 'silverCount': silverCount, 'bronzeCount': bronzeCount}})
print(generate(["ITA JPN AUS", "KOR TPE UKR", "KOR KOR GBR", "KOR CHN TPE"]))
Vérifiez
médaaltracker code>. Il contient des non. Pourquoi êtes-vous ajouté dans une compréhension de la liste?Medaltracker = [MedalTracker.Append (i) pour I dans Allcountries] code> est identique àMedaltracker = Liste (Allcountries) Code>;)Voulez-vous dire
médaaltracker = liste (AllCountries) code>?@azro pas tout à fait,
[i pour i dans Allcountries] code> serait équivalent@azro Nope,
Medaltracker code> sera toutAucun code> s. Pas équivalent.Ne voyez pas la valeur de Haha, laissez-vous pour ce post: D
Votre intention est-elle juste de créer une copie peu profonde de
AllCountries code>?médaaltracker.append (i) code> renvoieAucun code> mais ajoute la liste à sa place. C'est ce qui vous cause une erreur.Je pense que vous voulez probablement que MedalTracker soit un dictionnaire code> qui détient les valeurs de
allCountries code> comme clé code> et valeurs dansrésultats code> comme leurvaleurs code>.