では早速じゃんけんプログラムを変更します。

STDOUT.sync = true

goo = 1
par = 2
choki = 3

hand = ["グー","パー","チョキ"]

print("[1:グー、2:パー、3:チョキ]","\n")
print("[1,2,3]の数字を入力","\n")

human_hand = gets.to_i
computer_hand = rand(3)+1
p(human_hand) #追加

print("あなたの手",hand[human_hand-1],"\n")
print("コンピュータの手",hand[computer_hand-1],"\n")

「p(human_hand)」を追加して、入力された値をチェックしてみます。
まず「5」を入力してみます。この時の実行結果。

[1:グー、2:パー、3:チョキ]
[1,2,3]の数字を入力
5 #この値はRDEが表示しています。
5 #p(human_hand)で表示された値。
あなたの手nil #
コンピュータの手パー #ここはランダムです。
Complete(0)

キーボードから入力された値は配列handの値を指定する数字です。今回5を入力したので配列に値が存在しない、
番号を指定したことになります。リファレンスの配列についてはここを参照。
リファレンスによると、「nth 番目の要素が存在しない時には nil を返します。」とあります。今回5を入力したので、
この説明通りnilが表示されました。
もう一つ「nth の値が負の時には末尾からのインデックスと見倣します(末尾 の要素が -1 番目)。」
ともあります。
次に「あ」の文字を入力してみます。
実行結果

[1:グー、2:パー、3:チョキ]
[1,2,3]の数字を入力
あ #RDEが表示しています。
0 #p(human_hand)による表示。
あなたの手チョキ
コンピュータの手グー
Complete(0)

リファレンスの「to_i」はここ
リファレンスによると「整数とみなせない文字があればそこまでを変換対象とします。変換対象が 空文字列であれば 0 を返します。」
とあります。これが、今回「あ」の文字を入力して0が表示された理由ですね。
もうひとつ「あなたの手チョキ」と表示されてます。これは先ほどの説明した
「nth の値が負の時には末尾からのインデックスと見倣します(末尾 の要素が -1 番目)。」のためです。
「print(“あなたの手”,hand[human_hand-1],”\n”)」でhand[0-1]をしているために、配列の指定番号に、
「-1」を使用していることになります。「-1」が指定するのは配列の末尾の「チョキ」になります。ちなみに、負の値で
配列の先頭を指定すると「-3」、「グー」の値を取得できます。
最後に「case文」を使用して「1,2,3」以外の値を入力した場合の処理を追加します。

STDOUT.sync = true

goo = 1
par = 2
choki = 3

hand = ["グー","パー","チョキ"]

print("[1:グー、2:パー、3:チョキ]","\n")
print("[1,2,3]の数字を入力","\n")

human_hand = gets.to_i
computer_hand = rand(3)+1


case human_hand#追加

  when 1,2,3 then#追加
     print("あなたの手",hand[human_hand-1],"\n")
     print("コンピュータの手",hand[computer_hand-1],"\n")

     a = computer_hand - human_hand

     case a
    
       when -1,2 then
          print("あなたの勝ちです","\n")
       when -2,1 then
          print("あなたな負けです","\n")
       else
          print("引き分けです","\n")
     end

  else#追加
     print("あなたの入力は無効です")
end #追加
2020年4月
« 4月    
 1234
567891011
12131415161718
19202122232425
2627282930  

カテゴリー

広告

現在の住まい、将来はVPSへ引越します。 ロリポップの上位版です。

広告

広告

最近のコメント

    広告

    Railsを動かす予定のVPS。無料キャンペーン中。

    広告