『10才からはじめるプログラミング図鑑』のコード

  • 2
    Like
  • 0
    Comment

『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)