CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] Stocker n données dans des variables

Exacompta
Exacompta
Niveau 10
05 septembre 2017 à 16:58:18

Bonjour, je fais quelques bricoles sur France IOI et il y'a un exercice simple à résoudre mais je ne sais pas comment procéder.

Voici la partie de l'énoncé où je ne sais pas comment procéder:

Votre programme doit d'abord lire le nombre de Karvas en compétition. Ensuite, pour chaque Karva, il doit :
lire 4 entiers : son poids, son âge, la longueur de ses cornes et la hauteur au garrot ;

Je dois donc avoir un programme qui lit un entier n qui représentera le nombre de Karvas. Ensuite pour chaque Karvas je dois stocker 4 entiers.

Donc là j'ai pensé à mettre ça dans un tableau sous la forme suivante :

karva_stats = []
nbKarva = int(input())

for i in range(nb*4):
	temp = int(input())
	karva_stats.append(temp)

Et ensuite pour faire le reste qui est d'afficher sa note : note = longueur_des_cornes * hauteur_du_garrot + poids, je pensais le faire via une boucle for et itérer chaque élément de la liste.

Donc mes questions sont :

Est-ce une bonne manière de stockage que de stocker ces données via un tableau ? Sinon quelle serait le moyen de procéder le plus approprié ?

Merci d'avoir lu jusque là :cimer:

Message édité le 05 septembre 2017 à 17:02:32 par Exacompta
MrAnge
MrAnge
Niveau 10
05 septembre 2017 à 18:08:09

Je sais plus comment sa se fait en python mais tu peut utiliser une structure

Struct Karvas
{
   double poids;
   int age;
   double longueur_corne;
   double hauteur_garot;
};

Ensuite un tableau pour cette structure et tu remplis/parcourt avec for 0->N

bonne chance :hap:

edit : copie pas la structure c'est du C :hap:

Message édité le 05 septembre 2017 à 18:08:37 par MrAnge
Exacompta
Exacompta
Niveau 10
05 septembre 2017 à 18:10:42

Le 05 septembre 2017 à 18:08:09 MrAnge a écrit :
Je sais plus comment sa se fait en python mais tu peut utiliser une structure

Struct Karvas
{
   double poids;
   int age;
   double longueur_corne;
   double hauteur_garot;
};

Ensuite un tableau pour cette structure et tu remplis/parcourt avec for 0->N

bonne chance :hap:

edit : copie pas la structure c'est du C :hap:

Ca serait un peu une sorte de classe du coup ? Je vois pas vraiment comment implémenter ça.
C'est le côté "créer des variables" à la volée qui me perturbe.

MrAnge
MrAnge
Niveau 10
05 septembre 2017 à 18:26:28

ouais c'est comme une classe sans méthode
je te met un petit exemple de comment ça fonctionne

class Personne 
   def __init__(self):
      string nom = " ";
      string prenom= " " ;

/*Tableau qui vas contenir les N personnes entrer par l'utilisateur*/
personnes = [] ;

une_personne = Personne();

/*demander nb personne*/
for(i = 0; i<nb_personne; i++)
   /*demander nom*/
   une_personne.nom = nom_entrer
   /*Demander prenom*/
   une_personne.prenom = prenom_entrer
  
   /*on stock dans le tableau la nouvelle personne*/
   personnes.append(une_personne)

après pour parcourir ton tableau personne ce sera une boucle for aussi

Je m'excuse je fais jamais de python, normalement l'algo c'est sa mais je suis plus a l'aise en C :hap:

Exacompta
Exacompta
Niveau 10
05 septembre 2017 à 18:39:11

Le 05 septembre 2017 à 18:26:28 MrAnge a écrit :
ouais c'est comme une classe sans méthode
je te met un petit exemple de comment ça fonctionne

class Personne 
   def __init__(self):
      string nom = " ";
      string prenom= " " ;

/*Tableau qui vas contenir les N personnes entrer par l'utilisateur*/
personnes = [] ;

une_personne = Personne();

/*demander nb personne*/
for(i = 0; i<nb_personne; i++)
   /*demander nom*/
   une_personne.nom = nom_entrer
   /*Demander prenom*/
   une_personne.prenom = prenom_entrer
  
   /*on stock dans le tableau la nouvelle personne*/
   personnes.append(une_personne)

après pour parcourir ton tableau personne ce sera une boucle for aussi

Je m'excuse je fais jamais de python, normalement l'algo c'est sa mais je suis plus a l'aise en C :hap:

Ouai pas de souci, c'est déjà cool que tu me répondes :oui:

Le "truc" que je comprends as c'est qu'avec le code suivant ce sera toujours la même instance "une_personne" qui va être stockée ? Comment remédier à ça ? C'est exactement cette problématique je ne sais pas comment résoudre :hap:

