Projet

Ayress - Modifié le 5 déc. 2020 à 18:39
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 13 déc. 2020 à 17:43
Bonjour à tous,
Je suis actuellement scolarisé en Terminale avec l'option NSI.
Depuis quelques temps, je me suis lancé dans un programme assez complexe (pour moi).
Reproduire le jeu "10FastFinger" en python.
Cependant, je rencontre quelques difficutés :
Voici le début de mon code suivi de quelques idées pour le rétrécir :


"""But de ce programme : Reproduire le jeu 10FastFinger"""
"""Partie du jeu :"""
import time

print("Les mots sont : ainsi, fois, tout, cent, amour, reprendre, devenir, jusque, rue, monsieur, mari, ville, falloir, maison, quel, peu, tenir, air, bien, beau ")
t=time.time() 
while 1:
    if time.time()-t < 30:
        score = 0
        a=input("Mot(ainsi) : ")
        if a == "ainsi":
            score+=1
        else : 
            score+=0
        b=input("Mot(fois) : ")
        if b == "fois":
            score+=1
        else : 
            score+=0
        c=input("Mot(tout) : ")
        if c == "tout":
            score+=1
        else : 
            score+=0
        d=input("Mot(cent) : ")
        if d == "cent":
            score+=1
        else : 
            score+=0
        e=input("Mot(amour) : ")
        if e == "amour":
            score+=1
        else : 
            score+=0
        f=input("Mot(reprendre) : ")
        if f == "reprendre":
            score+=1
        else : 
            score+=0
        g=input("Mot(devenir) : ")
        if g == "devenir":
            score+=1
        else : 
            score+=0
        h=input("Mot(jusque) : ")
        if h == "jusque":
            score+=1
        else : 
            score+=0
        i=input("Mot(rue) : ")
        if i == "rue":
            score+=1
        else : 
            score+=0
        j=input("Mot(monsieur) : ")
        if j == "monsieur":
            score+=1
        else : 
            score+=0
        k=input("Mot(mari) : ")
        if k == "mari":
            score+=1
        else : 
            score+=0
        l=input("Mot(ville) : ")
        if l == "ville":
            score+=1
        else : 
            score+=0
        m=input("Mot(falloir) : ")
        if m == "falloir":
            score+=1
        else : 
            score+=0
        n=input("Mot(maison) : ")
        if n == "maison":
            score+=1
        else : 
            score+=0
        o=input("Mot(quel) : ")
        if o == "quel":
            score+=1
        else : 
            score+=0
        p=input("Mot(peut) : ")
        if p == "peut":
            score+=1
        else : 
            score+=0
        q=input("Mot(tenir) : ")
        if q == "tenir":
            score+=1
        else : 
            score+=0
        r=input("Mot(air) : ")
        if r == "air":
            score+=1
        else : 
            score+=0
        s=input("Mot(bien) : ")
        if s == "bien":
            score+=1
        else : 
            score+=0
        t=input("Mot(beau) : ")
        if t == "beau":
            score+=1
        else : 
            score+=0
        u=input("Mot(connaître) : ")
        if u == "connaître":
            score+=1
        else : 
            score+=0
        v=input("Mot(mettre) : ")
        if v == "mettre":
            score+=1
        else : 
            score+=0
        w=input("Mot(puis) : ")
        if w == "puis":
            score+=1
        else : 
            score+=0   
        x=input("Mot(ciel) : ")
        if x == "ciel":
            score+=1
        else : 
            score+=0
        y=input("Mot(sans) : ")
        if y == "sans":
            score+=1
        else : 
            score+=0
        z=input("Mot(votre) : ")
        if z == "votre":
            score+=1
        else : 
            score+=0
        aa=input("Mot(premier) : ")
        if aa == "premier":
            score+=1
        else : 
            score+=0
        ab=input("Mot(avoir) : ")
        if ab == "avoir":
            score+=1
        else : 
            score+=0
        ac=input("Mot(avec) : ")
        if ac == "avec":
            score+=1
        else : 
            score+=0
        ad=input("Mot(chambre) : ")
        if ad == "chambre":
            score+=1
        else : 
            score+=0
        ae=input("Mot(ami) : ")
        if ae == "ami":
            score+=1
        else : 
            score+=0
        af=input("Mot(ni) : ")
        if af == "ni":
            score+=1
        else : 
            score+=0
        ag=input("Mot(noir) : ")
        if ag == "noir":
            score+=1
        else : 
            score+=0
        ah=input("Mot(chaque) : ")
        if ah == "chaque":
            score+=1
        else : 
            score+=0
        ai=input("Mot(aimer) : ")
        if ai == "aimer":
            score+=1
        else : 
            score+=0
        aj=input("Mot(parler) : ")
        if aj == "parler":          
            score+=1
        else : 
            score+=0
    else :
        print("Le temps est écoulé")
            
print("Bien joué, vous avez fini, votre score est de :",score,"en 30 secondes")
moyenne = 16
score_min=score*2
print("Vous avez tapé",score_min,"de mots en 1 minute")
if score > moyenne:
    print("Bravo, vous êtes au dessus de la moyenne")
else : 
    print("Votre score est en dessous de la moyenne, retentez votre chance")

--------------------------------------------------------------------------------------------------------------------------------------
Je créé donc un chronomètre au début de mon programme et par la suite dans une boucle, j'utilise le moyen "input" pour avoir la réponse de l'utilisateur.
Problème : unsupported operand type(s) for -: 'float' and 'str'

Quelques idées :

import random
MaListe=["chaque","jeu","jouer","mettre","puis","ciel","amour","cent","tout","..."]
random.choice(MaListe)

#J'essaie de faire aléatoirement prendre un mot dans une liste

Je pense également qu'il est préférable de faire une boucle ou je regroupe tous les inputs.


Cordialement,

Nathan

54 réponses

Si mon t=time.time(), je ne dois pas faire : time.time()-t car cela fera tout le temps 0.
Donc ça ne marche que la première fois
0
D'accord,
Oui, c'est logique, un réel - une chaîne de caractères est impossible.
Mais je ne sais pas comment changer la ligne pour qu'elle marche.
Le problème central c'est que j'impose directement les mots à taper
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
5 déc. 2020 à 22:54
Ça plante à cette ligne au deuxième passage.
Mais la raison n’est pas là.
Je t’ai dit que c’est lié au fait que tous les mots ont été demandés.
0
D'accord mais comment régler cela ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
D'accord, en quoi le fait d'imprimer "t", change le programme ?
0
import time

print("Les mots sont : ainsi, fois, tout, cent, amour, reprendre, devenir, jusque, rue, monsieur, mari, ville, falloir, maison, quel, peu, tenir, air, bien, beau ")
t=time.time() 
while 1:
    print(t)
    if time.time()-t < 30:
        score = 0
        a=input("Mot(ainsi) : ")
        if a == "ainsi":
            score+=1
        else : 
            score+=0
....

J'ai toujours le problème de la soustraction d'un réel sur une chaîne de caractères.
0
J'ai une une suite de chiffre :
1607210157.0661275
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 08:36
La première fois oui, c’est l’heure à laquelle ton jeu commence.
Mais après que tous les mots ont été demandés, donc juste avant que ça plante, il y a autre chose
0
Bonjour,
Je pense que le problème ici vient de cette ligne :
    else :
        print("Le temps est écoulé")

Puisqu'ici, la console ne va faire qu'écrire en boucle "Le temps est écoulé".
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
Modifié le 6 déc. 2020 à 13:17
Bon.
Je t'ai dit de regarder la valeur de t juste avant que ça plante.

Et tu cherches ailleurs.
Si tu ne veux pas qu'on t'aide pourquoi poster ton problème dans un forum?
Si tu veux qu'on t'aide, pourquoi ne fais tu pas ce qu'on te demande?

La dernière fois qu'un jeune n'en faisait qu'à ça tête, on a tourné en rond pendant 3 jours et j'ai abandonné parce qu'il m'énervait et que j'aurai fini par l'envoyer chier (là on est pas loin).

Donc pour la dernière fois. Quel est le contenu de t, juste avant que ça plante?

Si tu réponds quoi que ce soit d'autre que la réponse très simple à cette question, je laisse tomber.


0
Valeur de t = 1607257274.2398117
Vous m'avez dit que c’était l’heure à laquelle mon jeu commence.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 13:30
Non ce n’est pas cette valeur juste avant que ca plante
0
Je n'ai aucune valeur appart celle-ci, mais elle change tout le temps.
Sinon, j'ai un message d'erreur mais pas de valeur.
Si j'écris t dans ma console j'ai : ' '
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 14:19
Est ce que tu joues au jeu quand tu fais tes tests?
Je pense que non, tu devrais
0
Je viens de refaire le test :
mon t = beau car pour t=input, le mot est beau. Dois-je changer la variable ?
0
D'accord, merci pour les conseils.
Je pense que le temps ne bouge pas car le score ne bouge pas lui-même.
Donc dès que le score = 1, le temps se met en marche.

Par ailleurs, si je change les noms des variables a chaque input, comment savoir si la réponse est égal à la variable de l'input. Car la réponse n'est pas la même a chaque mot.
0
Car le score n'évolue pas
Dès que le score passe à 1, le temps se met en marche ?
0
Il faut que j'utilise la méthode sleep()
-->
while 1:
    print(t)
    if time.time()-t < 30:
        time.sleep(30)
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 16:31
As tu essayé avant d'avancer une telle hypothèse?

Faire un test, avant de proposer un truc improbable évite de passer pour plus bête que tu ne l'es.

