Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/04/2008, à 10:25

fred2k8

problèmes avec ruby

bonjour,

j'apprends ruby avec l'excellent tutoriel dispo ici :

http://www.ruby-doc.org/docs/beginner-fr/xhtml/

j'arrive à faire tous les exemples et j'ai fini le tutoriel. J'aimerais donc commencer à créer mes propres programmes. Donc j'ai voulu faire un programme de vérification de nom. On entre son nom, puis la machine dit si c'est le bon ou pas. J'ai fait une erreur dans le code mais je ne la vois pas... pouvez vous m'éclairer ?

#!/usr/bin/ruby

puts "bonjour. entrer nom s.v.p"
nom = gets

#boucle n.1

if nom == "sefyu"
 nom == true
elseif
 nom == false
else
 nom == false
end

#boucle n.2

if nom = false
 puts "vous netes pas sefyu."
else nom = true
 puts "vous etes sefyu."
end

Ruby ne donne pas d'erreur mais simplement, quel que soit le nom que je rentre, j'obtiens toujours "vous etes sefyu."

quelqu'un aurait il aussi un lien vers un tutoriel plus developpé pour que j'apprenes comment gérer des  i/o sur des fichiers sur le disque ?

merci,

fred2k8

#2 Le 17/04/2008, à 12:03

eitri

Re : problèmes avec ruby

Salut,
dans ton script tu confonds l'assignation de valeur via "=" et le test de condition qui est "=="

if  truc == valeur 
      instruction
end

regarde ici

if nom == "sefyu"
 nom == true
elseif

et là

if nom = false
 puts "vous netes pas sefyu."
else nom = true
 puts "vous etes sefyu."
end

sinon ton traitement des conditions
est pas très clair:

if nom == "sefyu"
 nom == true
elseif
 nom == false
else
 nom == false
end

essaye de simplifier

soit le nom est le bon
nom= true
sinon
nom=false

simplifies ton script.

Hors ligne

#3 Le 17/04/2008, à 12:36

eitri

Re : problèmes avec ruby

Un petit truc que j'ai oublié:

la valeur que tu récupères dans nom via gets, se terminera par "\n".
Pour obtenir la valeur désirée sans "\n", il faut que tu appliques la méthode chomp
à la variable nom. Si tu ne fais pas cela tes tests seront faussés.

Hors ligne

#4 Le 17/04/2008, à 12:53

fred2k8

Re : problèmes avec ruby

Salut,

merci pour ta réponse. J'ai tenté d'améliorer et de simplifier mon code mais cela ne fonctionne toujours pas :-/ :

#!/usr/bin/ruby

puts "bonjour. entrer nom s.v.p"
nom = gets

#boucle n.1

if nom == "sefyu"
 puts " SEFYU ! "
elseif nom != "sefyu"
 puts "NO SEFYU !"
end

pourrais tu me donner la solution s.t.p ?

Sinon, j'ai un autre problème. J'ai réussi à programmer un jeu du chiffre :
l'ordinateur choisit un chiffre au hasard entre 0 et 10 et on doit le deviner. Malheureusemeni, on  a qu'une seule chance mais il fonctionne...

puts "devinez le chiffre entre 1 et 3"
chiffre = gets.to_i
alea = rand(1-3)

if chiffre == alea
 puts "trouvé !"
elsif chiffre != alea
 puts "faux !"
end

J'ai essayé de programmer une version améliorée qui dit "plus".. "moins" selon le chiffre. seulement, cela ne fonctionne pas.

