Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 20-05-2018 09:48:40

cemoi
Adhérent(e)
Distrib. : Debian 9 stretch
Noyau : Linux 4.9.0-3-amd64
(G)UI : XFCE
Inscription : 21-10-2008

jeux du pendu en python

Hello,
j'ai cherché (un peu) un jeux du pendu dans les depots et je n'ai pas trouvé... étant joueur je me susi lancé à en faire un truc simple en python:

import random

wordList=['LOGIS','PIZZA','RONDE','ROUGE','TARTE']
word=random.choice(wordList)
guess='*****'

import turtle
turtle.pensize(5)
errors=0

def showStickman():
  if(errors==1):
    turtle.bk(100)
    turtle.fd(200)
  if(errors==2):
    turtle.bk(100)
    turtle.lt(90)
    turtle.fd(300)
  if(errors==3):
    turtle.rt(90)
    turtle.fd(150)
  if(errors==4):
    turtle.rt(90)
    tutle.fd(50)
  if(errors==5):
    turtle.dot(50)
  if(errors==6):
    turtle.fd(100)
    turtle.bk(75)
  if(errors==7):
    turtle.rt(45)
    turtle.fd(50)
    turtle.bk(50)
  if(errors==8):
    turtle.lt(90)
    turtle.fd(50)
    turtle.bk(50)
  if(errors==9):
    turtle.rt(45)
    turtle.fd(75)
    turtle.rt(45)
    turtle.fd(50)
    turtle.bk(50)
  if(errors==10):
    turtle.lt(90)
    turtle.fd(50)
   
while((guess!=word)and(errors<10)):
  print('Voici le mot à deviner ',guess)
  letter=input('Devine une lettre')
  hasLetter=False
  newguess=[]
 
  for n in range(5):
    if(letter==word[n]):
      newguess.append(letter)
      hasLetter=True
    else:
      newguess.append(guess[n])
   
  guess=".join(newguess)
 
  if(hasLetter==True):
    print('Essaie encore')
    errors=errors+1
    showStickman()
   
print('La réponse était ',word)



dans l'idle ça me dit: EOL while scaning string literal  et me ça me surligne en rouge la dernière parenthése de     guess=".join(newguess) qui se trouve tout en bas juste avant le if


Je ne comprend pas le sens du message...

Merci pour votre aide smile


Linux debDesk Linux 4.9.0-3-amd64
Linux debServHome Linux 4.9.0-3-amd64
Linux lotus Linux 4.9.0-3-amd64

Hors ligne

#2 20-05-2018 13:47:51

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : jeux du pendu en python

Blblbl

#!/bin/sh

