- パチセブントップ
- コミュニティ
- パチ7自由帳トップ|ブログコミュニティ
- コラム(ブログ)詳細
【暇潰】超適当な解説でPerlを学ぼう #01
【暇潰】超適当な解説でPerlを学ぼう #01
-
ebotanさん
- 投稿日:2019/11/01 19:19
ebotanです。
暇なので超適当なPerl講座を始めます。3連休の空き時間にスキルアップができるかもしれません。
このコラムには
- 高校/大学の講義でプログラミング言語を触ったことがあるけどちゃんと書いたことがない人か暇な人向け
- 俺が教えたい事を教えたらノーマル機のシミュレーターみたいなものが作れるかもしれない
という、とても狭いターゲットと曖昧な目標が設定されています。
ちなみにPerl本来の使い方はほとんどないの※で遊び感覚で宜しくお願いします。
※文字列処理とかここでは使わない
ではさっそく始めていきましょう。
※タイトルにもありますが、「教える気あるのか?」って思うくらい適当です。
↓ここからコピー
use strict ;
my $RANSU ;
$RANSU = int(rand(10));
if($RANSU == 7){
print "Fever!!! \n";
}else{
print "Lose...\n";
}
↑ここまでコピー
下記サイトにアクセスし、黒背景の場所に↑のコードをコピペしてください。
https://paiza.io/ja/projects/new?language=perl
「実行(Ctrl+Enter)」とあるボタンをクリックするか、Ctrl+Enterで実行してみてください。
ヒキがいい人は Fever!!! と出力されます。
.
.
.
.
察しの良い人はおわかりかと思いますが、これは0~9までの乱数を生成し、その乱数値が7だったら"Fever!!!" それ以外だったら"Lose..."と表示するだけのプログラムです。
さっそく適当に説明していきます。
◆ use strict ;
おまじないです。必ず書いておきましょう。
◆ my $RANSU ;
この後に使う変数をお行儀よく予め宣言しています。
お行儀を悪くするなら、
-------------------------------
my $RANSU = int(rand(10));
-------------------------------
と宣言と代入を同時に行って行数を減らせます。
◆$RANSU = int(rand(10));
int関数とrand関数でランダムな整数値を生成しています。
rand(最大値);
“最大値"を含まない乱数を生成します。生成される値には小数も含まれています。
int(数値);
"数値"を整数に変換します。小数点以下は切り捨てです。
ちなみに お行儀よく書くと↓のような書き方になります。意味は同じです。
-------------------------------
my $RANSU_1 ;
$RANSU_1 = rand(10) ;
$RANSU = int($RANSU_1);
-------------------------------
◆ if($RANSU == 7){
print "Fever!!! \n";
}else{
print "Lose...\n";
}
if文です。和訳すると↓のような意味になります。
- もし$RANSUの値が7だったら
- "Fever!!!"と表示して改行をしなさい
- そうでなければ
- "Lose..."と表示して改行をしなさい
"改行しなさい" は コードでいうところの"\n"(バックスラッシュもしくは\マークとn)にあたります。
これを「改行コード」と言います。書かないと改行してくれません。
さて、注意したいのはif()の中にある"=="というイコール2連です。
"右と左の値が同じ"という意味になります。1個じゃダメなんです。
条件式に使用するこういった記号を「比較演算子」といいます。ググるときに使ってください。
ちなみに当たりとなる数字を増やしたい場合は↓のように書きます。
-----------------------------
if($RANSU == 7 || $RANSU == 6){
print "Fever!!! \n";
}else{
print "Lose...\n";
}
-----------------------------
これで7と6が当たりの数字となります。
"||"と縦棒が2連してるところがありますね。
これは"もしくは"という意味で、"&&" とすると "なおかつ" という意味になります。
この "もしくは" や "なおかつ" を表す記号を「論理演算子」と言います。ググるとk(ry
さ、適当に説明もしたので課題をやってみましょう。
さっき実行したプログラムを修正していきましょう。
まずは「Lose...って結局何を引いたん?」というところを修正します。
10行目の" print "Lose...\n";"を修正して下記のような出力となるようにしてください。
---
Lose...->5
---
Task1のプログラムを修正して下記のような出力になるようにfor文を使って10回ループするようにして下さい。
---
Lose...->4
Lose...->5
Lose...->1
Fever!!!
Lose...->4
Lose...->4
Lose...->5
Lose...->6
Lose...->1
Lose...->2
---
Task2のプログラムを修正して$RANSUの値で0~4をREG、5~9をBIGと判定するようにしてください。
if文のところで説明した「比較演算子」と「論理演算子」を使います。
printの出力内容はBIGかREGかわかれば何でも良いです。
↓は例です。
----
BIG -> 5
REG -> 0
REG -> 2
REG -> 1
REG -> 1
REG -> 3
REG -> 4
BIG -> 6
BIG -> 9
BIG -> 8
----
BIGとREGそれぞれを数える変数を宣言し、当選回数をカウントしましょう。
ちなみに変数の値を1増やす事(演算)を「インクリメント」と言い、その逆はデクリメントと言います。
↓は例です。
----
BIG -> 5
REG -> 0
REG -> 2
REG -> 1
REG -> 1
REG -> 3
REG -> 4
BIG -> 6
BIG -> 9
BIG -> 8
BIG:4 REG:6
----
- 余談1
現状のコードではrand(10);としているので0~9までの数値しか生成されないので最大10個のフラグしか作れませんが、
例えばrand(65536);とすれば65536個のフラグが作れますよね。
- 余談2
本職はハードウェア開発なので普段はVerilogとかVHDLというハードウェア専用言語を書いてます。
年1くらいでC言語も扱いますが、基本的にはFWを作るだけなので、よくあるソフトウェア的なものは何も作れません。
以上です。
ここまででPerlというプログラミング言語で関数とif文とループ文を使ったプログラミングができるようになったかもしれません。
次回は
① 当たるまでループさせよう
② 当選ゲームを記録しよう
③ 最大ハマりを取り出してみよう
の3本ぐらいを予定しています。
配列とwhileを扱うだけなので予習してもいいんですよ。
8
ebotanさんの
共有する