Comment modifier les variables introduites dans une boucle en forme de liste
Je suis en train d'écrire un programme de base en Python qui invite l'utilisateur à entrer les 5 scores du test. Le programme va alors convertir chaque test score à un point de la catégorie (c'est à dire 4.0, 3.0, 2.0,...), et puis par la suite prendre la moyenne de ces nombres.
J'ai assigné à chaque score à un test de leur propre variable, et je suis leur alimentation dans une boucle for comme suit:
for num in [score1, score2, score3, score4, score5]:
if num >= 90
print('Your test score is a 4.0)
elif num < 90 and >= 80
.
.
and so on for each grade point.
Maintenant, cela ne veut amende pour l'affichage de ce que chaque note de test est équivalent au grade point sage. Cependant, plus tard dans la fonction que j'ai besoin de calculer la moyenne de chacun de ces point de la catégorie des valeurs. Donc, j'aimerais vraiment attribuer une note de la valeur de la variable spécifique passé à travers la boucle à l'époque. Donc, quand score1 est passé à travers la boucle for, et de la classe point est déterminé, comment puis-je attribuer ce grade point de score1, puis plus tard pour score2 et ainsi de suite comme ils sont passés à travers la boucle?
J'espère que rend la question claire. Il semble qu'il serait idiot que Python n'aurait pas ce genre de capacité, parce que sinon vous ne seriez pas en mesure de redéfinir une variable passée par une boucle for si elle fait partie d'une liste qui est passé par.
- "Il semble qu'il serait idiot que Python n'aurait pas ce genre de capacité, parce que sinon vous ne seriez pas en mesure de redéfinir une variable passée par une boucle for si elle fait partie d'une liste qui est passé à travers." - C'est la façon dont la plupart des langages de programmation le travail. Pour permettre cette capacité serait mauvaise, parce qu'elle permettrait de créer quelque chose qui s'appelle effets secondaires, qui rendent le code obtus.
Vous devez vous connecter pour publier un commentaire.
", Il semble idiot que Python n'aurait pas ce genre de capacité, parce que sinon vous ne seriez pas en mesure de redéfinir une variable passée par une boucle for si elle fait partie d'une liste qui est passé à travers." - C'est la façon dont la plupart des langages de programmation le travail. Pour permettre cette capacité serait mauvaise, parce qu'elle permettrait de créer quelque chose qui s'appelle effets secondaires, qui rendent le code obtus.
De plus c'est une programmation commune piège, car vous devez de conserver les données de noms de variables: voir http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html (en particulier la liste des questions similaires; même si vous n'êtes pas affaire avec des noms de variables, vous êtes au moins d'essayer de traiter avec la variable d'espace de noms). Le remède est de travailler au "niveau supérieur": une liste ou d'un ensemble dans ce cas. C'est pourquoi votre question initiale n'est pas raisonnable. (Certaines versions de python vous permettra de pirater le
locals()
dictionnaire, mais ce n'est pas pris en charge et sans-papiers, de comportement et de très mauvais style.)Vous pouvez cependant la force python à utiliser des effets secondaires comme:
ci-dessus arrondir les scores dans le
scores
tableau. Le droit chemin pour ce faire, toutefois (sauf si vous travaillez avec des centaines de millions d'éléments) est de recréer lascores
tableau comme suit:Si vous avez beaucoup de choses que vous voulez faire pour un score:
note: Si vous êtes en train de faire flotter les calculs, vous devriez
from __future__ import division
ou de l'utilisation python3, ou jeté à l'float(...)
explicitement.Si vous voulez vraiment modifier ce qui est passé, vous pouvez lui passer un objet mutable. Les chiffres que vous transmettez sont des instances des objets immuables, mais si par exemple vous aviez:
Ce serait encore un non-fonctionnelle façon de faire les choses, et donc sujette à toutes les questions que les effets secondaires cause.
Le problème est que lorsque vous écrivez ceci:
ce qui se passe, c'est que vous êtes la création d'une liste qui comporte cinq éléments qui sont définis par les valeurs de score1 par le score de 5 à la fois que vous commencer à répéter. Le changement de l'un de ces éléments ne permet pas de modifier la variable d'origine, parce que vous avez créé une liste contenant des copies de ces valeurs.
Si vous exécutez le script suivant:
vous verrez que le changement de chaque valeur de la liste contenant des copies de vos variables réelles ne modifie pas la variable d'origine de ses valeurs. Pour obtenir une meilleure compréhension de cela, vous pourriez envisager la recherche de la différence entre le "passage par référence" et de "passage par valeur".
Pour ce problème particulier, je vous recommande de placer les variables que vous voulez être en mesure de modifier dans la liste pour commencer, puis en itérant sur cette liste plutôt qu'une liste contenant des copies de ces variables.
Je pense que cela pourrait faire ce que vous voulez, ce genre de choses est assez simple, donc python attendrions à ce que vous écrivez vous-même, je ne sais pas si tu parles de python devrait venir avec un GPA fonction convertisseur, vous pouvez certainement écrire un facilement. Si vous voulez tout seul numéro, (dont je ne suis pas sûr, puisque GPA vient habituellement avec point décimal), puis vous pouvez utiliser int(), ou arrondir à 0 avant de l'ajouter.
de sortie:
Première règle: lorsque l'on traite avec un tas d'articles similaires, ne pas utiliser un tas de variables nommées - utiliser un tableau (liste, ensemble, dictionnaire, tout ce qui fait le plus de sens).
Deuxième règle: sauf si vous êtes vraiment pressé pour l'espace, ne pas écraser des variables de cette façon, vous essayez de faire une étiquette (le nom de la variable) sont les deux choses différentes (raw marque et/ou de la gpa). Cela rend le débogage de vraiment méchant.