Exercice simple de programmation en Python

a marqué ce sujet comme résolu.

Bonjour à tous, J’ai récemment trouvé un exercice sur Internet pour s’entrainer au langage Python. J’ai cherché pendant 4 heures une solution mais je n’ai réussi à faire aucun programme qui marche. Voici l’exercice :

Écrivez un programme qui mesure l’intensité lumineuse toutes les 50ms pendant 3 secondes, et stocke ces 60 mesures dans une liste. Le programme affiche alors une visualisation de ces mesures sur l’écran : la mesure numéro x est visualisée par un trait vertical d’une certaine hauteur sur la colonne x. Ce trait vertical va de y=31 jusqu’à y=31-valeur/3.

Pour le faire, on peut seulement utiliser les variables, les crochets, certains mots-clés (def, while, if, else, elif, or, and, list, set, lambda, for, not) et certaines fonctions (readLightIntensity(lightSensor), drawLine(x0, y0, x1, y1), clearScreen(), sleep(milliseconds).

Je suis réellement bloqué ; je vous remercie par avance de trouver un programme qui puissent résoudre cet exercice. Bien cordialement.

Salut \o

Qu’as-tu fait pour l’instant ?

Quel est ton problème ? Je veux dire que n’arrives-tu pas à faire dans cet exercice ? Sur quoi tu bloques ?

+0 -0

je vous remercie par avance de trouver un programme qui puissent résoudre cet exercice.

C’est à toi de trouver, pas à nous. Mais, en revanche, tu peux nous montrer le code que tu as déjà fait et on pourra t’aider là où tu bloques ou où tu fais erreur.

+0 -0

En fait, je suis bien trop nul en Python pour réussir cela, le problème, c’est que je dois rendre ce travail demain au plus tard, je suis vraiment mal si je n’ai rien !

Baba31

Mais qu’est-ce que tu attends de nous alors ? Tu as eu ce travail hier à rendre pour demain ?

Désolé, on n’est pas là pour faire ton travail.

Ce n’est pas que tu es vraiment nul en Python, c’est juste que tu n’as pas appris et c’est un travail qu’on ne pourra jamais faire pour toi.

+0 -0

le problème, c’est que je dois rendre ce travail demain au plus tard, je suis vraiment mal si je n’ai rien !
[…]
En fait, je code très bien en Python. C’est juste que je n’ai pas le temps de le faire parce que je dirige une grande entreprise. D’ailleurs, je ne suis même pas français, mais je le dis un peu; si quelqu’un parle slovaque, c’est mon frère. Ça peut m’aider.

Baba31 - Google Translate

Tu diriges une grande entreprise, mais tu vas toujours à l’école ?

+0 -0

Aucun problème, personne n’est rancunier ici.
On serra ravi de t’aider quand tu auras le temps et l’envie d’apprendre.

+1 -0

Rebonjour, j’ai changé de problème car en réalité, je n’aimais pas l’autre. Voici l’exercice : Un joueur pilote un carré avec les 4 directions de la manette, ce carré laissant une trace derrière lui. Le carré fait 2 pixels de coté et commence en x=64 et y=16. Toutes les 50ms, testez si une flèche de la manette est appuyée. Si oui, déplacez le carré de 2 pixels dans la direction choisie, sans effacer ce qui était déjà affiché.

Voici mon code :

from quickpi import *
Y=16
X=64
drawRectangle(64, 16, 2, 2)
while True:
    if isButtonPressed("stick1.up"):
        drawRectangle(X, Y, 2, 2)
        Y=Y-2
    if isButtonPressed("stick1.down"):
        drawRectangle(X, Y, 2, 2)
        Y=Y+2
    if isButtonPressed("stick1.left"):
        drawRectangle(X, Y, 2, 2)
        X=X-2
    if isButtonPressed("stick1.right"):
        drawRectangle(X, Y, 2, 2)
        X=X+2
    sleep(50)

Sauf que ça marche mal : je pense que le sleep(50) n’est pas au bon endroit ?

Merci d’avance

Sauf que ça marche mal :

Ça marche mal comment ? Qu’est-ce qui semble faux ?

Je pense que l’affichage est décalé, tu dessines avant de changer la position. Après, vu le délai de 50 ms, pas sûr que ça se voit tant que ça.

+0 -0

vu le délai de 50 ms, pas sûr que ça se voit tant que ça.

50 ms, c’est 1/20 de seconde. C’est largement assez long pour avoir l’impression que la réponse est lente et saccadée. Surtout qu’avec l’erreur que tu pointes, tu peux attendre jusqu’à 1/10 de seconde avant d’avoir une réponse…

+1 -0

Merci pour votre aide, j’ai finalement trouvé le bug. Le programme marche ainsi :

from quickpi import *
Y=16
X=64
drawRectangle(X, Y, 2, 2)
while True:
    if isButtonPressed("stick1.up"):
        Y=Y-2
        drawRectangle(X, Y, 2, 2)
    if isButtonPressed("stick1.down"):
        Y=Y+2
        drawRectangle(X, Y, 2, 2)
    if isButtonPressed("stick1.left"):
        X=X-2
        drawRectangle(X, Y, 2, 2)
    if isButtonPressed("stick1.right"):
        X=X+2
        drawRectangle(X, Y, 2, 2)
    sleep(100)
+0 -0

C’est pas mal !

On utilise généralement elif plutôt que seulement if quand les contritions s’excluent mutuellement. Ici l’utilisateur pourrait bouger son stick au bon moment pour aller en diagonal sinon. Avec elif, cela n’est plus possible.

Tu peux factoriser du code pour n’utiliser qu’un drawRectangle.

Sinon, c’est à peut prêt tout.

from quickpi import *
Y=16
X=64

while True:
    drawRectangle(X, Y, 2, 2)
    sleep(50)
    if isButtonPressed("stick1.up"):
        Y=Y-2
    elif isButtonPressed("stick1.down"):
        Y=Y+2
    elif isButtonPressed("stick1.left"):
        X=X-2
    elif isButtonPressed("stick1.right"):
        X=X+2

Me semble tout à fait fonctionnel.

+0 -0

Merci Ache : les elif je suis d’accord mais le reste change le programme et crée des bug. Sinon pour améliorer mon programme je pourrais modifier le programme de la version précédente pour qu’il permette à deux joueurs de jouer en réseau. Chaque joueur contrôlerais un carré. Le joueur 1 commence par exemple en x=56 et y=16, et le joueur 2 en x=72 et y=16. Le joueur 1 joue en premier, au tour numéro 0. Le joueur 2 joue ensuite au tour 1, puis le joueur 1 au tour 2, et ainsi de suite. Ça permettrait de faire une liste je pense mais comment faire pour qu’elle aille à l’infini, etc ? J’ai réussi ça pour l’instant :

from quickpi import *
Y=16
X=56
drawRectangle(X, Y, 2, 2)
while True:
    if isButtonPressed("stick1.up"):
        Y=Y-2
        drawRectangle(X, Y, 2, 2)
    elif isButtonPressed("stick1.down"):
        Y=Y+2
        drawRectangle(X, Y, 2, 2)
    elif isButtonPressed("stick1.left"):
        X=X-2
        drawRectangle(X, Y, 2, 2)
    elif isButtonPressed("stick1.right"):
        X=X+2
        drawRectangle(X, Y, 2, 2)
    sleep(100)
Y2=16
X2=72
drawRectangle(X2, Y2, 2, 2)
while True:
    if isButtonPressed("stick1.up"):
        Y=Y-2
        drawRectangle(X2, Y2, 2, 2)
    elif isButtonPressed("stick1.down"):
        Y=Y+2
        drawRectangle(X2, Y2, 2, 2)
    elif isButtonPressed("stick1.left"):
        X=X-2
        drawRectangle(X2, Y2, 2, 2)
    elif isButtonPressed("stick1.right"):
        X=X+2
        drawRectangle(X2, Y2, 2, 2)
    sleep(100)

Merci d’avance

Le réseau, c’est compliqué. Là, tu fais du deux joueurs temps réel sur la même machine, c’est moins compliqué, mais pas simple du tout pour autant. Ensuite, je t’invite à voir, pas à pas, ce que fait ton programme en suivant strictement les instructions que tu as écrite. Et à comparer à ce que tu veux faire.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte