0
votes

Fixation des non-types

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: xxx

voici mon code jusqu'à présent: xxx

devrait revenir: xxx

Je reçois une erreur de type sur la ligne 20: xxx

Je ne sais pas pourquoi. Quelqu'un peut-il expliquer comment je pourrais résoudre ce problème? Merci d'avance!


9 commentaires

Vérifiez médaaltracker . Il contient des non. Pourquoi êtes-vous ajouté dans une compréhension de la liste?


Medaltracker = [MedalTracker.Append (i) pour I dans Allcountries] est identique à Medaltracker = Liste (Allcountries) ;)


Voulez-vous dire médaaltracker = liste (AllCountries) ?


@azro pas tout à fait, [i pour i dans Allcountries] serait équivalent


@azro Nope, Medaltracker sera tout Aucun 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 ?


médaaltracker.append (i) renvoie Aucun 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 qui détient les valeurs de allCountries comme clé et valeurs dans résultats comme leur valeurs .


3 Réponses :


0
votes

Vous avez eu quelques problèmes avec votre code:

  • Votre liste de médailles n'avait aucune valeur. Vous pouvez simplement utiliser la liste (Allcountries) pour générer la liste
  • Vous avez été ajouté aux valeurs de médaillardeurs qui sont des chaînes.
  • Vous n'avez pas mis à jour les comptes de médailles après les calculs de rang dans Medaltracker
  • Vous compariez la première lettre du pays avec le nom complet afin que les médailles soient toujours à 0 valeur

    Voici une version de travail mise à jour xxx

    sortie xxx


0 commentaires

0
votes

Votre problème existe dans cette ligne:

médaaltracker = [medaltracker.append (i) pour i in Allcountries] code> p>

Lorsque vous 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> xxx pré>

Lorsque vous l'exécutez: p> xxx pré>

remarquer comment le 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>.

la solution est soit simplement utiliser MedAlTracker = liste (Allcountries) code>, ou si vous souhaitez ajouter, utilisez A pour la boucle: P>

for i in allCountries:
    medalTracker.append(i)


0 commentaires

0
votes

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"]))


0 commentaires