Le prix ne peut pas avoir une virgule ? Je crois avoir réussi à me dépanner :
1 #!/usr/bin/python
2 # coding utf-8
3
4 print('Entrez le prix hors taxe, svp, ou 0 pour terminer : ', end =' ')
5 prix = input ()
6 prix = float(prix)
7 prix_TTC = float(prix)
8 while prix:
9 if prix :
10 prix_TTC = (prix * 1.2)
11 print("Le prix TTC est : ", prix_TTC)
12 else :
13 print("Entrez un autre prix hors taxe, svp.")
14 print("Entrez un autre prix hors taxe, svp : ", end =' ')
15 prix = float(input())
16 print("Le calcul est terminé.")
- Edité par Julius Eliot 1 février 2020 à 15:27:20
Je ne me suis pas assez bien exprimé : le prix peut avoir une décimale. J'ai trouvé comment limiter le float à deux chiffres après la virgule (mais cela n'apparaît pas dans le code précédent) et j'ai remplacé le "o" pour arrêter la boucle par "end =' '", ce qui est quand même plus propre. Merci pour votre soutien.
- Edité par Julius Eliot 1 février 2020 à 18:49:17
Hello ! Je suis le cours de Python, j'en suis au premier TP de ZCasino, j'ai commencé à le coder, j'ai tout fait sauf les exceptions que je me réserve pour après, j'ai voulu tester mon code mais quand je double clique sur le fichier, la page se ferme directement, alors je ne sais pas si ça vient de mon code qui est faux, mais du coup je ne pourrais pas comprendre sans aide ! Je vous poste mon code
# -*-coding:Latin-1 -*
import os
from random import randrange
from math import ceil
argent = 1000
print("Vous avez 1000 dollars de mise")
while argent > 0:
numero = input("Choisissez votre numéro: ")
mise = input("Choisissez votre mise: ")
numero = int(numero)
mise = int(mise)
hasard = randrange(50)
if hasard == numero:
print("Vous avez gagné ! Quelle chance !")
argent += mise * 3
ceil(argent)
print("Vous avez désormais ", argent, "dollars")
elif hasard % 2 == 0:
print("Vous êtes tombés sur une case noire ! Vous gagnez 50% de votre mise !")
argent += mise * 1.50
ceil(argent)
print("Vous avez désormais ", argent, "dollars")
elif hasard % 2 == 1:
print("Vous êtes tombés sur une case rouge ! Vous gagnez 50% de votre mise !")
argent += mise * 1.50
ceil(argent
print("Vous avez désormais ", argent, "dollars")
else:
print("Vous avez perdu, vous perdez votre mise !")
argent -= mise
ceil(argent)
print("Vous avez désormais ", argent, "dollars")
os.system("pause")
"La vérité se trouve au fond d'un puits" Democrite
Je ne sais pas si ça va résoudre tout, mais il y a un petit souci avec l'utilisation de la fonction ceil().
Déjà, tu peux t'en passer en ligne 16, puisque "mise" est entier. Mais par la suite, la bonne utilisation est par exemple : argent += ceil(mise * 1.5). C'est mise * 1.5 qu'il faut arrondir. Et ceil() retourne la valeur arrondie, donc tes appels ne permettent pas de récupérer cette valeur.
Sinon, y a une parenthèse qui manque en ligne 26.
Mais, à moins que ce ne soit une consigne de les avoir entières, moi, je mettrais les sommes d'argent en float, avec deux décimales. Je ne suis jamais allé au casino, peut-être que les centimes ne sont pas acceptés ?
- Edité par zakod 4 février 2020 à 10:09:11
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Super merci ! Effectivement cela a réglé mon problème, mon programme se lance correctement, je ne sais pas pourquoi !
Bon je me suis rendu compte que je suis toujours gagnant, il faut que je comprenne pourquoi et que je gère les exceptions maintenant. Si quelqu'un peut m'expliquer d'ailleurs pourquoi je suis toujours gagnant, merci d'avance.
"La vérité se trouve au fond d'un puits" Democrite
D'après ton if, tu dis ceci : si ton numéro est pair, tu gagnes une demi-fois ta mise, sinon, tu gagnes une demi-fois ta mise ! C'est normal, tu gagnes tout le temps. le else qui suit ne sera jamais exécuté.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Jusqu’où faut-il compléter les pointillés pour obtenir un nombre plus grand qu’un milliard ?
(1 + 2) × (3 + 4) × (5 + 6) × (7 + 8) × · · ·
Je suis débutant et j'essaie de m'entraîner en faisant des exercices simples. Celui-ci me résiste (et ce n'est pas le seul !). La copie d'écran jointe de l'interpréteur Python montre ce que j'ai pu faire : la somme des additions entre parenthèses pour un nombre limité à 10 et non un milliard. J'aurai deux questions. 1) Comment à partir de l'algorithme de l'interpréteur ci-joint peut-on obtenir des produits qui satisfassent à la condition de l'exercice ? Autrement dit qu'elle serait la suite pour obtenir des produits ? 2) Je ne doute pas qu'il y ait un meilleur algorithme. Lequel ? Merci pour votre aide.
Et tu devrais utiliser la boucle non pas pour recalculer un tout nouveau nombre à chaque fois, mais continuer le calcul à partir du nombre de l'itération précédente.
Julius, à mon avis, il faut une boucle while plutôt que for. En effet, tu ne connais pas le nombre d'itérations, c'est même plus ou moins l'inconnue du problème.
Par ailleurs, dans la boucle for, pas besoin d'initialiser i, parce que range(10), ça signifie {0,1,...9}.
voilà ma solution.
p = 1
i = 1
n = 0
resultat_depasse = int(input("nombre à franchir ?"))
while p < resultat_depasse :
s = 2 * i + 1
p *= s
i += 2
n += 1
print("s = {0}, p = {1}".format(s,p))
e1 = (s - 1) // 2
print("produit = {0}, nombre d'itérations = {1}, deux derniers entiers consécutifs = {2}, {3}".format(p,n, e1, e1 + 1))
- Edité par zakod 5 février 2020 à 9:29:58
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Un for i in itertools.count(1, 2) fonctionne bien par exemple et évite d'avoir à gérer les incrémentations manuellement.
for est fait pour itérer sur un ensemble d'éléments : cet ensemble n'a pas besoin d'être fini pour exister et il est donc parfaitement possible d'itérer sur un ensemble infini (générateur).
1) pour intégrer la condition de sortie, j'ai fait ça, est-ce que c'est correct ? :
from itertools import count
p = 1
n = 0
resultat_depasse = int(input("nombre à franchir ?"))
for i in itertools.count(1, 2) :
if p < resultat_depasse :
break
s = 2 * i + 1
p *= s
n += 1
print("s = {0}, p = {1}".format(s,p))
e1 = (s - 1) // 2
print("produit = {0}, nombre d'itérations = {1}, deux derniers entiers consécutifs = {2}, {3}".format(p,n, e1, e1 + 1))
(Au final, si c'est bien ça, je préfère encore la boucle while.)
2) J'ai voulu faire ceci : from itertools import count mais on me répond "No module named 'itertools'"
Où est le souci ?
- Edité par zakod 5 février 2020 à 13:13:29
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Je vais paraitre sûrement pour un demeuré mais c'est pas grave.
J'en suis au chapitre sur les fichiers de Python, je suis censé changer le répertoire de sauvegarde depuis l'interprétateur python, mais j'ai beau tout essayé, je n'y arrive pas. Je vous met mon code en dessous.
import os
os.chdir("C:/test/python.txt")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [WinError 3] Le chemin d’accès spécifié est introuvable: 'C:/test/python.txt'
Voilà exactement le message d'erreur que j'ai, pourtant j'ai bien crée un dossier sous C: du même nom que dans le code. Dans le cours il est marqué d'utiliser le / mais dans ses exemples il utilise le \, je ne comprends vraiment rien, je suis perdu. J'ai essayé plusieurs chemins et écritures différentes, rien n'y fait.
Alors si quelqu'un a une idée de mon problème,il est là bienvenue Merci !
- Edité par Fizwizbiz 5 février 2020 à 13:43:23
"La vérité se trouve au fond d'un puits" Democrite
Et tu devrais utiliser la boucle non pas pour recalculer un tout nouveau nombre à chaque fois, mais continuer le calcul à partir du nombre de l'itération précédente.
Oui, c'est justement sur ce point qu'une aide m'aurait été utile.
Pour rappel de l'énoncé : "Jusqu’où faut-il compléter les pointillés pour obtenir un nombre plus grand qu’un milliard ?
(1 + 2) × (3 + 4) × (5 + 6) × (7 + 8) × · · ·"
Je suis juste un débutant. Merci quoi qu'il en soit.
Julius, à mon avis, il faut une boucle while plutôt que for. En effet, tu ne connais pas le nombre d'itérations, c'est même plus ou moins l'inconnue du problème.
Par ailleurs, dans la boucle for, pas besoin d'initialiser i, parce que range(10), ça signifie {0,1,...9}.
voilà ma solution.
p = 1
i = 1
n = 0
resultat_depasse = int(input("nombre à franchir ?"))
while p < resultat_depasse :
s = 2 * i + 1
p *= s
i += 2
n += 1
print("s = {0}, p = {1}".format(s,p))
e1 = (s - 1) // 2
print("produit = {0}, nombre d'itérations = {1}, deux derniers entiers consécutifs = {2}, {3}".format(p,n, e1, e1 + 1))
- Edité par zakod il y a environ 22 heures
Merci, Zakod, pour ta solution. Comme je débute et que je m'applique à comprendre, si tu pouvais commenter et expliquer ce que fait ce code pour répondre à l'énoncé ce serait parfait. Pourquoi les résultats sont-ils entre { }, à quoi correspond le ".format". Je suis le cours, mais je viens à peine de finir la première séquence avec le quiz.
Julius, tu devrais coller les codes qu'on te montre en exemple et les exécuter. Ça permet de comprendre.
Ensuite, quand on te montre un truc que tu ne connais pas, fais comme moi : Antoine me parle de itertools.count(), je regarde dans la documentation python : https://docs.python.org/fr/3/
Une autre façon de trouver l'info, avec google, par exemple du tape format() python, tu arrives peut-être plus directement au bon endroit.
Par exemple, pour la fonction format(), tu vas l'y trouver.
N'hésite pas à devancer le cours, à acquérir les choses en avance.
Un livre qui me sert bien (je devrais pas le dire, mais c'est tout aussi gratuit que le cours OC, et c'est bien plus complet) :
Quand tu va essayer mon code, prends ma première version, celle où il y a une boucle while, et non pas la seconde où j'essaye l'idée d'Antoine (qui n'a pas répondu à mes questions, peut-être parce qu'il ne les a pas vues). Ou peut-être parce qu'il s'est rendu compte que la boucle while, pour ton cas, y a pas photo.
En fait, elle ne sert qu'à afficher les résultats. Tu comprendras quand tu exécuteras le script.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
J'ai exécuté le script et, émerveillé, j'ai pensé que le chemin que je dois parcourir est encore long et forcément chaotique. Une ligne comme celle qui suit (la 17) est bien énigmatique à mon niveau.
17 e1 = (s - 1) // 2
Merci encore pour ta solution et tes conseils que je mets déjà en pratique.
La longueur et le chaos du chemin, c'est ce qui fait sa beauté et son attrait. L'apprentissage de la programmation, c'est comme l'auto-stop : quand j'étais jeune, il m'est arrivé de rester jusqu'à huit heures au même endroit. Je maudissais l'humanité entière. À la fin, quelqu'un te prend, et tout est oublié. Et bien la programmation, c'est pareil. Des heures carrées à se prendre pour un con, coincé. Et puis tu comprends, et ça repart.
e = (s - 1) divisé par 2, c'est la fonction réciproque de s = 2 * i + 1 (i et e, même chose). J'ai fait ça pour pouvoir afficher les deux derniers entiers consécutif. Dans l'absolu, il n'y en pas besoin.
le // sert pour obtenir un entier. Si tu fais juste / , c'est un float, la division peut ne pas tomber juste. Si tu fais // ça te donne le quotient de la division entière. 7 / 2 = 3.5, mais 7 // 2 = 3. Dans notre cas, il est certain que le dividende est pair (2 * i est forcément pair, donc 2 * i + 1 impair : s est impair. Donc s - 1 est pair. Peut-être que ça marche avec le simple /, je préfère assurer avec le //.
- Edité par zakod 6 février 2020 à 11:52:41
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
zakod a écrit:
> et non pas la seconde où j'essaye l'idée d'Antoine (qui n'a pas répondu à mes questions, peut-être parce qu'il ne les a pas vues). Ou peut-être parce qu'il s'est rendu compte que la boucle while, pour ton cas, y a pas photo.
Je les avais vues mais pas pris le temps de répondre sur le moment, et le sujet ne se prêt pas vraiment aux discussions croisées.
Le soucis du while, c'est que tu dois gérer toutes les incrémentations, donc c'est facilement sujet à bug.
Je ne vois pas le problème d'utiliser un break dans le for, c'est ainsi limpide.
Et ainsi tu sors de la boucle à l'endroit précis où tu le souhaites.
Tu ne fais pas d'itération surnuméraire ayant pour effet de modifier une dernière fois tes variables i et n alors que ce n'est pas souhaitable.
Vu que le résultat a maintenant été posté, je vais montrer comment je voyais les choses avec un for :
from itertools import count
r = 1
for i, n in enumerate(count(1, 2)):
r *= 2 * n + 1
if r >= 1_000_000_000:
break
print(f'produit supérieur à 1 milliard après {i+1} itérations (dernier multiplicateur: {i}+{i+1})')
On pourrait se passer du break à l'aide d'une spécificité d'iter, mais ça devient clairement illisible :
r = 1
for (i, n), _ in zip(enumerate(count(1, 2)), iter(lambda: r >= 1_000_000_000, True)):
r *= 2 * n + 1
#!/usr/bin/python
# coding utf-8
L, h, p = 0, 0, 0
L, h, p = str(input("Entrez la longueur, la hauteur, la profondeur :{'L','h','p'}".format("L","h","p") ))
vol = L * h * p
print("Le volume du rectangle est de : ", vol)
me donne :
KeyError: "'L','h','p'"
Une heure de recherche sur Google ne m'a pas donné la solution. Mes débuts sont laborieux. J'aurais pu contourner le problème en faisant trois inputs pour L,h,p. Mais j'ai préférer m'acharner sur cette écriture qui est donnée dans le livre de Gérard Swinnen. J'ai aussi voulu utiliser la méthode .format. (le "<br>" final n'est pas dans le code)
Merci pour votre aide.
- Edité par Julius Eliot 8 février 2020 à 10:42:49
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique