『10才からはじめるプログラミング図鑑』 という本がとても良い本だったので,
この本で学ぶ子供,親向けに,Python のコードを写経する.
詰んだ時などに参考にしてもらえたら嬉しい.
ちなみに,表紙の見た目からは,スクラッチとPythonの入門書に見えるが,
それ以外にも,
* 論理ゲート (pp.186-187)
* プロセッサとメモリ (pp.188-189)
* コンパイラとインタプリタ (p.191)
* インターネットのポート (p.195)
* スマートフォンのアプリの説明 (pp.206-207)
* JavaScript (pp.208-211)
* Raspberry Pi, Arduino (p.214)
等についてもわかりやすく書かれていて驚いた.10才のころに読みたかったし,この本から学ぶことができる子供達がとても羨ましい.もちろん,ステマではない.
では早速,写経する.
3 パイソンで遊ぼう
プロジェクト4 : ゆうれいゲーム
ゆうれいゲーム.py
# p.96 ゆうれいゲーム
# Ghost Game
from random import randint
print('ゆうれいゲーム')
feeling_brave = True
score = 0
while feeling_brave:
ghost_door = randint(1, 3)
print('ドアが3つある。')
print('そのうち1つのドアの向こうにゆうれいがいる。')
print('さあ、何番のドアを開ける?')
door = input('1、2、それとも3?')
door_num = int(door)
if door_num == ghost_door:
print('ゆうれいだ!')
feeling_brave = False
else:
print('ゆうれいはいなかった!')
print('となりの部屋に入れたよ。')
score = score + 1
print('逃げろ!')
print('ゲームオーバー! スコアは', score, 'です。')
分岐
# p.121 いくつかの処理のうち1つを選ぶ
a = int(input('a = '))
b = int(input('b = '))
op = input('たす/ひく/かける/わる:')
if op == 'たす':
c = a + b
elif op == 'ひく':
c = a - b
elif op == 'かける':
c = a * b
elif op == 'わる':
c = a / b
else:
c = 'エラー'
print('答え = ',c)
パイソンでのくり返し
# p.122 パイソンでのくり返し
from turtle import *
forward(100)
right(120)
forward(100)
right(120)
forward(100)
right(120)
for i in range(3):
forward(100)
right(120)
# p.123 入れ子構造 (ネスティング)のループ
n = 3
for a in range(1, n + 1):
for b in range(1, n + 1):
print(b, 'x', a, '=', b * a)
関数
# p.130 関数の作り方とよび出し方
def greeting():
print('こんにちは!')
greeting()
# p.131 関数にデータをわたす
def height(m, cm):
total = (100 * m) + cm
print(total, 'センチの高さだね')
height(1,45)
# p.131 関数からデータを返す
def num_input(prompt):
typed = input(prompt)
num = int(typed)
return num
a = num_input('a を入力して下さい')
b = num_input('b を入力して下さい')
print('a + b =', a + b)
プロジェクト5 : 自動作文マシン
# pp.132-133 自動作文マシン
# 文章を自動的に作る
name = ['タカシが', 'ニュートンが', 'パスカルが']
noun = ['ライオンを', '自転車を', '飛行機を']
verb = ['買う', '乗り回す', 'たたく']
from random import randint
def pick(words):
num_words = len(words)
num_picked = randint(0, num_words - 1)
word_picked = words[num_picked]
return word_picked
print(pick(name), pick(noun), pick(verb), end='。\n')
# 文章を作り続ける
while True:
print(pick(name), pick(noun), pick(verb), end='。\n')
input()
プロジェクト6 : 作図マシン
# p.140
from turtle import *
reset()
left(90)
forward(100)
right(45)
forward(70)
right(90)
forward(70)
right(45)
forward(100)
right(90)
forward(100)
関数「turtle_controller」
# p.142
from turtle import *
def turtle_controller(do, val):
do = do.upper()
if do == 'F':
forward(val)
elif do == 'B':
backward(val)
elif do == 'R':
right(val)
elif do == 'L':
left(val)
elif do == 'U':
penup()
elif do == 'D':
pendown()
elif do == 'N':
reset()
else:
print('不明な命令がありました')
turtle_controller('F' , 100)
turtle_controller('R' , 90)
turtle_controller('F' , 50)
関数「string_artist」を作る
# p.144
program = 'N-L90-F100-R45-F70-R90-F70-R45-F100-R90-F100'
cmd_list = program.split('-')
cmd_list
次のソースコードを142ページのソースコードの下に続けて書こう.
def string_artist(program):
cmd_list = program.split('-')
for command in cmd_list:
cmd_len = len(command)
if cmd_len == 0:
continue
cmd_type = command[0]
num = 0
if cmd_len > 1:
num_string = command[1:]
num = int(num_string)
print(command, ':', cmd_type, num)
turtle_controller(cmd_type, num)
# p.145
string_artist('N-L90-F100-R45-F70-R90-F70-R45-F100-R90-F100')
ユーザー用の入力画面を作る
142ページと144ページのソースコードに続けて入力してね.
# p.146
instructions = '''タートルへの指示を入力して下さい:
例 F100-R45-U-F100-L45-D-F100-R90-B50
N = 新しくかき始める
U/D = ペンを下げる / 上げる
F100 = 前方へ100歩進む
B50 = 後方へ50歩進む
R90 = 右へ90度回転する
L45 = 左へ45度回転する'''
screen = getscreen()
while True:
t_program = screen.textinput('作図マシン', instructions)
print(t_program)
if t_program == None or t_program.upper() == 'END':
break
string_artist(t_program)
# p.147
N-L90-F100-R45-F70-R90-F70-R45-F100-R90-F100-
B10-U-R90-F10-D-F30-R90-F30-R90-F30-R90-F3
ちなみに,プロジェクト6 : 作図マシン のコードを続けて書くと
# p.142 関数「turtle_controller」
from turtle import *
def turtle_controller(do, val):
do = do.upper()
if do == 'F':
forward(val)
elif do == 'B':
backward(val)
elif do == 'R':
right(val)
elif do == 'L':
left(val)
elif do == 'U':
penup()
elif do == 'D':
pendown()
elif do == 'N':
reset()
else:
print('不明な命令がありました')
# p.144 関数「string_artist」を作る
def string_artist(program):
cmd_list = program.split('-')
for command in cmd_list:
cmd_len = len(command)
if cmd_len == 0:
continue
cmd_type = command[0]
num = 0
if cmd_len > 1:
num_string = command[1:]
num = int(num_string)
print(command, ':', cmd_type, num)
turtle_controller(cmd_type, num)
# p.146 ユーザー用の入力画面を作る
instructions = '''タートルへの指示を入力して下さい:
例 F100-R45-U-F100-L45-D-F100-R90-B50
N = 新しくかき始める
U/D = ペンを下げる / 上げる
F100 = 前方へ100歩進む
B50 = 後方へ50歩進む
R90 = 右へ90度回転する
L45 = 左へ45度回転する'''
screen = getscreen()
while True:
t_program = screen.textinput('作図マシン', instructions)
print(t_program)
if t_program == None or t_program.upper() == 'END':
break
string_artist(t_program)