mot=$(sort -R /usr/share/dict/french | head -n 1 | iconv -f UTF-8 -t ASCII//TRANSLIT)
coups_restants=5

tentatives="-_"
while [ "$(echo "$mot" | sed "s/[^$tentatives]/_/g")" != "$mot" ]
do
  clear
  if [ "$coups_restants" -lt 5 ]
  then
    printf ",=======Y==\n";
    printf "|| / "; [ $coups_restants -lt 4 ] && printf '   |'; printf "\n";
    printf "||/  "; [ $coups_restants -lt 3 ] && printf '   O'; printf "\n";
    printf "||   "; [ $coups_restants -lt 2 ] && printf '  /|\'; printf "\n";
    printf "||   "; [ $coups_restants -lt 1 ] && printf '  /|'; printf "\n";
    printf "||\n||\n||\n====\n"
  fi
  echo "Lettres essayées : ${tentatives#??}"
  echo "$mot" | sed "s/[^$tentatives]/_/g"
  if [ "$coups_restants" -gt 0 ]
  then
    read l
    l=$(echo ${l%${l#?}} | iconv -f UTF-8 -t ASCII//TRANSLIT | sed 's/[^a-z]/_/g')
    tentatives="$tentatives$l"
    echo $mot | grep -c "$l">/dev/null
    if [ $? -gt 0 ]
    then
      coups_restants=$(($coups_restants - 1))
    fi
  else
    break
  fi
done
if [ $mot = $(echo $mot | sed "s/[^$tentatives]/_/g") ]
then
  echo Gagné
else
  echo Perdu
fi
echo $mot



Et pour ton code, comme le montre la coloration syntaxique, après « guess= » tu as ouvert des doubles guillemets sans les fermer. Tu voulais peut-être dire '' au lieu de " ?

guess=''.join(newguess)


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 20-05-2018 14:40:38

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : jeux du pendu en python

mot=$(sort -R /usr/share/dict/french | head -n 1 | iconv -f UTF-8 -t ASCII//TRANSLIT)


Mer il et fou !

Equivalent :

mot=$(shuf /usr/share/dict/french -n 1)



Comparaison :

$ time sort -R /usr/share/dict/french | head -n 1
real    0m5.111s
user    0m10.148s
sys    0m0.008s

$ time shuf /usr/share/dict/french -n 1
real    0m0.030s
user    0m0.024s
sys    0m0.004s



Aherm. Gros détail.
J'ai tendance à imaginer l'ordi du futur à 10Mhz quand j'écris un programme, et j'imagine ton jeu du pendu prendre un jour à s'initialiser big_smile

Dernière modification par otyugh (20-05-2018 14:43:38)


datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

Hors ligne

#4 20-05-2018 18:17:13

cemoi
Adhérent(e)
Distrib. : Debian 9 stretch
Noyau : Linux 4.9.0-3-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Re : jeux du pendu en python

hello,

le code commenté:

import random #importe le module random

wordList=['LOGIS','PIZZA','RONDE','ROUGE','TARTE'] #liste de mots possible
word=random.choice(wordList) #crée une variable baptisée guess pour stoker le mot le temps de la partie
guess='*****'
## partie dédièe au dessin du pendu
import turtle #importe le module turtle
turtle.pensize(5)# definit la taille des traits
errors=0

def showStickman():
  if(errors==1):
    turtle.bk(100)
    turtle.fd(200)
  if(errors==2):
    turtle.bk(100)
    turtle.lt(90)
    turtle.fd(300)
  if(errors==3):
    turtle.rt(90)
    turtle.fd(150)
  if(errors==4):
    turtle.rt(90)
    tutle.fd(50)
  if(errors==5):
    turtle.dot(50)
  if(errors==6):
    turtle.fd(100)
    turtle.bk(75)
  if(errors==7):
    turtle.rt(45)
    turtle.fd(50)
    turtle.bk(50)
  if(errors==8):
    turtle.lt(90)
    turtle.fd(50)
    turtle.bk(50)
  if(errors==9):
    turtle.rt(45)
    turtle.fd(75)
    turtle.rt(45)
    turtle.fd(50)
    turtle.bk(50)
  if(errors==10):
    turtle.lt(90)
    turtle.fd(50)
   
while((guess!=word)and(errors<10)): #continue jusqu'à ce que toutes les lettres soient trouvées.
  print('Voici le mot à deviner ',guess) #Affiche les lettres trouvées au fur et à mesure.
  letter=input('Devine une lettre') #demande au joueur de proposer une lettre
  hasLetter=False #part du principe qu'elle n'est pas dans le mot
  newguess=[] #établit une liste pour afficher les lettres devinées
 
  for n in range(5): #recommence une boucle pour chaque nouvelle lettre
    if(letter==word[n]): #si la lettre proposée est bien dans le mot:
      newguess.append(letter) #l'ajoute à la liste des lettres devinées
      hasLetter=True #indique que la réponse est bonne
    else: #si elle n'est pas dans le mot:
      newguess.append(guess[n]) #ajoute un astérisque(*)
   
  guess=".join(newguess)" #assemble la liste de lettres comme une chaîne et les stocke dans la variable guess
 
  if(hasLetter==True): #si la lettre proposée est dans le mot:
                print('C est exact')# affiche C est exact
        else: #si elle n'est pas dans le mot:
                print('Essaie encore') #affiche essaie encore
    errors=errors+1
    showStickman()
   
print('La réponse était ',word) #si le mot a bien été deviné, interrompt la boucle et affiche la réponse était blabla
 



ça me retourne qu'il y a un probléme d'indentation... (espaces vs tabulations j'imagine) mais je n'ai mis que des tabulations pour faire l'indentation... je capte pas -_-"


Linux debDesk Linux 4.9.0-3-amd64
Linux debServHome Linux 4.9.0-3-amd64
Linux lotus Linux 4.9.0-3-amd64

Hors ligne

#5 20-05-2018 18:40:57

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : jeux du pendu en python

@otyugh: ah oui, je ne pense jamais à shuf ! Je l'utilise trop rarement smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#6 20-05-2018 19:08:35

Philou92
Adhérent(e)
Lieu : Hauts de Seine
Distrib. : Debian stretch 9.8
Noyau : Linux 4.9.0-8-amd64
(G)UI : Gnome 3.22
Inscription : 29-04-2015

Re : jeux du pendu en python

@cemoi, en python une tabulation c'est un gros mot. Il est recommandé d'utiliser des espaces à la place.
De même il est d'usage d'utiliser 4 espaces par indentation.
Cela assure que ton script sera lu de la même façon par n'importe quel éditeur et n'importe quel scriptomaniaque. smile

Chaque siècle fera son œuvre, aujourd’hui civique, demain humaine. Aujourd’hui la question du droit, demain la question du salaire. Salaire et droit, au fond c’est le même mot. L’homme ne vit pas pour n’être point payé ; Dieu en donnant la vie contracte une dette ; le droit, c’est le salaire inné ; le salaire, c’est le droit acquis.
             Quatrevingt-treize
             Victor Hugo.

Hors ligne

Pied de page des forums