Kheyaction
Kheyaction
Niveau 4
05 septembre 2017 à 21:24:47
personnes = [] ;

une_personne = Personne();

/*demander nb personne*/
for(i = 0; i<nb_personne; i++)
   /*demander nom*/
   une_personne.nom = nom_entrer
   /*Demander prenom*/
   une_personne.prenom = prenom_entrer
  
   /*on stock dans le tableau la nouvelle personne*/
   personnes.append(une_personne)

Oui en fait écrit comme ça, ça veut dire qu'on va écraser une_personne à chaque tour de boucle et au final on aura x fois le dernier exemplaire de une_personne

Corrigé :

personnes = [] ;

for(i = 0; i<nb_personne; i++)
    une_personne = Personne();
   une_personne.nom = nom_entrer
   une_personne.prenom = prenom_entrer
   personnes.append(une_personne)

Ici on a bien un nouvel objet personne qui est créé à chaque tour de boucle

MrAnge
MrAnge
Niveau 10
05 septembre 2017 à 22:08:59

Alors j'ai un doute, mais pour moi les deux solution arrivent au même, normalement une fois instancier on peut réécrire en boucle sur notre objet puisque c'est le tableau personnes qui vas stocker l'objet

du coup pour moi c'était comme pour une variable si on la stock dans un tableau ensuite on peut réécrire par dessus et on pourras venir rechercher sa valeur dans l'indice N du tableau

J'aimerais bien savoir si mon raisonnement est faux ou non :hap:

Exacompta
Exacompta
Niveau 10
05 septembre 2017 à 23:07:25

Le 05 septembre 2017 à 21:24:47 Kheyaction a écrit :

Salut mrci de ta réponse, je pensais pas que ca marcherait mais en réalité si, je supposais qu'à chaque itération nous perdrions l'information mais non !

Le 05 septembre 2017 à 22:08:59 MrAnge a écrit :
Alors j'ai un doute, mais pour moi les deux solution arrivent au même, normalement une fois instancier on peut réécrire en boucle sur notre objet puisque c'est le tableau personnes qui vas stocker l'objet

du coup pour moi c'était comme pour une variable si on la stock dans un tableau ensuite on peut réécrire par dessus et on pourras venir rechercher sa valeur dans l'indice N du tableau

J'aimerais bien savoir si mon raisonnement est faux ou non :hap:

Comme dit au dessus je pensais pareil que toi mais pas du tout, même s'il y'a réecriture sur la variable une_personne, l'objet est sauvegardé dans le tableau :oui:

Preuve en image :

Ici je fais ce qu'il dit, juste en rajoutant input() pour pouvoir écrire les noms prénoms au fur et à mesure:

https://image.noelshack.com/fichiers/2017/36/2/1504645393-capture.jpg

Ici en regardant les éléments de la liste, je peux voir qu'ils ont tous une adresse différente:

https://image.noelshack.com/fichiers/2017/36/2/1504645516-capture.jpg

Donc je suppose qu'ils ne sont pas les mêmes ? Mais pour être sûr je fais un petit iterateur sur la liste pour voir ce qui la compose :

https://image.noelshack.com/fichiers/2017/36/2/1504645608-capture.jpg

Et je peux bien voir ce qui la compose [[sticker:p/1ljp]]

C'est exactement ce que je cherchais en tout cas merci :-)

Kheyaction
Kheyaction
Niveau 4
06 septembre 2017 à 10:07:42

Alors j'ai un doute, mais pour moi les deux solution arrivent au même, normalement une fois instancier on peut réécrire en boucle sur notre objet puisque c'est le tableau personnes qui vas stocker l'objet

En fait ce n'est pas l'objet qui est stocké mais une référence à l'objet http://sametmax.com/valeuleurs-et-references-en-python/ (un lien vers l'objet)

du coup pour moi c'était comme pour une variable si on la stock dans un tableau ensuite on peut réécrire par dessus et on pourras venir rechercher sa valeur dans l'indice N du tableau

C'est vrai en C puisque passage par valeur

MrAnge
MrAnge
Niveau 10
06 septembre 2017 à 18:35:29

Le 06 septembre 2017 à 10:07:42 Kheyaction a écrit :

Alors j'ai un doute, mais pour moi les deux solution arrivent au même, normalement une fois instancier on peut réécrire en boucle sur notre objet puisque c'est le tableau personnes qui vas stocker l'objet

En fait ce n'est pas l'objet qui est stocké mais une référence à l'objet http://sametmax.com/valeuleurs-et-references-en-python/ (un lien vers l'objet)

du coup pour moi c'était comme pour une variable si on la stock dans un tableau ensuite on peut réécrire par dessus et on pourras venir rechercher sa valeur dans l'indice N du tableau

C'est vrai en C puisque passage par valeur

Ah bah je connaissais pas cette information du python, merci pour l'info je me coucherais moins bête :hap:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment