Projet

Ayress - Modifié le 5 déc. 2020 à 18:39
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 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

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
6 déc. 2020 à 19:23
D'après ce que vous m'avez dit, t c'est l'heure a laquelle mon jeu commence.
oui mais pourquoi?

time.time() - t donne donc l'heure actuelle.
ben non, tu vois bien sur ma capture (et si tu essayes mon bout de code de ton coté) que le print ne donne pas un nombre à rallonge qui pourrait ressembler au nombre de seconde presque 51 ans....
0
C'est parce que t=time.time()
time.time()-t = 0 lorsque que j'exécute mon programme mais augmente à chaque secondes
C'est avec cette ligne que mon chrono commence.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
6 déc. 2020 à 19:55
Ce n’est pas littéralement un chronomètre qui serait un peu plus compliqué, mais ça calcule bien la durée d’exécution de ton jeu.

Maintenant reprends l’analyse de mon bout de code.
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() -t soit le temps qui s'est écoulé depuis que j'ai exécuté le programme

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() -t soit le temps qui s'est écoulé depuis que j'ai exécuté le programme

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() -t soit le temps qui s'est écoulé depuis que j'ai exécuté le programme

Mais ce que je ne comprends pas c'est pourquoi le programme ne s'arrête pas après 30 secondes.
Peut-être parce que si je prend plus de 30 secondes à taper le mot le programme s'arrête et qu'ensuite ça revient = 0
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
6 déc. 2020 à 20:22
Avant de se demander s'il s'arrête ou pas, il faudrait se demander quand est-ce qu'il affiche que le temps est écoulé
0
Il ne l'affiche pas
0
Il l'affiche lorsque tous les mots ont été tapés
Avec cette ligne :
else :
        print("Le temps est écoulé")
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
6 déc. 2020 à 20:29
Ha si, il finit par l’afficher...
0
Oui mais infiniment
0

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

Posez votre question
C'est parce que je print mon temps après que l'utilisateur tape son mot.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
6 déc. 2020 à 21:01
C’est pas toi qui print le temps, c’est le code que j’ai ajouté.
Je n’ai pas ajouté d’erreur, j’ai essayé de mettre en exergue un symptôme.
0
C'est parce que mon else est après tous les mots
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 déc. 2020 à 18:00
Effectivement dans
        a=input("Mot(ainsi) : ")
        if a == "ainsi":
            score+=1
        else : 
            score+=0

Et tous ses semblables
        else : 
            score+=0

Ne sert strictement à rien.
Et comme c’est répété pour chaque mot, ça fait beaucoup de lignes inutiles.

Par contre, si tu enlèves le print et son else de la boucle infinie, sera t il affiché?
0
Après avoir testé, si j'enlève le else ainsi que le print dans la boucle infini, après avoir tapé mon dernier mot, le score n'est pas affiché, rien n'est affiché

Merci
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 déc. 2020 à 20:30
Donc, on a une boucle infinie, qui une fois le temps passé, affiche à l'infini que le temps est passé.

Que peut on faire à ton avis?
0
On enlève la boucle while ?
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
9 déc. 2020 à 07:41
Si tu l’enlèves et que le joueur saisit tous les mots en moins de 30 s, il n’aura pas la possibilité de recommencer.
0
D'accord.
Est-ce que ce code est un bon début ?
import time

t=time.time() 
while time.time()-t < 30:
    score = 0
    rep=input("Mot(ainsi) : ")
    if rep == "ainsi":
        score+=1
...
...

Dans ce cas-là, je n'ai pas besoin du else donc je peux print en dehors de la boucle while.
Tant que time.time()-t > 30
0
Bonjour,
Je n'ai plus de nouvelle ou alors je ne vois pas votre message

Bonne soirée
Nathan
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
10 déc. 2020 à 20:15
Clique sur la flèche à coté du numéro de message

0
Je n'ai pas la flèche
0
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
13 déc. 2020 à 17:35
Bonjour,
Ligne 3
t=time.time()

La variable résultante t est de type Float

Ligne 102
 t=input("Mot(beau) : ")

La variable t est écrasée et passe en type STR

Ligne 5
 if time.time()-t < 30:

Ca plante parce que la variable t n'est pas de type Float, il faut modifier le nom de la variable à la ligne 102
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
13 déc. 2020 à 17:43
Bonjour

y'a a peu près 60 messages qu'on a résolu ça, depuis on règles les autres problèmes
0
Rejoignez-nous