Problème importation python
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 34

Problème importation python



  1. #1
    bergignon

    Problème importation python


    ------

    Bonjour, j'ai récemment écris un fichier (table.py) qui contient en gros un programme qui calcule les tables. Le voici:

    Code:
    def table(nb, max=10):
    	i = 0
    	while i < 10:
              print(i + 1, "*", nb, "=", (i + 1) * nb)
    	 	i += 1
    Individuellement il fonctionne très bien mais quand j'essaie d'importer la fonction (table), voilà ce que cela donne :

    Code:
    from table.py import table
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        from table.py import table
      File "/Users/il y avait mon nom écrit ici/Documents/table.py", line 1
        Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 00:48:40)
    ^
    SyntaxError: invalid syntax

    En passant je fonctionne sur mac.

    Merci d'avance

    -----
    Dernière modification par JPL ; 20/12/2018 à 23h57. Motif: Ajout de la balise Code (#) pour garder l'indentation
    Si la vie est à la mort, à quoi est la mort ?

  2. #2
    PA5CAL

    Re : Problème importation python

    .....................
    Dernière modification par PA5CAL ; 19/12/2018 à 21h03.

  3. #3
    PA5CAL

    Re : Problème importation python

    Bonsoir

    Si le fichier table.py est dans le même dossier que le programme, alors il faut plutôt écrire :
    Code:
    from table import table

    En principe, pour stocker des fonctions on utilise un package.

    Pour ce faire, dans le cas présent on peut créer un sous-dossier portant le nom du package dans le dossier du programme, par exemple outils, puis dans ce sous-dossier, enregistrer le fichier table.py et créer un fichier vide nommé __init__.py (par exemple avec un éditeur de texte, ou en exécutant la commande en ligne « touch __init__.py »).

    Pour importer la fonction table, il faut alors écrire :
    Code:
    from outils.table import table

  4. #4
    bergignon

    Re : Problème importation python

    Je suis un débutant de python et sur mac également. Si je veux faire un package à partir de IDLE, étape par étape, je fais quoi au final ? Comment je crée un sous-dossier ?

  5. A voir en vidéo sur Futura
  6. #5
    bergignon

    Re : Problème importation python

    Également, comment je crée un package ?

  7. #6
    CM63

    Re : Problème importation python

    PA5SCAL te l'explique dans le message 3.

  8. #7
    bergignon

    Re : Problème importation python

    Oui mais je comprend pas tellement. Je m'y connais pas trop en informatique et quand il dit "créer un sous-dossier portant le nom du package dans le dossier du programme" je comprend pas trop comment le faire surtout qu'on travaille probablement pas sur la même interface. Il y aurais pas moyen de le faire avec des images ?

  9. #8
    PA5CAL

    Re : Problème importation python

    Je ne connais pas IDLE, qui n'est qu'un des nombreux environnements de développements intégrés supportant Python, et qui ne présente par conséquent aucun intérêt pour moi. Je ne sais pas s'il prévoit quelque chose pour créer des packages Python, ni comment on doit procéder si tel est le cas. Il faudrait lire la documentation de cet outil pour le savoir.

    En dehors du développement Python, on est souvent amené à créer un dossier, quel que soit le système d'exploitation. Sur Mac, classiquement on peut le faire à partir du Finder : on se place dans le dossier parent, on crée un nouveau dossier, qu'on renomme ensuite comme souhaité. On peut également le faire directement à partir d'une fenêtre Terminal à l'aide de la commande en ligne « mkdir ». Quoi qu'il en soit, ce problème relève plutôt de l'utilisation générale d'un Mac, et n'a plus de rapport avec le présent sujet (« Problème importation python ») ni avec la rubrique du formum (« Programmation et langages, Algorithmique »).

    En ce qui me concerne, durant plusieurs années j'ai contribué assidûment à des forums spécialisés dans l'utilisation des Macs, où j'ai déjà répondu à ce type de question à de nombreuses reprises. Je sais donc qu'on peut trouver des réponses sur Internet si on se donne la peine de chercher. En dehors du fait qu'une telle recherche est fortement conseillée avant toute formulation d'une demande sur le forum, la moindre des marques de respect pour le travail et les efforts de tous ceux qui publient, bénévolement et sur leur temps libre, des contenus sur les sites web, serait d'en tirer partie en évitant de reposer les mêmes questions.

    Par ailleurs, savoir utiliser son ordinateur a minima me paraît être un prérequis au développement de programmes.
    Dernière modification par PA5CAL ; 20/12/2018 à 17h52.

  10. #9
    bergignon

    Re : Problème importation python

    Ok, je sais comment créer un fichier. Je suis allé dans document, j'ai créer un dossier "package" et un dossier "subpackage" dans le dossier "package" et dans le dossier "subpackage" j'y ai déposé le fichier TABLE3.py. Le voici:

    d
    Code:
    ef table(nb):
    	i = 0
    	while i < 10:
    		print(i + 1, "*", nb, "=", (i + 1) * nb)
    		i += 1
    Au cas ou je n'ai pas été assez clair, mon problème est que je sais pas comment importer la fonction "table". Deuxièmement, mon terminal est en python 2.7, donc puisque j'apprend 3.7, je ne l'utilise pas, je ne sais pas comment l'utiliser, je ne sais pas si je devrais l'utiliser, et si c'est le cas, je ne sais pas comment mettre python 3.7 dessus. Dernièrement, j'ai écris un autre programme qui ne marche pas (en gros il faut mettre un nombre et on optiendra sa table de multiplication :

    Code:
    while True:
        nb = input("entrez un nombre")
        if nb is in range(0, 10000):
            table(nb)
        else:
            print("terminé")
            break
    Merci pour votre aide
    Dernière modification par JPL ; 20/12/2018 à 23h56. Motif: Ajout de la balise Code (#) pour garder l'indentation

  11. #10
    PA5CAL

    Re : Problème importation python

    NB: le forum préconise d'utiliser les balise CODE (bouton « # » dans l'éditeur en mode avancé) pour présenter du code indenté. Cela est important dans le cas d'un code source Python, car l'indentation est un élément syntaxique du langage.

    Le message d'erreur reproduit dans le sujet indique que c'est Python 3.7.1 qui est utilisé. Il est donc forcément déjà installé sur le Mac, même si Python 2.7 est présent par ailleurs. En principe, Python 2.7 est présent parce que c'est la version fournie par défaut avec le Mac.

    Pour rappel, Terminal est un programme du Mac totalement indépendant de Python. Donc on ne peut pas dire que Terminal est sous une version particulière de Python.

    Compte tenu de la manière dont Python est classiquement installé, si Python 2.7 y est exécuté par défaut quand on lance la commande en ligne « python » dans Terminal, alors il est fort probable qu'il faille lancer la commande en ligne « python3 » pour exécuter Python 3.7.


    Comme je l'ai indiqué dans ma première réponse, un package Python est constitué d'un dossier portant le nom de ce package dans lequel on trouve un fichier __init__.py et d'autres fichiers .py contenant les fonctions.

    Les packages globaux, accessibles par tous les programmes Python, sont enregistrés dans un dossier d'installation commun à la version du langage. Mais quand on crée un package personnel lié à un programme Python particulier, il faut qu'il soit créé dans le dossier de ce programme, ou dans un de ses sous-dossiers.

    Dans le cas où le package subpackage contenant un fichier __init__.py et le fichier TABLE3.py cité dans ton exemple se trouve dans le sous-dossier package du dossier Documents (si j'ai bien compris), alors :
    - si le programme Python se situe dans le dossier package, la fonction table doit être importée comme ceci :
    Code:
    from subpackage.TABLE3 import table
    - si le programme Python se situe dans le dossier Documents, la fonction table doit être importée comme cela :
    Code:
    from package.subpackage.TABLE3 import table
    Par ailleurs, sans faire appel à la notion de package, si le programme Python se situe dans le dossier subpackage (au même endroit que le fichier TABLE3.py), la fonction table peut être importée ainsi :
    Code:
    from TABLE3 import table

  12. #11
    bergignon

    Re : Problème importation python

    Salut, merci pour les conseils du terminal.

    Premièrement j'ai réarrangé mes documents. Sur mon finder dans mes documents j'y ai placé un dossier "package" et dans ce dossier y ai mis 2 fichiers (__init__.py & table3.py). Une fois avoir écris python3 sur mon terminal, il s'est mit en version 3.7 et lorsque j'écris "from package.table3 import table" il me dit "ModuleNotFoundError: No module named 'package'. Merci beaucoup pour votre aide je sais que c'est difficile.

    Sur un autre sujet, comme je l'ai écris dans mon message précédent, j'ai créé un petit programme qui est sensé d'illustrer la table de multiplication du nombre entré, mais celui-ci ne semble pas fonctionner. Pour préciser j'ai écris à la main la fonction "table".

    Code:
    while True:
        nb = input("entrez un nombre")
        if nb is in range(0, 10000):
            table(nb)
        else:
            print("terminé")
            break
    En tout cas je ne le dirai jamais assez mais merci beaucoup.

  13. #12
    PA5CAL

    Re : Problème importation python

    Terminal sert à lancer des commandes en ligne, qui peuvent être des fonctions ou des commandes internes du shell (e.g. cd, ls, mkdir, echo, ...) ou bien des fichiers exécutables désignés par leur chemin absolu (e.g. « /sbin/ping »), implicite (e.g. « ping ») lorsque la configuration du système le permet, ou relatif (e.g. « ../../sbin/ping »).

    • Le fait de lancer la commande en ligne « python3 » seule dans Terminal exécute Python 3.7 en mode interactif depuis le dossier courant. En d'autres termes :
    - on cesse d'exécuter des commandes shell et des fichiers exécutables pour « discuter » (interagir) avec Python, jusqu'à ce qu'on quitte ce dernier en appelant la fonction quit() ;
    - le dossier courant de la fenêtre Terminal est considéré comme étant le dossier d'exécution par défaut des commandes et programmes Python.

    Or, si l'on n'a pas changé ce dossier courant avec la commande « cd » avant de lancer Python en mode interactif, alors ce dossier par défaut est le dossier utilisateur (« /Users/bergignon » si ton login est « bergignon »).

    Dans ce cas de figure, le dossier Documents (qui est un sous-dossier du dossier utilisateur) n'est pas le dossier de travail par défaut de Python. Python ne peut donc pas trouver le fichier table3.py du package nommé package en le désignant sous la forme « package.table3 ». Pour que ça marche, il faudrait :
    - soit se placer dans le dossier Documents avec une commande « cd Documents » avant de lancer Python en mode interactif,
    - soit importer la fonction table() à l'aide de « from Documents.package.table3 import table ».

    NB: en français, contrairement à Terminal, sous Finder le dossier « /Users » apparaît sous le nom « Utilisateurs », et le dossier du bureau « Desktop » sous le nom « Bureau ». Le dossier racine « / » est « Macintosh HD ».


    • Lorsque Python est utilisé pour exécuter un fichier de programme .py particulier, le dossier de ce fichier devient le dossier de travail par défaut. Pour pouvoir être importé, un package spécifique au programme doit alors se situer dans le dossier du fichier ou dans l'un de ses sous-dossiers. NB: on pourrait également enregistrer le package avec les autres packages généraux installés dans Python, mais ce n'est pas conseillé, surtout quand on n'en maîtrise pas toutes les implications.

    Par exemple, si le fichier exemple.py se situe sur le bureau (i.e. dans le dossier /Users/bergignon/Desktop), alors la ligne de commande « python3 /Users/bergignon/Desktop/exemple.py » lancera ce programme et se terminera avec lui. Si le programme contient une ligne « from package.table3 import table », il cherchera le dossier package sur le bureau (/Users/bergignon/Desktop/package)... mais il ne le trouvera pas si ce package est enregistré dans le dossier Documents (/Users/bergignon/Documents/package).

    Donc, si tu souhaites enregistrer le package dans le dossier Documents, tu devrais :
    - soit enregistrer ton fichier de programme .py dans le dossier Documents et importer la fonction table() à l'aide d'une ligne « from package.table3 import table » dans ce fichier ;
    - soit enregistrer ton fichier de programme .py dans ton dossier utilisateur (/Users/bergignon) et importer la fonction table() à l'aide d'une ligne « from Documents.package.table3 import table » dans ce fichier.

  14. #13
    bergignon

    Re : Problème importation python

    Bon j'ai tenté tout les commandes et il n'y a pas grand chose qui marche. Je vais remettre les choses au clair. Sur mon finder, il y a le dossier de base "Documents". dans ce dossier, j'ai créé un dossier "package", ou se trouve "table3.py" et "__init__.py". Lorsque je vais sur mon terminal, j'exécute la commande, le terminal marque "No such file or directory". Si je met python3 après, et que j'exécute la commande "from Documents.package.table3 import table", le terminal me marque "No module named 'Documents'". Donc je suis vraiment perdu. À la fin, vous avez écrit «import la fonction table() à l'aide d'une ligne z, from package.table3 import table» donc je dois écrire la barre de code dans le fichier même ou je définis la fonction ? Et dernièrement, comme dans mes deux précédents messages, j'ai créé un petit programme qui est sensé d'illustrer la table de multiplication du nombre entré, mais celui-ci ne semble pas fonctionner. Pour préciser j'ai écris à la main la fonction "table".



    Code:
    while True:
        nb = input("entrez un nombre")
        if nb is in range(0, 10000):
            table(nb)
        else:
            print("terminé")
            break
    Merci beaucoup
    Dernière modification par bergignon ; 21/12/2018 à 15h03.

  15. #14
    bergignon

    Re : Problème importation python

    EDIT: Après une demi-heure à tenter plein de trucs j'ai réussit à importer la fonction, merci beaucoup ! Par exemple, pourriez vous m'aidez pour mon petit programme ?

  16. #15
    PA5CAL

    Re : Problème importation python

    Dans la ligne « if nb is in range(0, 10000): », il ne faut pas mettre « is ». Dans « range(0, 10000) », le « 0 » n'est pas utile car c'est la valeur par défaut (on peut se contenter d'écrire « range(1000) »). Quoi qu'il en soit, la fonction « range() » est censée générer une liste de nombres entiers, ici longue de 10001 nombres ! Donc a priori elle n'est pas vraiment adaptée pour réaliser un simple test. Il est préférable d'écrire ce test comme ceci :
    Code:
        if 0 <= nb <= 10000:
    Tel que le code est écrit, la variable « nb » ne contient pas un nombre mais une chaîne de caractères (on peut le vérifier en demandant le type de « nb » à l'aide de la fonction « type() », qui retourne « <class 'str'> »). Pour transformer cette chaîne de caractères en nombre entier, on peut utiliser la fonction « int() ». Toutefois, dans ce cas Python génère une erreur lorsque le texte contenu dans « nb » ne représente pas un nombre entier. On peut traiter cette erreur dans le programme à l'aide de « try: ... except: ... ».

    Au final, le code pourrait être celui-ci :

    Code:
    while True:
        try:
            nb = int(input("entrez un nombre "))
        except:
            nb = -1    
        if 0 <= nb <= 10000:
            table(nb)
        else:
            print("terminé")
            break
    Dernière modification par PA5CAL ; 22/12/2018 à 09h37.

  17. #16
    bergignon

    Re : Problème importation python

    Bonjour,

    Puisque je suis encore dans mon apprentissage de python, je n'ai pas encore vu comment utiliser "try" et "except". Donc j'ai deux question. À quoi ces deux commandes servent, comment elles marchent, que disent-elles à l'interpreteur ? Et la deuxième question, y aurait-il un moyen de réaliser le programme sans ces deux commandes ? Car j'ai déjà essayé mais sans trop de succès.

    Bonne journée

  18. #17
    PA5CAL

    Re : Problème importation python

    Quand l'exécution du programme produit une erreur, le programme s'arrête et génère une exception. Par défaut, Python se contente d'affiche les informations relatives à cette erreur.

    À l'aide de « try: », on peut définir un bloc d'instructions dans lequel les exceptions éventuellement générées pourront être gérées par le programme. Dans ce cas, Python n'affiche rien et reprend immédiatement l'exécution du programme au début d'un bloc défini par « except ... : » situé plus loin. Il est possible de définir plusieurs blocs « except ... : », chacun chargé de traiter un type d'erreur différent.

    Pour plus d'infos, lire le tutoriel officiel de Python sur ce sujet (voir par ici).


    On peut envisager de faire un programme qui n'utilise pas la gestion des erreurs par « try: ... except: ... ». Mais dans ce cas, on doit au mininmum prévoir un autre moyen pour quitter correctement le programme. Par exemple, si l'on choisit de quitter en tapant <Entrée> sans entrer de nombre :

    Code:
    while True:
        s = input("entrez un nombre ")
        if s == "" :
            nb = -1
        else :
            nb = int(s)
        if 0 <= nb <= 10000:
            table(nb)
        else :
            print("terminé")
            break
    Mais ce programme peut encore générer une exception et s'arrêter si l'utilisateur fait une erreur (s'il saisit autre chose que des chiffres, notamment). Pour traiter ce cas de figure, il est possible d'écrire un programme plus complexe qui analyse la chaîne de caractères saisie afin de vérifier qu'elle ne génèrera pas d'erreur lors de sa conversion en nombre entier.
    Dernière modification par PA5CAL ; 24/12/2018 à 00h37.

  19. #18
    bergignon

    Re : Problème importation python

    Merci beaucoup,

    Par exemple, dans le programme que vous avez écrit précédemment,

    Code:
    while True:
    try:
    nb = int(input("entrez un nombre "))
    except:
    nb = -1
    if 0 <= nb <= 10000:
    table(nb)
    else:
    print("terminé")
    break

    Pourquoi y a-t-il "nb = -1" après le bloc "except" ?

  20. #19
    PA5CAL

    Re : Problème importation python

    Si la saisie ne correspond pas à un nombre entier, nb prend la valeur -1 afin de faire échouer le test « if 0 <= nb <= 10000: », passer au « else: » et quitter le programme.

  21. #20
    bergignon

    Re : Problème importation python

    Bonjour !

    Premièrement j'espère que vous avez passé un bon temps des fêtes. Je n'ai pas eu la chance de répondre puisque j'étais avec ma famille.
    Je sais que je peux être énervant, mais toutes vos réponses m'aident vraiment dans mon apprentissage. J'ai d'ailleurs, pu travailler sur un programme un tout petit peu plus compliqué.
    Code:
    while True:
    	prix = input("Entrez le prix du produit")
    	print(prix)
    	if prix is not int:
                    print("erreur")
                    continue
            elif prix is int:
                    continue
            print("le montant de la tvq est de", round(int(prix) / 100 * 9.975, 2))
    	print("le montant de la tps est de", round(int(prix) / 100 * 5, 2))
    	print("le montant total est de", round(int(prix) / 100 * 14.975 + int(prix), 2))
    	continue
    Quand j'exécute ce programme, terminal me dit : SyntaxError: inconsistent use of tabs and spaces in indentation. Avec une grosse barre rouge après le elif prix is int. Pourtant, quand j'exécute le programme suivant,
    Code:
    while True:
    	prix = input("Entrez le prix du produit")
    	if prix is not int:
    		print("erreur")
    	elif prix is int:
    		continue
    	print(prix)
    	print("le montant de la tvq est de", round(int(prix) / 100 * 9.975, 2))
    	print("le montant de la tps est de", round(int(prix) / 100 * 5, 2))
    	print("le montant total est de", round(int(prix) / 100 * 14.975 + int(prix), 2))
    La réponse est :
    Entrez le prix
    erreur
    a
    Traceback (most recent call last):
    File "<pyshell#7>", line 8, in <module>
    print("le montant de la tvq est de", round(int(prix) / 100 * 9.975, 2))
    ValueError: invalid literal for int() with base 10: 'a'


    Je sais bien que si j'y avais ajouté un module "try" et "except valueerror") le programme aurait continué de fonctionner mais pourtant la réponse de erreur prouve bien que la petite partie du programme :

    Code:
    if prix is not int:
    		print("erreur")
    	elif prix is int:
    A été exécutée. Ma question est, pourquoi dans le premier code, le programme ne fonctionne pas ?

    Encore et encore merci beaucoup pour votre temps et votre patience.

    Bonne journée

  22. #21
    PA5CAL

    Re : Problème importation python

    Bonjour et bonne année 2019

    En Python, l'indentation est un élément essentiel de la syntaxe. Or, il est possible d'indenter le code à l'aide de caractères de tabulation ou de caractère d'espacement, les deux produisant des résultats différents à l'affichage selon le réglage de l'éditeur utilisé.

    Si une erreur est détectée, c'est parce que l'indentation du « if prix is not int: » a été réalisée à l'aide d'un seul caractère de tabulation, alors que celle du « elif prix is int: » l'a été à l'aide de huit caractères d'espacement. Le plus souvent, ces deux indentations produisent visuellement le même effet. Mais Python n'a pas de raison de les interpréter de la même façon, rien ne prédisposant forcément une tabulation à être équivalente à huit espaces. Il considère donc que les instructions sur ces deux lignes ne sont, a priori, pas situées au même niveau, et que le « elif » ne correspond pas au « if ».

    Pour éviter ce problème, il est préférable d'utiliser un éditeur qui convertit systématiquement toutes les tabulations en espaces. Ainsi, le code sera forcément interprété comme attendu par Python, et il restera visuellement toujours présenté de la même manière.

  23. #22
    bergignon

    Re : Problème importation python

    Bonjour,

    J'ai déjà un éditeur de texte et il semble bien fonctionner, et je n'ai pas encore rencontré de problèmes d'indentation à part celui-ci depuis que je l'ai. Là ou je ne comprend pas, c'est pourquoi aucun de ces codes ne marchent comme je le voudrais. J'ai un dossier ou j'ai une dizaine de programme qui ne fonctionnent pas, le but étant de pouvoir calculer les taxes, et que quand le programme reçoit une programme qui n'est pas un "int", il continue quand même. Auriez-vous un code valide ? Car je suis sérieusement perdu. Et deuxièmement, pourquoi l'indentation du premier code ne marche pas et celui du deuxième oui ? Merci d'avance.

    Bonne journée



    EDIT :

    Voici deux des plusieurs codes qui ne sont pas valides:

    Code:
    while True:
            prix = input("Entrez le prix du produit")
            if prix is int:
                    print(prix)
                    print("le montant de la tvq est de", round(int(prix) / 100 * 9.975, 2))
                    print("le montant de la tps est de", round(int(prix) / 100 * 5, 2))
                    print("le montant total est de", round(int(prix) / 100 * 14.975 + int(prix), 2))
                    continue
            elif prix == "ah":
                    print("erreur")
                    break
            else:
                    continue
    
    Entrez le prix du produit
    Entrez le prix du produit3
    Entrez le prix du produita
    Entrez le prix du produita
    Entrez le prix du produitd
    Entrez le prix du produitg
    Entrez le prix du produitah
    erreur
    >>>




    Code:
    while True:
    	prix = input("Entrez le prix du produit")
    	print(prix)
    	print("le montant de la tvq est de", round(int(prix) / 100 * 9.975, 2))
    	print("le montant de la tps est de", round(int(prix) / 100 * 5, 2))
    	print("le montant total est de", round(int(prix) / 100 * 14.975 + int(prix), 2))
    if prix is not int:
            print("erreur")
            continue
    
    
    SyntaxError: invalid syntax
    Dernière modification par bergignon ; 07/01/2019 à 16h23.

  24. #23
    PA5CAL

    Re : Problème importation python

    Dans le premier code, comme je l'ai déjà expliqué, la fonction input() retourne une chaîne de caractère. Le test « if prix is int: » est donc toujours faux et les calculs ne sont jamais effectués.

    Dans le second code, la ligne « if prix is not int: » est indentée au même niveau que « while True: », ce qui pousse Python à considérer que la boucle while est terminée. La présence de « continue » est donc anormale et est traitée comme une erreur de syntaxe.

  25. #24
    bergignon

    Re : Problème importation python

    Salut,

    Avant de quitter le forum, j'aimerais avoir de l'aide pour ma dernière erreur dans un autre programme. Encore une fois, très basique, le programme génère une nombre aléatoire et il faut le trouver.

    Code:
    while True:
        try:
           nombre = randrange(101)
           nombre_guess = input("Tentez de deviner le nombre")
        except ValueError:
            print("Vous n'avez pas entré de nombre")
            continue
        if nombre == int(nombre_guess):
            print("BRAVO ! Vous avez gagné !")
            break
        elif nombre > int(nombre_guess):
            print("Trop bas")
            i += 1
            continue
        else:
            print("Trop haut")
            i += 1
        if i == 20:
            print("Dommage, vous avez épuisé toutes vos chances")
            break



    Il ne marche pas comme il faut, j'ai l'impression que la variable "nombre" change à chaque fois

    Tentez de deviner le nombre44
    Trop haut
    Tentez de deviner le nombre43
    Trop bas


    Et il y a ça aussi qui est bizarre.

    Et cette erreur aussi apparait

    if nombre == int(nombre_guess):
    3ValueError: invalid literal for int() with base 10: ''


    En tout cas, merci pour votre aide, c'est mon dernier message

  26. #25
    PA5CAL

    Re : Problème importation python

    Le problème est algorithmique.

    Il faudrait au minimum deux boucles while imbriquées, l'une pour répéter le saisie du nombre quand elle est incorrecte, l'autre pour répéter les tentatives du joueur. Le choix du nombre aléatoire doit être effectué avant ces boucles.

    La reprise des boucles par continue doit également pouvoir être justifiée.

    Voici un exemple de code qui marche :
    Code:
    from random import randrange
    
    nombre = randrange(100)
    print("Tentez de deviner le nombre (entre 0 et 100)")
    essais = 0
    while True:
        essais += 1
        while True:
            try:
                nombre_guess = int(input("> "))
                break
            except:
                print("Vous n'avez pas entré de nombre")
        if nombre == nombre_guess:
            print("BRAVO ! Vous avez gagné !")
            break
        elif nombre > nombre_guess:
            print("Trop bas")
        else:
            print("Trop haut")
        if essais == 20:
            print("Dommage, vous avez épuisé toutes vos chances")
            break

  27. #26
    bergignon

    Re : Problème importation python

    Bonjour,

    J'avais une petite question, pour rire, je voulais faire un programme de vérité ou conséquences, et je me demandais si on pouvait utiliser la fonction randrange avec une liste, mais python ne veut pas, :

    verites
    [1, 2, 3]
    >>> randrange(int(verites))
    Traceback (most recent call last):
    File "<pyshell#5>", line 1, in <module>
    randrange(int(verites))
    TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
    >>>

    J'ai tenté plusieurs choses, mais rien ne marche.

    Merci

  28. #27
    PA5CAL

    Re : Problème importation python

    Les fonctions ne peuvent être utilisées qu'avec des types de données pour lesquelles elles ont été conçues.

    En particulier :
    - la fonction int() attend un ou deux paramètres. Le premier paramètre est un nombre ou un texte à convertir en entier. Si le premier paramètre est un texte, le second paramètre peut être un nombre compris entre 0 et 36 précisant la base de conversion (par exemple 2 pour du binaire ou 16 pour de l'hexadécimal).
    - la randrange() attend de un à trois paramètres, qui doivent être des nombres. Si un seul paramètre est spécifié, il indique la borne supérieure des nombres aléatoires générés. Dans le cas contraire, le premier paramètre indique la borne inférieure, le second paramètre la borne supérieure et, le cas échéant, le troisième paramètre l'écart entre les nombres.

    Ces deux fonctions n'acceptent donc pas de liste comme paramètre.


    Par ailleurs, il est important de lire le message retourné par Python, qui précisé la raison de l'erreur : « TypeError: int() argument must be a string, a bytes-like object or a number, not 'list' ».

    Dans le cas présent, ce n'est pas la fonction randrange() qui a rejeté la liste, mais la fonction int() dont la valeur de sortie devait être utilisée par randrange().


    Pour pouvoir traiter une liste, on ne peut pas attendre que Python fasse tout seul le travail, il faut écrire le code qu'on souhaite qu'il exécute.

  29. #28
    bergignon

    Re : Problème importation python

    J'ai trouvé une fonction du module random (choice) qui permet de faire la même chose. Encore une fois merci beaucoup pour votre temps et aide. Cependant, j'ai un autre dilemme.. J'ai créé un programme qui permet de calculer l'aire de certains polygones réguliers ;import time

    Code:
    print("Ce programme est destiné à calculer l'aire de polygones réguliers")
    time.sleep(2)
    print("""Si vous souhaitez calculer l'aire de certains polygone, voici comment les appeler pour que le programme les reconnaisse
    
    carré -> carre
    triangle -> triangle
    losange -> losange
    trapèze -> trapeze
    parallélogramme -> parallelogramme
    
    Si vous désirez entrez un autre polygone, entrez simplement ; polygone""")
    
    while True:
          figure = input("Entrez la figure dont vous souhaitez calculer l'aire : ")
          if figure == "carre":
                cote = input("Entrez la mesure du coté : ")
                print("L'aire de ce carré est de", int(cote) ** 2, "u2")
                time.sleep(2)
          elif figure == "triangle":
                base = input("Entrez la mesure de la base du triangle : ")
                hauteur = input("Entrez la mesure de la hauteur du triangle : ")
                print("L'aire de ce triangle est de", int(hauteur) * int(base) / 2, "u2")
                time.sleep(2)
          elif figure == "losange":
                grandedroite = input("Entrez la mesure de la grande droite : ")
                petitedroite = input("Entrez la mesure de la petite droie : ")
                print("L'aire de ce losange est de", int(grandedroite) * int(petitedroite) / 2, "u2")
                time.sleep(2)
          elif figure == "trapeze":
                petitebase = input("Entrez la mesure de la petite base : ")
                grandebase = input("Entrez la mesure de la grande base : ")
                hauteur1 = input("Entrez la mesure de la hauteur : ")
                print("L'aire de ce trapeze est de", (int(petitebase) + int(grandebase)) * int(hauteur1) / 2, "u2")
                time.sleep(2)
          elif figure == "parallelogramme":
                cote1 = input("Entrez la mesure d'un des cotés : ")
                cote2 = input("Entrez la mesure de l'autre coté : ")
                print("L'aire de ce parallélogramme est de", int(cote1) * int(cote2), "u2")
                time.sleep(2)
          elif figure == "polygone":
                apotheme = input("Entrez la mesure de l'apothème : ")
                cote3 = input("Entrez la mesure des cotés : ")
                nbcote = input("Entrez le nombre de cotés : ")
                print("L'aire de ce polygone régulier à", int(nbcote), "cotés est de", int(nbcote) * int(apotheme) * int(cote3), "u2")
                time.sleep(2)
    Il marche bien, mais il ne peut pas supporter des données de types floats. Là ou je me pose la question. C'est que pour pouvoir faire les calculs de l'aire, j'ai besoin de dire à python que la donné est int d'ou le : int(coté). Mais cela fait que je ne peux pas mettre de valeurs de type float, alors, comment je ferais pour pouvoir mettre des valeurs à la fois de type float et int ?

  30. #29
    PA5CAL

    Re : Problème importation python

    Pour transformer une chaîne de caractères en nombre à virgule flottante plutôt qu'en nombre entier, il suffit d'utiliser la fonction float() à la place de la fonction int().

  31. #30
    bergignon

    Re : Problème importation python

    Je comprend, mais même si la variable est entière le programme marchera ?

    Si mot = 1, float(mot) est valide ?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [Python] Problème de lag de programme et essai de Timer python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 20
    Dernier message: 26/01/2018, 15h14
  2. [Immunologie] problème d'importation des molécules
    Par Zouhir1 dans le forum Biologie
    Réponses: 3
    Dernier message: 12/11/2017, 19h22
  3. Altium _ probleme importation composant du schema au pcb
    Par ziad_jabbour dans le forum Électronique
    Réponses: 0
    Dernier message: 13/09/2014, 23h23
  4. problème d'importation de photos
    Par MASHKA dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 27/08/2009, 10h34
  5. Probleme importation QIF dans MS Money
    Par inviteba3f7cc7 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 26/08/2008, 10h57