IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

interaction avec une bdd sous format json


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut interaction avec une bdd sous format json
    Bonsoir je suis un peu perdu je me suis lancé dans la programmation en python il y a peu j'ai vu d'autres langage pas entièrement car à chaque fois j'ai du recommencer avec un autre langage enfin bref je dois réaliser un programme qui permet de comparer des valeurs entre plusieurs bdd écrite aux format json.

    Le but du programme est de télécharger les prix du marché à un instant t et les comparer avec tous les ordre de vente des différente région y en a environ entre 30 et 50 le but du programme est simple vérifier si le prix de l'ordre de vente pour même type_id dans une région données est inférieur au prix du marché calculer la différence en tenant compte du nombre d'article a vendre seulement voilà je bloque avant même de commencer à faire les opération le problème est que dans un dico les clef ne doivent pas être identique hors on retrouve type_id partout ainsi que market_price

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import json
    import urllib.request
    from urllib.request import urlopen
    request = urlopen("https://esi.tech.ccp.is/latest/markets/prices/?datasource=tranquility")
    html = ("https://esi.tech.ccp.is/latest/markets/prices/?datasource=tranquility")
     
    data = json.loads(response.read())
    data = {row["type_id"] : (row.get("average_price", 0), row.get("adjusted_price", 0)) for row in data}
     
    print (data['key'])
    donc j'arrive à télécharger le fichier mais pas à faire le reste la boucle qui permettrais de comparer les prix des ordres de vente avec le prix de base du marché pour voir si les prix sont plus bas je vous laisse voir par vous même a quoi ressemble le site ainsi que les données en espérant avoir un peu d'aide pour pouvoir réaliser les boucles me permettant de faire un mappage des données pour le comparatif des prix

    Le site de l'api

    https://esi.tech.ccp.is

    l'url donnée pour les prix de base

    https://esi.tech.ccp.is/latest/marke...ce=tranquility

    l'url pour les prix de la région 10000001

    https://esi.tech.ccp.is/latest/marke...pe=sell&page=1

    l'url pour les prix de la région 10000002

    https://esi.tech.ccp.is/latest/marke...e=sell&page=15

    comme vous pouvez le constater y a une grande difficulté là encore c'est que le nombre de page varie énormément et il est impossible de deviner combien de page de vente il y a pour chacune des régions

    j'ai vraiment besoin d'aide et vous en remercie à l'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Salut,

    Citation Envoyé par nightwatch Voir le message
    seulement voilà je bloque avant même de commencer à faire les opération le problème est que dans un dico les clef ne doivent pas être identique hors on retrouve type_id partout ainsi que market_price
    Il faut peut être organiser les données brutes pour faciliter les traitements que vous voulez faire. Pour çà, vous pouvez partir d'exemples (i.e. des cas significatifs) et vérifier valider que vous obtenez déjà les résultats attendus. Puis essayer de voir ce que çà donne lorsqu'on généralise.
    Vous avez peut être aussi à regarder si des bibliothèques comme Pandas ne simplifierait pas les choses.

    Citation Envoyé par nightwatch Voir le message
    comme vous pouvez le constater y a une grande difficulté là encore c'est que le nombre de page varie énormément et il est impossible de deviner combien de page de vente il y a pour chacune des régions
    Il faut étudier la structure du site Web pour voir comment traiter cette difficulté là.

    Dans les deux cas, vous avez un soucis côté conception i.e. comment comparer, comment récupérer le bon nombre de pages... Et tant que vous n'aurez pas défini cela, le programmer avec Python (ou tout autre langage) sera impossible.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    en fouillant bien sur le net j'ai réussit à trouver ça : mais le problème reste le même le tri et aussi la boucle pour incrémenter la région qui doit englober le tout si je le fait avec request +params ça va m'ajouter un point d'interrogation sinon merci pour tes indication je vais aller voir cela sinon en attendant comment je peux faire pour modifier l'url sur la partie région uniquement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    import requests
    import time
     
    from requests.exceptions import HTTPError
     
    MARKET_URL = "https://esi.tech.ccp.is/v1/markets/10000001/orders/"
                                                                     #10000001 est l'id de la région
     
    def sync_requests(pages):
        responses = []
        start_time = time.time()
     
        for page in range(2, pages + 1):
            req = requests.get(MARKET_URL, params={'page': page})
            responses.append(req)
     
        end_time = time.time()
        elapsed = end_time - start_time
        print('Elapsed time for {} requests was: {}'.format(len(responses), elapsed))
     
        return responses
     
    if __name__ == '__main__':
        all_orders = []
        res = requests.get(MARKET_URL)
     
        res.raise_for_status()
     
        all_orders.extend(res.json())
        pages = int(res.headers['X-Pages'])
        responses = sync_requests(pages)
     
        for response in responses:
            try:
                response.raise_for_status()
            except HTTPError:
                print('Received status code {} from {}'.format(response.status_code, response.url))
                continue
     
            data = response.json()
            all_orders.extend(data)

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Salut,

    Citation Envoyé par nightwatch Voir le message
    sinon en attendant comment je peux faire pour modifier l'url sur la partie région uniquement?
    Une URL côté Python c'est juste une chaîne de caractères... qui sont un type de base supposé maîtrisé après avoir pris le temps d'ouvrir un tuto. (pré-requis avant de poster).
    note: d'autant que vous avez déjà la réponse dans le code que vous avez récupéré.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    pour ma par j'avais pensé directement mettre region id et le définir comme une variable qui retournerait une valeur numérique qui s'incrémente via une boucle for

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    pour ma par j'avais pensé directement mettre region id et le définir comme une variable qui retournerait une valeur numérique qui s'incrémente via une boucle for
    et c'est quoi la question?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    simplement savoir ce qui ne va pas dans mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    import requests
    import time
     
    from requests.exceptions import HTTPError
     
    MARKET_URL = "https://esi.tech.ccp.is/v1/markets/%str(i)/orders/"
     
    region_debut=10000001
    region_fin=1000065
     
    for i in range(region_debut, region_fin):
    i=region_debut
    MARKET_URL = "https://esi.tech.ccp.is/v1/markets/int(i)/orders/""
    MARKET_URL = MARKET_URL +str(i)
     
    def sync_requests(pages):
        responses = []
        start_time = time.time()
     
       for page in range (2, pages + 1):
            req = requests.get(MARKET_URL, params={'page': page})
            responses.append(req)
     
        end_time = time.time()
        elapsed = end_time - start_time
        print('Elapsed time for {} requests was: {}'.format(len(responses), elapsed))
     
        return responses
     
    if __name__ == '__main__':
        all_orders = []
        res = requests.get(MARKET_URL)
     
        res.raise_for_status()
     
        all_orders.extend(res.json())
        pages = int(res.headers['X-Pages'])
        responses = sync_requests(pages)
     
        for response in responses:
            try:
                response.raise_for_status()
            except HTTPError:
                print('Received status code {} from {}'.format(response.status_code, response.url))
                continue
                i+=1
            data = response.json()
            all_orders.extend(data)

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    simplement savoir si tu pourrais m'aider car je ne suis vraiment pas sûr de moi
    Si vous n'êtes pas sûr de vous dans la réalisation de constructions aussi simples, c'est que vous avez négligé de passer du temps dans les tutos avant de vous lancer dans la réalisation de projets compliqués.
    Et personne ne peut apprendre à votre place.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    je suis jamais sûr de moi dans dans quoi que je fasse ça a toujours été comme ça un sentiment d'infériorité peut être mais là je voulais juste voir si il était possible de regarder le code pour voir ce qu'il ne va pas je pensais juste avoir un peu plus d'aide j'ai regardé certains topics et ils examinent le code et disent ce qu'ils en pensent mais peut être que mon rajout est à jeter ou que mon niveau est trop bas et que personne ne pense pouvoir m'aider je sais pas

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    je suis jamais sûr de moi dans dans quoi que je fasse ça a toujours été comme ça un sentiment d'infériorité peut être mais là je voulais juste voir si il était possible de regarder le code
    Un code, vous l'essayez et si la machine se vautre ou retourne autre chose que le résultat attendu, vous essayez de comprendre pourquoi ce que vous avez écrit ne fonctionne pas. C'est comme çà qu'on apprend et vous n'avez pas besoin de vous sentir en infériorité car ce dialogue entre vous et la machine personne ne le voit.

    Citation Envoyé par nightwatch Voir le message
    pour voir ce qu'il ne va pas je pensais juste avoir un peu plus d'aide j'ai regardé certains topics et ils examinent le code et disent ce qu'ils en pensent mais peut être que mon rajout est à jeter ou que mon niveau est trop bas et que personne ne pense pouvoir m'aider je sais pas
    Par contre quand vous postez du code dans un forum, on peut voir quelle motivation vous avez eu à apprendre et la difficulté que vous rencontrez. Si vous avez des difficultés de compréhension, on peut vous aider mais si vous écrivez un truc sans queue ni tête montrant que vous ne savez même pas à quoi ressemble un code Python, comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    region_debut=10000001
    region_fin=1000065
     
    for i in range(region_debut, region_fin):
    i=region_debut
    MARKET_URL = "https://esi.tech.ccp.is/v1/markets/int(i)/orders/""
    MARKET_URL = MARKET_URL +str(i)
    difficile de ne pas vous conseiller d'ouvrir un tuto. pour y apprendre les bases.
    note: je vous rappelle que vous êtes supposé avoir ouvert un tuto. et appris ces bases avant de créer une discussion (voir les règles des forums). Et si on aide le débutant à comprendre comment faire ses exercices, on n'aidera pas celui qui a oublié qu'avant de se lancer dans la réalisation de projets compliqués, il faut avoir pris le temps de débuter.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    mais j'en ai ouvert des tuto bref j'ai compris je laisse tomber pas la peine de chercher de l'aide ici ça donne pas vraiment envie d'apprendre en tout cas enfin bref je lâche le topic c'est bien compris

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    mais j'en ai ouvert des tuto bref j'ai compris je laisse tomber pas la peine de chercher de l'aide ici ça donne pas vraiment envie d'apprendre en tout cas enfin bref je lâche le topic c'est bien compris
    Je n'en doute pas. Mais si vous ne connaissez pas des messages d'erreur comme "IndentationError" ou la fonction print pour afficher ce qu'il se passe, c'est que vous vous êtes contenté de les ouvrir pour y trouver des réponses toutes faîtes plutôt que de passer du temps à comprendre les concepts qui y sont racontés, à faire les exercices pour vous assurer que vous les aviez assimilés et découvrir comment mettre au point ces petits codes.
    Si vous n'êtes pas plus motivé que çà pour apprendre à programmer, pas la peine de demander à d'autres de faire votre boulot.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 849
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par nightwatch Voir le message
    simplement savoir ce qui ne va pas dans mon code
    Bah, peut-être le fait que la ligne 14 (qui commence les instructions du for) ne soit pas indentée. Et que la ligne 15 commence la chaine avec une double quotes et la termine avec deux doubles quotes à suivre. Ca ce sont les trucs qui sautent immédiatement aux yeux (surtout quand le code ressort en rouge sur le forum).
    Ensuite il y a les détails. Comme par exemple le fait d'utiliser "i" comme indice de boucle (en ligne 13) puis de l'écraser par autre chose en ligne 14. Ou de mettre "int(i)" en tant que string figée dans la chaine "MARKET_URL". On sent bien ici une espèce de tentative maladroite (surtout que "i" est déjà un int) pour insérer le compteur dans la string mais malheureusement Python, lui, n'ira pas jusque là (enfin peut-être que Python4...)
    Et enfin il y a l'abracadabrant, comme cette fonction "sync_request" qui vient se poser comme une bouse au milieu de la boucle (ou alors c'est en dehors de la boucle mais dans ce cas, la boucle remplit "MARKET_URL" n fois sans le traiter).

    Citation Envoyé par nightwatch Voir le message
    j'ai vu d'autres langage pas entièrement car à chaque fois j'ai du recommencer avec un autre langage...
    ...mais j'en ai ouvert des tuto
    Ouais. Enfin dans ceux que je connais, la question de l'indentation (primordiale en Python) est quand-même abordée en général au-moins une fois et au-moins assez tôt. Et la façon de définir une chaine aussi (surtout qu'elle est généralement identique dans la majorité des langages). Et ne pas utiliser la même variable pour stocker deux choses différentes en même temps ça c'est écrit nulle part tellement cela coule de source (quoique il semble que ce sera possible avec l'ordinateur quantique...).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import requests
    import json
     
    def load_market_price(price_kind="adjusted_price") :
        url = "https://esi.tech.ccp.is/latest/markets/prices/?datasource=tranquility"
        data_1 = []
        return data_1
     
    def load_market_id(identifier) :
    	print ("Load market with id : %s" %str(identifier))
    	url = "https://esi.tech.ccp.is/v1/markets/%s/orders/?datasource=tranquility&order_type=sell" %identifier
    	data = []
    	page_id = 0
     
    	while True :
    		res = requests.get(url, params={'page': page_id}).json()
    		if not res : break
    		data.extend(res)
    		page_id += 1
     
    	return data
     
    def load_all_market_id(start, end) :
     
    	data = {}
    	for identifier in range(start, end) :
    		values = load_market_id(identifier)
    		if values :
    			data[identifier] = values
     
    	return data
     
     
    load_market_price(price_kind="adjusted_price")
    for identifier, values in load_all_market_id(10000001, 10000002).items():
                     for i in values 
                     if values [item_id]== data_1 [item_id]
    elif i+= 1
                     if data_1 [price] > values [price] 
    elif i+=1
                    if diff= (data_1[price] - values [price]) * values [quantity]) > 5 000 000
     
                     print(values [item_id], diff)

    Voilà tout ce que j'ai pu retravailler avec en partie de l'aide d'une personne mais je suis pas certains de ne pas me tromper quelque part l'idée de base est de faire une simple comparaison de prix en se basant sur les données du marché comparé la clef item_id des ordre de vente du marché à ceux de base du moment t de voir si il est inférieur et si oui de combien en multipliant la différence par la quantité en vente et si le prix est plus petit que celui du marché ET que la quantité * le prix

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 849
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    Voilà tout ce que j'ai pu retravailler avec en partie de l'aide d'une personne
    Mouais. Il manque toujours des ":" après certains if ou for. L'indentation reste anarchique (alors que dans Python elle est primordiale parce qu'il se base dessus pour déterminer si une ligne est ou n'est pas dans un bloc)
    exemple1
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if bool:
    	print("ok1")
    	print("ok2")

    exemple2
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if bool:
    	print("ok1")
    print("ok2")
    Dans l'exemple 1, les deux "ok" ne seront affichés que si bool est vrai. Dans l'exemple 2, si bool est vrai seul le premier "ok" ne sera affiché et le second le sera dans tous les cas.

    Et ces elif i+=1 qui, là, sont complètement aberrants. Je n'arrive même pas à voir ce que tu veux tester et pourtant je réfléchis. Alors Python, lui... Tu ne peux même pas dire que ton programme ne donne pas les bons résultats car il ne s'exécute pas. D'où les remarques de tous: aprendre Python consiste par commencer par télécharger un tutoriel et l'ouvrir à la page 1. On a le droit de sauter les préambules mais on n'a pas le droit de sauter les pages qui expliquent la syntaxe.

    Ps: joli le 5 000 000. Très comptabilité, très élégant. Donc avant le tuto spécifique Python, tu iras voir la façon d'écrire un nombre dans les langages de programmation en général.
    Citation Envoyé par nightwatch Voir le message
    j'ai vu d'autres langage pas entièrement
    Mouais. Mais alors vraiment vraiment pas entièrement du tout !!!

    Citation Envoyé par nightwatch Voir le message
    mais je suis pas certains de ne pas me tromper quelque part l'idée de base est de faire une simple comparaison de prix en se basant sur les données du marché comparé la clef item_id des ordre de vente du marché à ceux de base du moment t de voir si il est inférieur et si oui de combien en multipliant la différence par la quantité en vente et si le prix est plus petit que celui du marché ET que la quantité * le prix
    Oui, ça c'est une traduction que tu fais de ton problème et de la façon de le résoudre (algorithmique). Mais même là tu n'arrives pas à t'exprimer correctement. Tu nous parles de clef "item_id" alors qu'on ne connait même pas le détail des données que tu reçois ni leur ordre. Est-ce que tu as "prix d'achat" et "prix de vente" sur une seule ligne (dans ce cas tu lis la ligne et tu compares) ? Sur des lignes différentes (dans ce cas il faut, pour chaque ligneAchat, chercher la ligneVente correspondante) ?

    Citation Envoyé par nightwatch Voir le message
    le problème est que dans un dico les clef ne doivent pas être identique hors on retrouve type_id partout ainsi que market_price
    Oui, parce que (enfin selon moi) tu n'as pas "un" dico mais "une liste" (ou un tuple) de dicos !!! Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data=(
    	{"nom" : "Hugo", "prenom" : "Victor"},
    	{"nom" : "Pocquelin", "prenom" : "Jean-Baptiste"},
    	{"nom" : "Balzac", "prenom" : "Honoré"},
    )
    De là, traiter les données consiste d'abors à itérer dessus (pour recupérer un dico) puis le manipuler (pour récupérer l'info qui t'intéresse). Exemple

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Lister les noms
    for d in data: print(d["nom"])
     
    # Lister les prénoms
    for d in data: print(d["prenom"])
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pour la définition de fonctions, il faudrait revoir ce qu'est un argument.
    Dans la première fonction, à quoi sert price_kind ?
    Comment data_1 peut ne pas être vide ?

    Pour la fin, c'est carrément incompréhensible.
    A la fin des lignes terminant par if et for, il y a des deux points ":".
    Cela veut dire quoi elif i+=1 ? Rien à mon sens...

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut
    bah j'ai vu que elif c'est un raccourci de else if maintenant pour le nombre je l'ai espacé pour moi pour être certains de la valeur mais ça c'est pas gênant vu que je sais qu'après la valeur devra& être concaténée si il n'y avait que ça ce ne serait pas gênant pour les conditions en fait je doit tester si chaque parmis les sell order il y en a (et c'est quasiment certains) ont la même valeur dans item_id.

    Ensuite je dois tester si la valeur du sell order donc contenu dans values est strictement inférieur à la valeur du marché et ensuite calculer la différence en multipliant la différence par la quantité pour voir le profit possible à tirer enfin afficher le sell order en entier serait l'idéal pour avoir toutes les données pour l'identifier et si parmis les conditions énoncées si tem_id de data est pas égale à la valeur de item_id de data_1 on passe à un autre sell order et ainsi de suite une fois qu'un item_id de data_1 est vérifier pour l'ensemble de tous les ordre de vente on passe à un autre item_id et là c'est si la valeur de l'item_id n'est pas identique pour le sell order comparé on passe à un autre sell order

    Parce que il faut que je crée une fonction qui va chercher tous les item_id des sell order pour un item donné et les comparer à l'item_id du prix du marché avec leur valeurs dans chaque item _id il y a des caractéristique et je veux comparer en premier lieu le prix une fois que les comparaison pour le premier item _id (donc dès que tous les item_id ayant pour valeur 3158 par exemple ont été comparé on passe à un autre item _id du prix du marché le suivant.

    En gros dans les sell order récupéré il va y avoir des item_id dans lesquelles il y aura peut être une dizaine de comparaison à faire (et il faut vérifier qu'aucun item_id identique dans les deux dicos ne reste) tandis que pour d'autre il pourrait y en avoir des centaines voir des milliers et donc il faut à la fois itérer dans les sell order mais aussi dans les data récupéré dans les prix du marché.

    je sais pas si j'ai été assez explicite mais j'essaie de décrire le programme

    ps: les data_1 viennent en fait de la requête

    1 récupérer les prix de base du marché
    2 récupérer les ordre de vente dans chacune des régions
    3 comparer tous les item_id entre eux, en fonction de l'item_id (qui doit juste être identique on pourrait tester ça avec des booléen), du prix indiqué pour l'item_id et l'ordre de vente (tester si parmis les sell order l'un d'eux est inférieur pour un item donné) et tester le profit en fonction de la quantité
    4 afficher toutes les données relative à ce sell order

    ps2: je pense cela dit à une amélioration pour que ce soit plus simple comparer un item_id en prenant la valeur dans les sell order sans itérer quoi que ce soit genre faire un code si par exemple l'item_id du premier ordre de vente est de 3155 on va chercher dans prix du marché l'item_id de valeur 3155 et on boucle pour passer en revue tous les résultats

  18. #18
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 849
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    bah j'ai vu que elif c'est un raccourci de else if
    Ben oui. Et "if" signifie "si" (sous-entendu "si une condition est vérifiée"). Donc tu cherches à vérifer quoi avec ton elif i+=1 ? Si "i" s'incrémente bien ?? Et tu fais quoi s'il ne s'incrémente pas ???

    Citation Envoyé par nightwatch Voir le message
    maintenant pour le nombre je l'ai espacé pour moi pour être certains de la valeur mais ça c'est pas gênant vu que je sais qu'après la valeur devra être concaténée si il n'y avait que ça ce ne serait pas gênant
    Ah oui !!! Tu en sais des choses dis-moi...
    Moi, en revanche, je ne sais vraiment pas ce qui est le plus édifiant là dedans. Les conneries que tu sors à propos de "ce que tu sais" ou le fait que tu n'aies même pas pris la peine d'ouvrir un idle Python et taper a=1 000 000 pour voir ce que ça fait. Mais t'as raison sur un point: s'il n'y avait que ça effectivement ce ne serait vraiment pas gênant.

    Citation Envoyé par nightwatch Voir le message
    je sais pas si j'ai été assez explicite mais j'essaie de décrire le programme
    Mouais. Tu peux le décrire autant que tu veux, j'espère que tu es bien conscient qu'on ne fera pas le programme à ta place. Eventuellement, une fois que tu l'auras écrit, s'il fonctionne mais qu'il ne sort pas les bons résultats, et si tu nous fournit un exemple minimaliste mais réel des données qu'il doit manger, alors on pourra te dire pourquoi il ne sort pas les bons résultats.

    Citation Envoyé par nightwatch Voir le message
    ps2: je pense cela dit à une amélioration pour que ce soit plus simple
    Ouais enfin avant d'améliorer quoi que ce soit, commence déjà par sortir un code qui réponde au besoin. C'est pas super compliqué puisque tu sembles avoir déjà l'algo en tête. Tout ce qui te reste à faire, c'est à le transcrire dans un Python valable.
    Donc commence par 1) récupérer un truc, 2) afficher ce que tu récupères voir si ça correspond bien, 3) décortique le truc en éléments utilisables, 4) récupère de l'autre côté un autre truc, 5) fais les recherches entre "truc1" et "truc2" bref écris ton code quoi !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 9
    Par défaut bonjour à tous je recherche un peu d'aide ou plutôt de la doc
    J'ai un projet qui me dépasse littéralement à faire je dois comparer deux grosse liste de dictionnaire et pour l'instant je n'ai qu'un bout de code qui me permet à peine de télécharger une liste d'order


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import requests
    import json
     
    def load_market_id(identifier) :
        print ("Load market with id : %s" %str(identifier))
        url = "https://esi.tech.ccp.is/v1/markets/%s/orders/?datasource=tranquility&order_type=sell" %identifier
        data = []
        page_id = 0
     
        while True :
            res = requests.get(url, params={'page': page_id}).json()
            if not res : break
            data.extend(res)
            page_id += 1
     
        return data
     
    def load_all_market_id(start, end) :
     
        data = {}
        for identifier in range(start, end) :
            values = load_market_id(identifier)
            if values :
                data[identifier] = values
     
        return data
     
    for identifier, values in load_all_market_id(10000001, 10000065).items():
        print (identifier, lenvalues)
    la première fonction pour télécharger les prix ne fonctionne pas cela fais plus d'une semaine que je galère dessus et je ne trouve rien je dois comparer une énorme liste de dico avec une bien plus grosse encore (de quoi faire planter l'environnement si je le lance en entier et pour ça j'ai besoin de repère et y a aucun tuto qui parle des hashmap en français sur youtube je dois comparer un item_id de la liste des sell order avec son ite_id de même valeur et ensuite le prix et enfin la quantité et selon le résultat du profit l'afficher mais je ne sais pas comment tout les tuto vidéos sur les hashmap en python sont en anglais

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par nightwatch Voir le message
    J'ai un projet qui me dépasse littéralement
    Est si vous commenciez à apprendre à programmer avec des projets plus simples?
    En tout cas, même un programmeur expérimenté devrait y passer des heures à analyser les données, définir un algorithmes, mettre au point des bouts de code et finaliser le programme...
    Et franchement, on a bien mieux à faire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [PowerShell] Interaction avec une BDD MySQL
    Par Original1992 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 17/03/2015, 16h34
  2. Interactions avec une BDD
    Par pierrot54700 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/03/2014, 15h03
  3. [Smarty] Afficher les données d'une BDD sous forme de tableau avec options
    Par student_php dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 05/10/2010, 16h29
  4. Requete nom ville pour avoir code postal,avec une base sous format XMl
    Par naouah dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2008, 20h00
  5. [VB.NET] Enregistrer une BDD sous un autre format
    Par botanique dans le forum Windows Forms
    Réponses: 9
    Dernier message: 16/01/2006, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo