• ベストアンサー

初歩でめんどくさい質問

すみません。rubyを学習したての者です。 以下のコードで構文エラーがでます。3つです。 どこが悪いのかまったくわかりません。 ------------------------------------------------------ puts 'じゃんけんゲーム開始' sleep 1 #プレイヤーのじゃんけん入力 puts '何を出しますか?' puts '1グー' puts '2チョキ' puts '3パー' input_value = gets #じゃんけんロボの処理 robo = rand(3) + 1 case robo when 1 puts 'ロボはグーを出した!' when 2 puts 'ロボはチョキを出した!' when 3 puts 'ロボはパーを出した!' end #じゃんけん結果判定 player = input_value.to_i case player when 1 puts 'あなたはグーを出した' case robo when 1 #ロボがグーなら puts '引き分けです' when 2 #ロボがチョキなら puts 'あなたの勝ちです' when 3 #ロボがパーなら puts 'あなたの負けです' end when 2 puts 'あなたはチョキを出した' case robo when 1 puts '引き分けです' when 2 puts 'あなたの勝ちです' when 3 puts 'あなたの負けです' end when 3 puts 'あなたはパーを出した' case robo when 1 puts 'あなたの勝ちです' when 2 puts 'あなたの負けです' when 3 puts '引き分けです' end   else #どの条件も成立しなかったとき puts 'あなたは何も出さなかった' puts 'あなたの負けです' end --------------------------------------------------- めんどくさいと思いますが、さらっと見て分かる方教えてください。

  • Ruby
  • 回答数3
  • ありがとう数81

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4849/10263)
回答No.3

#2の方が書かれたとおり全角空白が原因でしょうね。 Rubyは全角文字も変数名等に使えるので、人間の手として3を入力した場合、「未定義の変数かメソッドの 全角空白 が現れた」というエラーになります。Rubyの処理系は、未定義の変数は実行時のエラーになるので、3を入れない限りエラーにならないというのが#1の方の実行結果だと思います。 NetBeansのような統合開発環境を使うと、実行前に未定義変数を検出する機能があります。

Armadillo5
質問者

お礼

全角空白が原因でした。 ありがとうございます!

その他の回答 (2)

  • siffon9
  • ベストアンサー率64% (136/211)
回答No.2

NetBeansではエラーが3つ出ました。 「else #どの条件も成立しなかったとき」 の前の空白行に全角のスペースが入っていませんか?

Armadillo5
質問者

お礼

お返事遅くなりました。 そのとおりでした!ありがとうございます!

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

どのようなエラーがでましたか? こちらで実行したときは、正常に動作しましたよ。 どの環境(OS)で、どのように実行しましたか? 実行したコマンド、操作内容等を補足して下さい。 こちらでは、windows-xp のコマンドプロンプトで、 ruby このスクリプト名 として実行しました。

関連するQ&A

  • 10回じゃんけんの確率計算

    モバゲーにて、10回じゃんけんを同時にして合計6勝以上したら、景品がもらえるという遊びがはやっています。 そこで6勝以上する確率の計算法もしくは、6勝以上する確立を教えていただけないでしょうか? 相手「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」 自分「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「パー」「グー」 このように10回じゃんけんを一度に出し、合計の勝利数で決まります。二人同時に手をだします。 この例だと、自分が6勝です。 あいこは、勝ちには入りませんので、負けと同じ扱いです。 説明不十分かと思いますので、対戦例を2点かきます。 相手「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」 自分「グー」「チョキ」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「パー」「グー」 ↑これは、自分が、5勝です。 相手「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」 自分「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」 ↑これは自分が10勝です。 じゃんけんの手は、二人とも、同時に10手だします。6連勝じゃなく、負けても、何度目で勝ってもいいので、6回以上かてた時の確率を知りたいです。

  • pの出す手の確率→グー:チョキ:パー=1/2:1/

    pの出す手の確率→グー:チョキ:パー=1/2:1/4:1/3qの出す手の確率→グー:チョキ:パー=1/4:1/3:1/4 (1)2回じゃんけんしてqがグーで勝つ確率 (2)4回じゃんけんしてpがパーかチョキで勝つ確率 教えてくださいm(_ _)m

  • C言語について

    C言語のじゃんけんゲームを作成したいのですが、 仕様は 1.利用者とコンピュータによる対戦形式とします。 2.利用者がキーボードから入力した手(グー・チョキ・パー)と、擬似乱数を用いて生成したコンピュータの手を比較し、利用者の勝ち・あいこ・負けの結果を表示しなさい。 3.利用者の入力が不正の場合には再度入力を促すなど、適切な処理をしなさい。 4.これまでの累積勝利数・引き分け数・敗北数をそれぞれ、user_win・user_draw・user_loseの3つの変数(int型)に格納しなさい。 5.連勝中の場合は「5連勝中!」などと表示させるようにしなさい。 6.あいこである限りは自動的にじゃんけんを反復しなさい。 7.勝敗がついた場合、利用者にまだ継続するか質問した上で、じゃんけんを反復させなさい。 8.じゃんけんを終了した場合、これまでの通算成績として、累積勝利数・引き分け数・敗北数のほか、勝利=累積勝利数÷(累積勝利数+累積敗北数)×100、および、最大勝利数を計算して表示しなさい。 という仕様のじゃんけんゲームを作成したいのですが、下記に書いているまでしかできません。誰か教えていただけないでしょうか。分からなくて困っています。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int a,c; srand(time(NULL)); c = rand()%3+1; printf("手を入力してください [1:グー 2:チョキ 3:パー] "); scanf("%d",&a); if(a==1 && c==1) printf("あなたはグーで、私もグーでした。アイコです。\n"); else if(a==1 && c==2) printf("あなたはグーで、私はチョキでした。あなたの勝ちです。\n"); else if(a==1 && c==3) printf("あなたはグーで、私はパーでした。あなたの負けです。\n"); else if(a==2 && c==1) printf("あなたはチョキで、私はグーでした。あなたの負けです。\n"); else if(a==2 && c==2) printf("あなたはチョキで、私もチョキでした。アイコです。\n"); else if(a==2 && c==3) printf("あなたはチョキで、私はパーでした。あなたの勝ちです。\n"); else if(a==3 && c==1) printf("あなたはパーで、私はグーでした。あなたの勝ちです。\n"); else if(a==3 && c==2) printf("あなたはパーで、私はチョキでした。あなたの負けです。\n"); else if(a==3 && c==3) printf("あなたはパーで、私もパーでした。アイコです。\n"); else printf("正しい手を入れてください。\n"); return 0; }

  • 3人のじゃんけんのプログラム

    三人でじゃんけんをするプログラムを作るために 法則性を探しています。 グーを0,チョキを1,パーを2とした時に あいこであるパターンは 000,012,021,021,102,111,120,201,210,222 勝ちのパターンは 001,010,011,112,121,122,200,202,220 負けのパターンは 002,020,022,100,101,110,211,212,221 でした。(違っていたら申し訳ないです。) ここから法則を探そうと思うととりあえず、あいこの パターンは3つの数字を足すと0,3,6のどれかになり 3の倍数になっていることがわかりました。 ですが、勝ちと負けは法則性が見つけられません。 もしかすると、このやり方以外にも3人のじゃんけんの 結果を示すプログラムを導く方法はあるかもしないので もしご存知でしたらご教授お願いします。

  • じゃんけん

    4人でじゃんけんを1回行う時あいこになる確率を教えてください 4人ともグーパーチョキの同じものを出す3通り 2人が同じで残りの2人が異なる場合 例えば 2人がパーで後の2人がグーとチョキ 2人がチョキで後の2人がパー、グー 2人がグーで後の2人がパーとチョキ の3通り で合ってますか?

  • プログラミング(じゃんけんゲーム)

    C言語をしています。 そこでわからない所がありのですが、解説お願いします。 作りたいのは、乱数を使ったジャンケン5回戦で、 一番最後に、何勝何敗何引き分けかを表示させ、 2人のうちどちらが勝ったかです。 最後の何勝何敗何引き分けかを どう書いたらいいかがわかりません。 関数のひきわたしみたいな感じでするというのはわかります。 できたところまでのプログラムが、以下のようなコードです。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,c,i; printf("じゃんけんをしましょう。 (グー=1 チョキ=2 パー=3)\n"); for(i=i; i<=5; i++) { srand(time(NULL)); c = rand()%3+1; scanf("%d",&a); if(a==1 && c==1) printf("私もグー=1なので、あいこです。\n"); else if(a==1 && c==2) printf("私はチョキ=2なので、あなたの勝ちです。\n"); else if(a==1 && c==3) printf("私はパー=3なので、あなたの負けです。\n"); else if(a==2 && c==1) printf("私はグー=1なので、あなたの負けです。\n"); else if(a==2 && c==2) printf("私もチョキ=2なので、あいこです。\n"); else if(a==2 && c==3) printf("私はパー=3なので、あなたの勝ちです。\n"); else if(a==3 && c==1) printf("私はグー=1なので、あなたの勝ちです。\n"); else if(a==3 && c==2) printf("私はチョキ=2なので、あなたの負けです。\n"); else if(a==3 && c==3) printf("私もパー=3なので、あいこです。\n"); else printf("正しい手を入れてください。\n"); } return 0; }

  • チョコレートプラネットのじゃんけん

    キングオブコントでチョコレートプラネットがやっていた ”あっちむいてホイ”(アルチスムルケスポリス?)のネタで、 じゃんけんのことをなんてゆっていたか わかりますか? 全くわかりません。 それとグーとパーはなんていいますか? ●あっちむいてホイ→アルチスムルケスポリス(?) ●じゃんけん→? ●グー →? ●チョキ→チキリス(?) ●パー →? あいこ→アイコリオン(?)

  • 足指じゃんけんについて

    足指でするグー、チョキ、パー運動は、エコノミー症候群にも有効のようで、 機内ビデオにも紹介されています。 私はグーはできますが、チョキがあやしく、パーも他の人ほど開きません。 足指じゃんけんができるようになるにはどうしたらいいでしょうか。 出来なかったけれど、出来るようになった方のお話も伺いたいです。 宜しくお願いします。

  • ジャンケンゲームやった人はどう思う?

    近所の公園で子供がジャンケンで勝ったら規定歩数階段を上がる遊び(正式名称不明)をやっていたのだが、グーが「グリコ」、チョキが「チヨコ」、パーが「パイン」の全部3歩前進で驚愕した。 あれは勝ち手によって進める歩数が非対称だからゲームとして成立するのだと思うが、どうなの?これなら単なるジャンケンと変わらないからゲーム性ないよね? パーが「パイナップル」とかグーが「グリコ」とか勝ち点が違うからこそ、 (なるべくならパーで勝ちたい。でもそれを狙って相手はチョキで…。いや、逆にその裏で…) というゲーム性が生まれると思うんだけど? 子どものときこのゲームやった人はどう思う?

  • 確率の問題です!

    A君とB君はジャンケンを繰り返し行うものとする。1回あたりにグー、チョキ、パーをA君は1:2:3の割合で、B君は2:1:2の割合で、過去の勝敗とは独立に出す。このとき、次の問いに答えよ。 (1)1回のジャンケンでA君が勝つ確率を求めよ。 (2)6回ジャンケンを行ったとき、A君の勝ちが2回、B君の勝ちが2回、引き分けが2回である確率を求めよ。 (3)900回ジャンケンを行うとき、A君が勝つ回数の期待値を求めよ。 よろしくお願いします><