Programmer ça nécessite de
  • réfléchir (imaginer un algorithme)
  • essayer, et constater ce qui se passe
  • réfléchir (analyser les différences entre ce qu'on avait imaginé et ce qui se passe)



Supposons que tu ai mis 3 minutes à répondre à la première série de mots.
Que ce passe t il quand la boucle recommence?
0
La boucle recommence à partir de 3 minutes. Il faut remettre le compteur à 0.
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 18:00
Essayons autrement.

Voila un bout de code
a = int(input("saisir a"))
if(a < 11):
    print("a vaut 10 ou moins")
else:
    print("a vaut 11 ou plus")


Pour analyser, ce code il faut imaginer son exécution en fonction des valeurs d'entrée

Première simulation
  • le programme demande de saisir le nombre a, on répond 2
  • le texte "2" est converti en entier pour remplir la variable a
  • la valeur de a est inférieure à 11 donc
  • on affiche que a vaut moins de 11.

2eme simulation
Voila ce qui se passe:
  • le programme demande de saisir le nombre a, on répond 123
  • le texte "123" est converti en entier pour remplir la variable a
  • la valeur de a n'est pas inférieure à 11 donc
  • on affiche que a vaut plus de 10.


Reprenons ce bout de code, tu vas me faire la même chose en imaginant que tu mettes 20 secondes à saisir chaque réponse. Chaque réponse est correctement saisie

while 1:
    print("test de la durée")
    if time.time()-t < 30:
        score = 0
        
        rep=input("Mot(ainsi) : ")
        if rep == "ainsi":
            score+=1
        else : 
            score+=0
        print("durée de jeu ", time.time()-t)
    
        rep=input("Mot(fois) : ")
        if rep == "fois":
            score+=1
        else : 
            score+=0
        print("durée de jeu ", time.time()-t)
        
        rep=input("Mot(tout) : ")
        if rep == "tout":
            score+=1
        else : 
            score+=0
        print("durée de jeu ", time.time()-t)



0
Tant que 1:
On affiche "Test de la durée"
Si time.time() - t est inférieur à 30
variable score = 0

Le programme demande de saisir une chaîne de caractère rep, on répond "ainsi"
Le texte "ainsi" est converti en une chaîne de caractère pour remplir la variable rep
La valeur de rep est la même que "ainsi"
La variable score augmente de 1
Afficher "durée de jeu" puis time.time() qui est égal à 20.

Le programme demande de saisir une chaîne de caractère rep, on répond "fois"
Le texte "fois" est converti en une chaîne de caractère pour remplir la variable rep
La valeur de rep est la même que "fois"
La variable score augmente de 1 soit 2
Afficher "durée de jeu" puis time.time() qui est égal à 20.

Le programme demande de saisir une chaîne de caractère rep, on répond "tout"
Le texte "tout" est converti en une chaîne de caractère pour remplir la variable rep
La valeur de rep est la même que "tout"
La variable score augmente de 1 soit 3
Afficher "durée de jeu" puis time.time() qui est égal à 20.


Ce qui m'embête c'est le -t après le time.time()
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 18:27
Tant que 1:
On affiche "Test de la durée"
Si time.time() - t est inférieur à 30
variable score = 0

Le programme demande de saisir une chaîne de caractère rep, on répond "ainsi"
Le texte "ainsi" est converti en une chaîne de caractère pour remplir la variable rep
La valeur de rep est la même que "ainsi"
La variable score augmente de 1
Afficher "durée de jeu" puis time.time() qui est égal à 20. #non

Le programme demande de saisir une chaîne de caractère rep, on répond "fois"
Le texte "fois" est converti en une chaîne de caractère pour remplir la variable rep
La valeur de rep est la même que "fois"
La variable score augmente de 1 soit 2
Afficher "durée de jeu" puis time.time() qui est égal à 20. #encore non

Le programme demande de saisir une chaîne de caractère rep, on répond "tout"
Le texte "tout" est converti en une chaîne de caractère pour remplir la variable rep
La valeur de rep est la même que "tout"
La variable score augmente de 1 soit 3
Afficher "durée de jeu" puis time.time() qui est égal à 20 #toujours pas


Ce qui m'embête c'est le -t après le time.time()

c'est toi qui l'a mis à la ligne
    if time.time()-t < 30:

A moins que ce code ne soit pas de toi....
0
J'ai pris une idée d'un chronomètre, je n'ai pas encore vu les méthodes du module time, je ne suis qu'en Terminale
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
6 déc. 2020 à 19:03
Coder au hasard et/ou prendre des morceaux de code sur le net sans les comprendre ça ne marche pas.

Je t’ai dit que dans t, il y a l’heure du début.
Alors à ton avis, comment c’est arrivé?
Et que donne
time.time()-t
?

Si tu ne sais pas trop, lire la doc de time est une idée.
0
Je viens de lire une page sur ce module :
Il a été crée le 1er janver 1970 donc time.time() c'est le nombre de secondes écoulées depuis 1970.
D'après ce que vous m'avez dit, t c'est l'heure a laquelle mon jeu commence.
time.time() - t donne donc l'heure actuelle.
0
Rejoignez-nous