では早速じゃんけんプログラムを変更します。
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 #追加
最近のコメント