(idée du logiciel : l'ordinateur prend un chiffre au hasard- l'utilisateur en écrit un - si c'est le bon : bravo ; si c'est moins :  moins si c'est plus : plus'

quelqun pourrait il me donner le code pour que je comprenne ?

merci a+

#5 Le 17/04/2008, à 13:23

eitri

Re : problèmes avec ruby

T'y étais presque:

deux petits trucs sur ton code:

if nom == "sefyu"
 puts " SEFYU ! "
elseif nom != "sefyu"
 puts "NO SEFYU !"
end

tu n'as pas besoin d'utiliser elseif ici puisque soit le nom est bon soit il ne l'est pas.

Voici une solution:

#!/usr/bin/ruby

puts "bonjour. entrer nom s.v.p"
nom = gets

if nom.chomp == "sefyu"
   puts "vous êtes sefyu"
else
   puts "vous n'êtes pas sefyu"
end

sinon il y a le truc avec gets il faut que tu traites toujours la chaîne retournée par gets avec chomp (sauf si tu sait ce que tu fais).
regarde:

#!/usr/bin/ruby

puts "bonjour. entrer nom s.v.p"
nom = gets

if nom == "sefyu"
   puts "vous êtes sefyu"
else
   puts "vous n'êtes pas sefyu"
end

Si tu tapes sefyu, le script te diras "vous n'êtes pas sefyu"
avec ce code la ça fonctionnera:

#!/usr/bin/ruby

puts "bonjour. entrer nom s.v.p"
nom = gets

if nom == "sefyu\n"
   puts "vous êtes sefyu"
else
   puts "vous n'êtes pas sefyu"
end

Soit tu utilises chomp sur la chaîne retournée par gets soit tu ajoutes "\n" à la valeur qui sera comparée à la chaîne retournée par gets.

Sinon pour l'autre question :

#!/usr/bin/ruby

puts "devinez le chiffre entre 1 et 10"
  alea = rand(1-10)

while (1)
  chiffre = gets.to_i

  if chiffre == alea
    puts "trouvé !"
    exit

  else if chiffre < alea
        puts "plus !"
     else
       puts "moins!"
     end
  end
end

Hors ligne

#6 Le 17/04/2008, à 13:35

fred2k8

Re : problèmes avec ruby

merci de ta réponse. il yu a juste un truc que je ne comprends pas. pour le troisième jeu pourquoi il y a 3 'end' ? un seul ne suffit pas ?
a+

Hors ligne

#7 Le 17/04/2008, à 13:41

eitri

Re : problèmes avec ruby

Non regarde bien le code, il ya une boucle while et deux conditions .

#!/usr/bin/ruby

puts "devinez le chiffre entre 1 et 10"
  alea = rand(1-10)

while (1)
  chiffre = gets.to_i

  if chiffre == alea //première condition
    puts "trouvé !"
    exit

  else if chiffre < alea //deuxième condition
        puts "plus !"
     else
       puts "moins!"
     end //fin de la deuxième condition
  end //fin de la première condition
end //fin de while

Hors ligne

#8 Le 17/04/2008, à 14:10

fred2k8

Re : problèmes avec ruby

ok, merci, j'ai compris. maintenant j'aimerais passer à la vitesse supérieure et créer un programme "INTERACTIF" pour faire un jeu style space invader. jusque là qund j'utilise gets je dois appuyer sur "ENTER". Comment puis je faire pour simplement une touche?

Hors ligne

#9 Le 17/04/2008, à 15:14

eitri

Re : problèmes avec ruby

Ta question était intéressante.
Après quelques recherches, il semblerait que ce n'est pas possible avec ruby ou peut-être avec le gem la termios :
http://raa.ruby-lang.org/project/ruby-termios/

De plus il faut aussi que tu envisages d'utiliser des threads. Au moins deux, un pour détecter les évènements issus du clavier et un autre qui contient les routines d'actions en fonction de ces évènements.
Un lien pour les threads sous ruby:
http://www.624opa.pascal.hostingrails.c … -sous-ruby

Mais bon le mieux se serait de faire ça en C ou C++ via curses regarde cette page:
http://www.presence-pc.com/forum/ppc/Pr … 1318-1.htm

Hors ligne

#10 Le 19/04/2008, à 13:48

fred2008

Re : problèmes avec ruby

Bonjour,
Merci de ta réponse.
J'ai en fait commencé par vouloir apprendre le C, mais je n'ai pas trouvé de tutoriel très simple. Je trouve aussi que dans ce langage, il faut écrire beaucoup pour arriver à pas grand chose. Ruby a en fait été le langage de programmation avec lequel j'ai tout de suite réussi à faire des petits programmes amusants. Mon projet actuel est de faire un jeu d'aventure avec des descriptions. Seulement, j'ai l'impression que la façon dont je code (sur un autre forum, on m'a dit que mon code ressemblait à du BASIC) n'est pas très indiquée. Quelqun aurait il un lien vers un tutoriel expliquant bien ? J'aimerais aussi réaliser des interfaces graphiques.
A bientôt