この記事を読むことによって、
・標準入力
・IFによる分岐
・Whileループ
・Forループ
・代入演算子-=
の理解が深まります。
また、C言語でのコードの後に、 Pythonのコードも追記致しました。
最後に参考書(C言語とPython)の紹介をさせて頂きます。
サイトマップはこちらから
C言語自作サンプル集へ
Python自作サンプル集へ
これからプログラミングを学ぶ方へ
基本情報技術者試験トップへ
自己紹介
新型コロナに便乗した詐欺師をやっつけるプログラムを作って行きます。
詐欺師の最初のHPは300です。
まずは、プレイヤーの勇者が詐欺師と戦う為に、武器を選ぶプログラムを書いて行きます。
勇者は武器を下記の2つの内から1つ選んで攻撃します。
1:「バズーカ砲」 2:「うんこ」
【バズーカ砲】の攻撃力は【20】で、【うんこ】の攻撃力は【40】です。
#include <stdio.h>
int main()
{
//武器の番号
int weapon_no;
//武器の名称
char *weapon;
//武器の破壊力
int attack;
//武器を選択するコード
printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
scanf("%d",&weapon_no);
if(weapon_no==1){
weapon="バズーカ砲";
attack=20;
}else{
weapon="うんこ";
attack=40;
}
printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。",weapon,attack);
}
ここでは勇者が武器に「2」の:【うんこ】を選んで、1回の戦闘で詐欺師に【40】のダメージを与えられるという設定で進めて行きます。
ループのコードです。
#include <stdio.h>
int main()
{
//武器の番号
int weapon_no;
//武器の名称
char *weapon;
//武器の破壊力
int attack;
//武器を選択するコード
printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
scanf("%d",&weapon_no);
if(weapon_no==1){
weapon="バズーカ砲";
attack=20;
}else{
weapon="うんこ";
attack=40;
}
printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。\n",weapon,attack);
//詐欺師の初期のHP
int SAGI_HP=300;
//whileループで詐欺師の残りHPが150以上の条件で攻撃を行う
while(SAGI_HP>=150){
printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",attack);
SAGI_HP-=attack; //ここで詐欺師のHPが減る演算子「-=」を使用
}
}
詐欺師の残りHPが180になって、ループ内で40のダメージを受けてHPが140になるとwhileループの条件を満たさなくなって、ループを抜けます。
そこで勇者はお腹が減ったので、もぐもぐタイムで食事を摂ります。
もぐもぐタイムで食べられるのは、「1:もしもバーガー」で勇者の攻撃力が【50】になり、「2:ばななっとうパン」で攻撃力が【75】になります。
コードはこの様に追記します。
#include <stdio.h>
int main()
{
//武器の番号
int weapon_no;
//武器の名称
char *weapon;
//武器の破壊力
int attack;
//武器を選択するコード
printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
scanf("%d",&weapon_no);
if(weapon_no==1){
weapon="バズーカ砲";
attack=20;
}else{
weapon="うんこ";
attack=40;
}
printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。\n",weapon,attack);
//詐欺師の初期のHP
int SAGI_HP=300;
//whileループで詐欺師の残りHPが150以上の条件で攻撃を行う
while(SAGI_HP>=150){
printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",attack);
SAGI_HP-=attack; //ここで詐欺師のHPが減る演算子「-=」を使用
}
printf("詐欺師は瀕死です!!でも、勇者も腹が減ったのでちょっと休む\n\n");
printf("何食べる??--->1:もしもバーガー 2:ばななっとうパン\n");
int food_no;//食べ物の番号
char *food;//食べ物
int powerup;//もぐもぐタイム後の勇者の攻撃力
scanf("%d",&food_no);
if(food_no==1){
food="もしもバーガー";
powerup=50;
}else{
food="ばななっとうパン";
powerup=75;
}
printf("勇者は【%s】を食べて、攻撃力が【%d】にUPした!!",food,powerup);
}
ここでは、勇者が「もしもバーガー」を選んで攻撃力が増したという設定で進めます。
勇者が休んでいた間、詐欺師も休んでいたので、HPが140から150に回復してしまいました。
では、戦闘再開です。今度はForループで詐欺師HPの初期値が150で、HPが0以上をループの条件にして、詐欺師をやっつけて世界に平和が戻るコードと実行結果を掲載します。
#include <stdio.h>
int main()
{
//武器の番号
int weapon_no;
//武器の名称
char *weapon;
//武器の破壊力
int attack;
//武器を選択するコード
printf("武器は何を使いますか?---> 1:バズーカ砲 2:うんこ\n");
scanf("%d",&weapon_no);
if(weapon_no==1){
weapon="バズーカ砲";
attack=20;
}else{
weapon="うんこ";
attack=40;
}
printf("勇者が選んだ武器は【%s】で、攻撃力は【%d】です。\n",weapon,attack);
//詐欺師の初期のHP
int SAGI_HP=300;
//whileループで詐欺師の残りHPが150以上の条件で攻撃を行う
while(SAGI_HP>=150){
printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",attack);
SAGI_HP-=attack; //ここで詐欺師のHPが減る演算子「-=」を使用
}
printf("詐欺師は瀕死です!!でも、勇者も腹が減ったのでちょっと休む\n\n");
printf("何食べる??--->1:もしもバーガー 2:ばななっとうパン\n");
int food_no;//食べ物の番号
char *food;//食べ物
int powerup;//もぐもぐタイム後の勇者の攻撃力
scanf("%d",&food_no);
if(food_no==1){
food="もしもバーガー";
powerup=50;
}else{
food="ばななっとうパン";
powerup=75;
}
printf("勇者は【%s】を食べて、攻撃力が【%d】にUPした!!\n\n",food,powerup);
for(SAGI_HP=150;SAGI_HP>0;SAGI_HP-=powerup){
printf("詐欺師の残りHP:【%d】\n",SAGI_HP);
printf("勇者は詐欺師に【%d】のダメージを与えた!!\n",powerup);
}
printf("\n詐欺師の残りHP:【%d】\n",SAGI_HP);
printf("勇者は詐欺師をやっつけた!!世界が平和になった!!");
}
勇者が「もしもバーガー」を食べたことにより、攻撃力が50にパワーアップします。
今度は瀕死の詐欺師に50ずつダメージを与えます。
そしてついに!勇者は詐欺師をやっつけて、世界を救いました。
<<Python>>
では、Pythonでも同様にコードを書いて行きます。
Pythonでは、ワクチンがwhileループでデルタ株をやっつけた後、Forループでオミクロンと戦うという設定です。
※ プログラミングの練習の為の例題であり、医学的根拠は全くございません ※
デルタ株が現れ、あなたのワクチン接種済みの回数を標準入力を使って入力するコードと結果です。
print('デルタ株が現れた!!')
delta_hp=300 #デルタ株のHP
#ワクチン接種回数の標準入力
print('ワクチン接種回数は? 1:1回目 2:2回目--->',end='')
num=int(input())
#1回目と2回目のパワー
if num==1:
msg='1回目接種済み'
elif num==2:
msg='2回目接種済み'
else:
print('[1]か[2]を入力して下さい。')
if num==1 or num==2:
print('あなたはワクチン【'+msg+'です。】')
「1」を入力した場合
「2」を入力した場合
「テキトーな数」を入力した場合
この様に分岐が出来ました。
ここからwhileループで「デルタ株」をやっつけます。
ワクチン1回目の攻撃力を50、2回目接種では攻撃力70でデルタ株と戦います。
whileループを使う点での注意点は、初期値(デルタ株のHP=300)を設定することと、無限ループにならないために、ループを抜ける様演算を行うことです。
今回は、whileループの条件がデルタ株のHPが0より大きかったらループを回すので、その条件を満たしている間はループを繰り返し、HPが0またはマイナスになったらループを抜けます。
しかし、デルタ株のHPの減算を行わなければ永遠にループを抜けられない無限ループになってしまいます。
これらを踏まえてコードを掲載します。
print('\nデルタ株が現れた!!')
delta_hp=300 #←デルタ株のHPの初期値を設定
#ワクチン接種回数の標準入力
print('ワクチン接種回数は? 1:1回目 2:2回目--->',end='')
num=int(input())
#1回目と2回目のパワー
if num==1:
attack=50
msg='1回目接種済み'
elif num==2:
attack=70
msg='2回目接種済み'
else:
print('[1]か[2]を入力して下さい。')
if num==1 or num==2:
print('あなたはワクチン【'+msg+'です。】\n')
while delta_hp>0:
print('現在のデルタ株のHP:'+str(delta_hp))
delta_hp-=attack #←ここで代入演算子を使って減算しているので無限ループを避けられる。
print('--------------------')
print('\n<<ループを抜けた>>')
print('現在のデルタ株のHP:【'+str(delta_hp)+'】')
print('デルタ株をやっつけた!!\n')
ワクチンの接種回数が1回の場合の実行結果
デルタ株のHPが50ずつ減って、ループの継続条件である「>0」を満たさなくなり、ループを抜けてデルタ株をやっつけました。
ワクチンの接種回数が2回の場合の実行結果
デルタ株のHPが70ずつ減って、ループの継続条件である「>0」を満たさなくなり、ループを抜けてデルタ株をやっつけました。
次にラスボス「オミクロン」が現れます。
今度はForループで戦います。
オミクロンのHPの初期値を1000とします。
ワクチン3回目を接種する場合は攻撃力200で、接種しない場合は攻撃力30でオミクロンと戦います。
コード及び、私は3回目も接種予定なので、打つと選択した実行結果を掲載します。
print('\nデルタ株が現れた!!')
delta_hp=300 #←デルタ株のHPの初期値を設定
#ワクチン接種回数の標準入力
print('ワクチン接種回数は? 1:1回目 2:2回目--->',end='')
num=int(input())
#1回目と2回目のパワー
if num==1:
attack=50
msg='1回目接種済み'
elif num==2:
attack=70
msg='2回目接種済み'
else:
print('[1]か[2]を入力して下さい。')
if num==1 or num==2:
print('あなたはワクチン【'+msg+'です。】\n')
#whileループでデルタ株と戦う
while delta_hp>0:
print('現在のデルタ株のHP:'+str(delta_hp))
delta_hp-=attack #←ここで代入演算子を使って減算しているので無限ループを避けられる。
print('--------------------')
print('\n<<ループを抜けた>>')
print('現在のデルタ株のHP:【'+str(delta_hp)+'】')
print('デルタ株をやっつけた!!\n')
#オミクロンとの戦いの幕開け。標準入力
print('\nオミクロンが現れた!!')
print('3回目接種は? 1:打つ予定 2:打たない--->',end='')
num2=int(input())
#3回目接種の分岐
if num2==1:
attack2=200
msg2='あなたは3回目接種予定です。'
elif num2==2:
attack2=30
msg2='あなたは3回目は打たない予定です。'
else:
print('[1]または[2]を入力して下さい。')
if num2==1 or num2==2:
print('【'+msg2+'】\n')
#Forループでオミクロンと戦う
for omicron_HP in range(1000,-100,-attack2):
print('現在のオミクロンHP:【'+str(omicron_HP)+'】')
print('--------------------')
if omicron_HP<0:
break
print('\n<<<ループを抜けた>>>')
print('現在のオミクロンHP:【'+str(omicron_HP)+'】')
print('オミクロンをやっつけた!!\n')
このプログラミングみたいにコロナ詐欺もデルタ株もオミクロンもやっつけられたらなぁ・・・。
新型コロナに便乗した詐欺師が各地で多発しています。
金銭や個人情報を盗み出したり、なんでそんな詐欺をするような人間がのうのうと生きているのかと思うと、非常に腹立たしいです。
また、デルタ株やオミクロンもです。
そこで、何かできないかと思い、C言語とPythonのループを使って詐欺師・オミクロンをやっつけることにしました。
警視庁のホームページです。
デルタ株についてと、オミクロンについてです。
■ C言語使用参考書 ■
C言語でコンピュータの仕組みを理解する実験プログラムを作りながら、目で見て納得出来る本です。実際に手を動かしながらC言語でのプログラミングを通してコンピュータの仕組みが学べました。
2進数や演算など、50個のそれぞれ独立した実験があり、どこから始めても良いので、興味のある実験から作って行けます。特に面白かったのは8章の実行時間に関する実験でした。
基本情報技術者試験の範囲のユークリッドの互除法・線形探索・二分探索・ループ・挿入法・連結リスト・二分木・再帰・ハッシュによる探索・クイックソートなどの基本のアルゴリズムをトレースしながら実際に作って学べます。C言語とJavaに対応しています。書籍ではJavaで多くが記載されていますが、C言語のコードはダウンロードサービスから入手して使いました。
私は電子書籍、Kindle版で購入したので、「検索」から「ダウンロード」とキーワードを入力して、C言語のコードを入手して勉強しました。
基本情報技術者試験のアルゴリズムで使う疑似言語はC言語に近いので、この本で紹介されているアルゴリズムを実際に作って自分の環境で動かして学びました。
そのお陰もあって、基本情報技術者試験の配点の上がったアルゴリズムは88%の正答率を取得し、事務職のプログラミング未経験ながら、FEに一発合格致しました。
ご興味のある方は、当ブログの基本情報技術者試験トップページも併せてご覧下さい。
■ Python使用参考書 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。
Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。
サイトマップはこちらから
C言語自作サンプル集へ
Python自作サンプル集へ
これからプログラミングを学ぶ方へ
基本情報技術者試験トップへ
自己紹介
(=^x^=)