上一篇我們在數字跟變數的叢林中繞阿繞的,可是我們似乎沒寫到任何一點程式阿!
別急~~~~
我們這就來點不一樣的!!
首先,我們需要定義一下剪刀、石頭跟布。我們先姑且用3個整數來代表他們好了。
paper = 1 # 這代表布
scissor = 2 # 這代表剪刀
stone = 3 # 這代表石頭
小提醒:程式當中的
#
是註解,寫在他後面的文字不會被當成程式,也就不會被執行
很好,我們現在有了這3個不同的東西,之後呢?
接下來我們要定義規則,照我們的規則應該是石頭要優於剪刀,剪刀要優於布,布要優於石頭。
對於定義邏輯判斷來說,我們會用if
來處理他,像是
if scissor > paper
println("scissor win!!")
end
大家先別急!我會慢慢說明,在上面這段程式的第一行if scissor > paper
中,Julia會去判斷if
後面的scissor > paper
運算是不是對的,如果是對的就會執行裡面的程式碼。
if <判斷式>
<程式碼>
end
裡面的程式碼就會叫電腦把"scissor win!!"字樣印在螢幕上。基本上scissor
的值是2
,而paper
的值是1
,所以兩相比較之下,這個判斷式是對的,所以你會看到以下結果
scissor win!!
我可以期待使用者輸入一個數字來代表他出的拳,姑且用x
代表好了,然後讓x
去跟其他拳比較大小。
這邊要讓使用者輸入數字來代表出拳,那就需要readline(STDIN)
的幫助囉~~
println("請輸入要出的拳,1代表布,2代表剪刀,3代表石頭:")
s = readline(STDIN)
x = parse(s)
這邊第一行先給使用者一點指示,接著會從終端機讀進使用者輸入的字,並且把他指定給s
。注意,這邊讀進來的訊息會以**字串 (string)**的方式表示,跟我們想的整數有很大的不同。接下來,我們要把讀進來的字串轉成整數,我們就把s
放到parse()
這個函式裡,他會幫我們解析字串裡的內容,並且把他轉成相對應的值給我們,所以這時候x
的值就會是整數了!
但是如果直接比較大小的話是會有問題的,因為stone
的值是3
,然而paper
的值是1
,照理說paper > stone
應該要是對的才對,但是值卻不是。
我們這邊換成去確認x
是誰好了!
if x == paper
println("你出布")
elseif x == scissor
println("你出剪刀")
elseif x == stone
println("你出石頭")
end
當中的elseif
是,當前一個判斷式是錯的時候,就會進到下一個判斷式中。
if <判斷式1>
<程式碼1>
elseif <判斷式2>
<程式碼2>
else
<程式碼3>
end
當<判斷式1>
是對的就會執行<程式碼1>
,如果是錯的就會判斷<判斷式2>
是不是對的,是對的就會執行<程式碼2>
,如果不是就會進到else
當中,他會直接執行<程式碼3>
。
相對的是,如果<判斷式1>
是對,<程式碼1>
就被執行,<程式碼2>
跟<程式碼3>
就會被忽略不執行囉~
所以我們的程式碼他會進一步判斷你出的拳是什麼囉~~
我們希望電腦可以出拳,但是電腦要如何決定出什麼拳呢?
當然是隨機阿!
這時候就用用到Julia的亂數產生器了!
y = rand([1, 2, 3])
rand()
這個函式他會幫我們從你給他的數字當中隨機抽出一個給我們,所以我們把1, 2, 3
裝進盒子裡,放到函式的小括弧內,就變成了rand([1, 2, 3])
這個樣子。這時rand()
就會隨機指定一個值給y
囉~~~
現在我們假設使用者跟電腦都出了拳,那我們要怎麼決定到底誰贏誰輸呢?
if x == y
println("平手")
...
我們先決定兩個人出的拳是不是一樣的,如果一樣那就是平手。
...
elseif x == paper
println("你出布")
if y == scissor
println("電腦出剪刀")
println("電腦贏了")
elseif y == stone
println("電腦出石頭")
println("你贏了")
end
...
這邊選擇再把一段判斷程式碼放到elseif
當中,也就是判斷x == paper
是對的之後,會進而判斷裡面的y == scissor
跟y == stone
,當滿足任一個判斷式的時候就會自動顯示裡面的字樣囉~~
所以照這個方法寫出來完整的程式如下
if x == y
println("平手")
elseif x == paper
println("你出布")
if y == scissor
println("電腦出剪刀")
println("電腦贏了")
elseif y == stone
println("電腦出石頭")
println("你贏了")
end
elseif x == scissor
println("你出剪刀")
if y == paper
println("電腦出布")
println("你贏了")
elseif y == stone
println("電腦出石頭")
println("電腦贏了")
end
elseif x == stone
println("你出石頭")
if y == scissor
println("電腦出剪刀")
println("你贏了")
elseif y == paper
println("電腦出布")
println("電腦贏了")
end
end
當我想要一直跟電腦玩猜拳,那就需要用到迴圈的概念了。
這邊先介紹while
,他的邏輯是這樣的
while <判斷式>
<程式碼>
end
當while
後面的判斷式成立的話,他就會不斷執行裡面的程式碼片斷,當執行完一次之後,又會回頭檢查一次判斷式是否成立,直到判斷式不成立就會停止。這時候我們就要小心,要設定判斷式會不成立的狀況。
s = readline(STDIN)
x = parse(s)
while x != -1
...
s = readline(STDIN)
x = parse(s)
end
我們可以設定當使用者輸入-1
的時候就跳出迴圈,也就當使用者不想玩的時候就可以輸入-1
把程式停掉。迴圈的尾巴會再次的更新x
,那就是下一次的輸入了,如此一來,程式就會回到前面去檢查x
了。