パイソンで遊ぼう

パイソンはいろいろな目的に使える言語です。ワープロからウェブブラウザまで、はば広いソフトウェアを作るのでにパイソンが使えます。

1、習いやすく使いやすい。

パイソンは簡単なプログラミング言語です。他のプログラミング言語より簡単で読みやすく、書きやすいです。

2、すぐに使えるプログラムがあるすぐに利用できます。

パイソンのライブラリーには、すでに完成しているライブラリーが入っていて、すぐ利用できます。

3、大きな会社で使える

実際に仕事でも使われているます。GoogleやNASA、ピクサーといった大きな企業でも使われています。

スクラッチとパイソン

命令の仕方を少し比べてみよう

・スクラッチ

旗が押されたとき

やあ!という

・パイソン

print(“やあ!”)

線を引く命令

・スクラッチ

ペンを下ろす

24回繰り返す

 10歩動かす

 15度回す

ペンを上げる

・パイソン

from turtle import

pendown()

for n in range(24):

   foreword(10)

   right(15)

penup()

パイソンのインストール

パイソンを使えるようにするためには、ソフトウェアをダウンロードしてコンピュータにインストールしなくてはならないです。パイソンのバージョン3は無料で使えます。

パイソン3をインストールすると、IDLE:統合開発環境というプログラムも使えるようになります。IDLEは初心者向けに作られていて、パイソンのコードを書くことができます。

インストール手順

※MACの場合、パイソンをインストールする前にOSのバージョンを調べてください。りんごのアイコンをタップして、「このMacについて」を選んで調べます。

1、次のURL をブラウザに入力して、パソコンのウェブサイトを開きます。

2、パイソンのダウンロード

Windows用の最新のパイソンをクリックします。バージョン番号が3(3.X.X)で始まるのがパイソン3です。

Download the latest version for Windows Python 3.8.0

3、インストール

インストーラーのダウンロードが終わったら、アイコンをダブルクリックして

インストールを始めます。「Add  Python 3.7 yo PATH」にはチェックを入れておきます。

4、IDLEを起動する

パイソンが正しくインストールされたか試してみてください。スタートメニューから「python」を探します。メニューからIDLEを選びます。

5、パイソンのウインドウが開く

Python 3.8.0(v3.8.0:5f…….

のようなウインドウが開きます。これでプログラミングが始められます。[>>>](プロンプトという)のあとに文字を入力していきます。

IDLEを使おう

IDLEで表示されるウインドウは2つあります。コード・ウインドウはプログラムを書いたり、セーブしたりするのに使えます。シェル・ウインドウは、パイソンの命令をすぐ実行することができます。

プログラミングの流れ

コードの入力→セーブ(保存)→実行→出力

セーブの仕方

コード・ウインドウのメニューの「File」を開いて「Save As」を選びます。ファイルの名前を「こんにちは」にして「Save」をクリックします。

練習

次のコードをコード・ウインドウに入力してください。セーブしてから、「Run」メニューの「Run module」でプログラムを実行してみてください。

a=10

b=4

print(a+b)

print(a-b)

シェル・ウインドウでの出力

プログラムを動かすと、出力(プログラムが処理や計算をした結果)がシェル・ウインドウに表示されます。

>>>

14

6

どっちのウインドウを使えばいいの?

コード・ウインドウとシェル・ウインドウのどちらを使えば良いのでしょう。それはどのようなプログラムを書くのか?そして繰り返して実行するプログラムなのか?によります。

コード・ウインドウ

コードが長くなる場合には、セーブして書き直せるるコード・ウインドウがぴったりです。同じことをもう一度やりたい場合は、似たようなプログラムを試すときには前に書いたものを手直しするほうが楽です。ただし1回ごとにセーブと実行を繰り返す必要があります。

シェル・ウインドウ

命令がどのような働きをするのか?調べるような手軽な実験をしたいなら、シェル・ウインドウがぴったりです。だけど命令をセーブすることができないので、何か繰り返しを行いたいときはコード・ウインドウを使うことを考えましょう。

ゆうれいゲームを作ろう

簡単なゲームを作ってパイソンでプログラムを書くときの注意点を学びます。プログラムを入力したら、ゲームを楽しみます。ゆうれい屋敷から逃げられるかな?

1、IDLEを起動して、メニューの「File」から「NewFile」を選ぶ。新しいウインドウ(コード・ウインドウ)が開くので、ゆうれいゲームという名前でセーブします。日本語の文字以外は全て英数半角で入力します(フォントが違うので、コピペではうまくいきません)。

#Ghost Game

from randam  import randint

print(“ゆうれいゲーム”)

feeling_brave=True

score=0

while feeling_brave:

    ghost_door=randint(1,3)

    print(“ドアが3つある”)

    print(“そのうち1つのドアの向こうにゆうれいがいる”)

    print(“さあ、何番のドアを開ける?)

    door(“さあ、何番のドアを開ける?”)

    door_num=int(door)

    if door_num==ghost_door

        print(“ゆうれいだ”)

        feeling_brave=false

    else:

        print(“ゆうれいはいなかった”)

        print(“となりの部屋に入れたよ”)

        score=score+1

print(“逃げろ”)

print(“ゲームオーバー!スコアは”,score,”です。”)

2、プログラムを正しく実行したら、「File」を開いて「Save As」を選んで「Save」を押します。それから、メニューの「Run」から、「Run Module」を選びます。

3、シェル・ウインドウで、「ゆうれいゲーム」が始まります。ゆうれいは3つの部屋のどれかにいます。1、2、3の数字のうち1つを入力してエンターを押します。 このゲームの目的は夜はゆうれいがいない部屋のドアを選ぶことですゆうれいがいなければ次の部屋に入ってゲームを続けますゆうれいがいると開けてしまうとゲームは終わってしまいますプログラムをもう一度動かしてもっと高いスコアを目指してください。

コードの解説

#Ghost Game

from randam  import randint

print(“ゆうれいゲーム”)

feeling_brave=True

score=0

この部分の命令はゲームが始まったときに1回だけ実行されます。タイトルや変数を用意したりと言う命令を使えるようにしています。printの命令はテキストを画面に表示します

while feeling_brave:

    ghost_door=randint(1,3)

    print(“ドアが3つある”)

    print(“そのうち1つのドアの向こうにゆうれいがいる”)

    print(“さあ、何番のドアを開ける?)

    door(“さあ、何番のドアを開ける?”)

    door_num=int(door)

メインの繰り返し

この繰り返しでは、プレイヤーにどのドアを開けるか入力をしてもらいます。選んだ道の向こうに幽霊がいない間は、この繰り返しがずっと続きます。幽霊がいた場合は変数のfeeling_braveがFalseに代わって繰り返しが止まります。

 if door_num==ghost_door

        print(“ゆうれいだ”)

        feeling_brave=false

    else:

        print(“ゆうれいはいなかった”)

        print(“となりの部屋に入れたよ”)

        score=score+1

分岐部分

プレイヤーが選んだドアの向こうに幽霊がいたかどうかでプログラムの流れが変わってきます。幽霊がいた場合は変数feeling_braveにfauseがセットされます。幽霊がいなければスコアは1だけ増えます。

print(“逃げろ”)

print(“ゲームオーバー!スコアは”,score,”です。”)

ゲームを終わらせる部分

この部分はプレイヤーが幽霊にあって繰り返しが止まった時に一回だけ実行されます。字下げされていないので、ループの一部ではないとわかります。

変数

数や文字列を変数に入れることを「セットする」といいます。「=」の記号を使ってセットできます。次のソースコードをシェル・ウインドウに入力してみよう。

>>>bones = 3

数をセットするには、変数の名前、イコールの記号、数を書けばいいのです。

>>>dogs_name=“ポチ”

文字をセットするには、ダブルクォーテーション” ”で囲みます。

変数を出力する

「print」命令は画面に何かを表示する命令です。この命令を使えば変数の中身を表示できます。

>>>print(bones)

3

>>>print(dogs_name)

ポチ

データ型

パイソンでは、データをいくつかの型に分けて考えています。

数・・・整数や少数

文字列

スクラッチと同じように、パイソンでも文字の並び方を「文字列」といいます。文字列には、アルファベット、数字、スペース、記号を入れられます。

文字列はダブルクォーテーション”  “で囲みます。

>>>a=“プログラミングが楽しい”

>>>print(a)

プログラミングは楽しい

真偽値(しんぎち)

パイソンのデータには、True(正しい)かfalse(まちがい)のどちらかになる真偽値という型があります。先頭のTとFは必ず大文字にします。

ライブラリー新しいソースコードを書くのは手間がかかるから他のソースコードを使い回しできれば便利ですこのように再利用できるソースコードを集めたものがライブラリです標準ライブラリPythonにはスタンダードライブラリー(標準ライブラリー)と言うものがあって便利なコードがたくさん入っています。ライブラリーは使い道ごとにグループ分けされていて、それぞれのグループをモジュールといいます。

モジュールの読み込み

モジュールを使う前に、コンピューターにモジュールを読み込むように伝える必要があります。モジュールを読み込むには「import」を使います。

turtleモジュール

画面上に線を引いたり図をかくのに使います。

図形をかいてみよう

図形をかくプログラムをつくります。どんな図形にするか決めておくと、プログラムがかきやすくなります。今回は家の形をかいてみます。

from turtle import *

reset()

left(90)

forward(100)

right(45)

forward(70)

right(90)

forward(70)

right(45)

forward(100)

right(90)

forward(100)

tkinkerモジュール

ボタンやウインドウのように、ユーザーとプログラムが情報をやりとりするときに便利な、画面表示の機能を作るためのものです。

ウインドウやボタンを作ってみよう

ボタンが2つあるウインドウを作ります。ボタンをクリックしてメッセージを表示するようにします。

from tkinter import *

def bAaction():

    print(“ありがとう”)

def bBaction():

    print(“痛い!ひどいじゃないか”)

window=Tk()

buttonA=Button(window, text=”押して”, command=bAaction)

buttonB=Button(window, text=”押さないでよ”, command=bBaction)

buttonA.pack()

buttonB.pack()

サイコロをふる

tkinterモジュールを使って、

簡単なアプリケーションを作ってみます。

from tkinter import *

def bAaction():

    print(“ありがとう”)

def bBaction():

    print(“痛い!ひどいじゃないか”)

window=Tk()

buttonA=Button(window, text=”押して”, command=bAaction)

buttonB=Button(window, text=”押さないでよ”, command=bBaction)

buttonA.pack()

buttonB.pack()

ボタンをクリックすると、関数「roll」を実行して1から6の間の数をランダムに表示します。プログラムを実行してサイコロをふってみてください。ボタンをクリックして、どんな数が出るか試してみましょう。このプログラムはちょっと変えるだけで、12面のサイコロにしたり、コインの表か裏を出すようなことも実現できます。

色と座標

コンピューターが画面に表示するグラフィクスは、ピクセルという色のついた小さな点が集まったものです。グラフィックスを表示するには、ピクセルごとにどの色を使うか指示しなければならないです。

キャンバスにかく

パイソンでグラフィックスをかくには、何もかかれていないエリアを作らないといけません。このかくためのエリアを、キャンバスといいます。キャンバスのどこにかくかは、エックス座標とy座標を使って正確に指示します。tkinterインターモジュールでは、左上が原点(0,0)になっていて右に行くほどx座標の値が大きくなり、下に行くほどy座標の値が大きくなります。

from random import *

from tkinter import *

size = 500

window = Tk()

canvas = Canvas(window, width=size, height=size)

canvas.pack()

while True:

    col=choice([“pink”,”orange”,”purple”,”yellow”])

    x0=randint(0,size)

    y0=randint(0,size)

    d=randint(0,size/5)

    canvas.create_oval(x0,y0,x0+d,y0+d,fill=col)

    window.update()

プログラムを実行するとキャンバスに色のついた円をかき始めます。

図形に色をつける色がついた図形もかけますそれぞれの図形で輪郭と内側(フィルを違う色にすることもできます

tkinterモジュールでエイリアンの絵をかこう

図形を組み合わせれば、いろんなものが書けます。だ円、線、三角形を組み合わせて、エイリアンをかくためのコードをかいてみましょう。

エイリアンの各部分について、どのような形を使うのか、サイズ。キャンバス上での位置、色を決めなければならないです。図形には一つ一つ番号がふられていて、その番号は変数にセットされています。

from tkinter import*

window = Tk()

window.title=(“エイリアン”)

c=Canvas(window, height=300, width=400)

c.pack()

body=c.create_oval(100, 150, 300, 250, fill=”green”)

eye=c.create_oval(170, 70, 230, 130, fill=”white”)

eyeball=c.create_oval(190, 90, 210, 110, fill=”black”)

mouth=c.create_oval(150, 220, 250, 240, fill=”red”)

neck=c.create_line(200, 150, 200, 130)

hat=c.create_polygon(180, 75, 220, 75, 200, 20, fill=“blue”)

Pythonでせん水かんゲームを作ろう

全コード公開

from tkinter import *

HEIGHT=500

WIDTH=800

window=Tk()

window.title(“せん水かんゲーム”)

c = Canvas(window, width=WIDTH, height=HEIGHT,bg=”blue”)

c.pack()

ship_id=c.create_polygon(5,5,5,25,30,15,fill=”red”)

ship_id2=c.create_oval(0,0,30,30,outline=”red”)

SHIP_R=15

MID_X=WIDTH/2

MID_Y=HEIGHT/2

c.move(ship_id,MID_X,MID_Y)

c.move(ship_id2,MID_X,MID_Y)

SHIP_SPD=10

def move_ship(event):

    if event.keysym==”Up”:

        c.move(ship_id,0,-SHIP_SPD)

        c.move(ship_id2,0,-SHIP_SPD)

    elif event.keysym==”Down”:

        c.move(ship_id,0,SHIP_SPD)

        c.move(ship_id2,0,SHIP_SPD)

    elif event.keysym==”Left”:

        c.move(ship_id,-SHIP_SPD,0)

        c.move(ship_id2,-SHIP_SPD,0)

    elif event.keysym==”Right”:

        c.move(ship_id,SHIP_SPD,0)

        c.move(ship_id2,SHIP_SPD,0)

c.bind_all(“<Key>”,move_ship)

from random import randint

bub_id=list()

bub_r=list()

bub_speed=list()

MIN_BUB_R=10

MAX_BUB_R=30

MAX_BUB_SPD=10

GAP=100

def create_bubble():

    x=WIDTH+GAP

    y=randint(0,HEIGHT)

    r=randint(MIN_BUB_R,MAX_BUB_R)

    id1=c.create_oval(x – r,y – r,x + r ,y + r ,outline=”white”)

    bub_id.append(id1)

    bub_r.append(r)

    bub_speed.append(randint(1, MAX_BUB_SPD))

def move_bubbles():

    for i in range(len(bub_id)):

        c.move(bub_id[i], -bub_speed[i],0)

def get_coords(id_num):

    pos=c.coords(id_num)

    x=(pos[0]+pos[2])/2

    y=(pos[1]+pos[3])/2

    return x,y

def del_bubble(i):

    del bub_r[i]

    del bub_speed[i]

    c.delete(bub_id[i])

    del bub_id[i]

def clean_up_bubs():

    for i in range(len(bub_id)-1,-1,-1):

        x,y=get_coords(bub_id[i])

        if x < -GAP:

            del_bubble(i)

from math import sqrt

def distance(id1,id2):

    x1,y1=get_coords(id1)

    x2,y2=get_coords(id2)

    return sqrt((x2-x1)**2+(y2-y1)**2)

def collision():

    points=0

    for bub in range(len(bub_id)-1,-1,-1):

        if distance(ship_id2,bub_id[bub])<(SHIP_R+bub_r[bub]):

            points+=(bub_r[bub]+bub_speed[bub])

            del_bubble(bub)

    return points

c.create_text(50,30,text=”タイム”, fill=”white”)

c.create_text(150,30,text=”スコア”,fill=”white”)

time_text=c.create_text(50,50,fill=”white”)

score_text=c.create_text(150,50,fill=”white”)

def show_score(score):

    c.itemconfig(score_text,text=str(score))

def show_time(time_left):

    c.itemconfig(time_text,text=str(time_left))

from time import sleep,time

BUB_CHANCE=10

TIME_LIMIT=30

BONUS_SCORE=1000

score = 0

bonus=0

end=time()+TIME_LIMIT

#メインのループ

while time()<end:

    if randint(1,BUB_CHANCE)==1:

        create_bubble()

    move_bubbles()

    clean_up_bubs()

    score +=collision()

    print(score)

    if(int(score / BONUS_SCORE))>bonus:

        bonus +=1

        end+=TIME_LIMIT

    show_score(score)

    show_time(int(end-time()))

    window.update()

    sleep(0.01)

c.create_text(MID_X,MID_Y, \

    text=”ゲームオーバー”, fill=”white”,font=(“Helvetica”,30))

c.create_text(MID_X,MID_Y+30, \

    text=”スコア: “+str(score), fill=”white”)

c.create_text(MID_X,MID_Y+45, \

    text=”ボーナスタイム: “+ str(bonus*TIME_LIMIT),fill=”white”)

Python 基本構文 ふりかえり


文字列はシングルクォーテーション「’」またはダブルクォーテーション「”」で囲む必要があります。どちらで囲んでも出力結果は同じとなります。
どちらかで囲んでいない場合、コードは動かなくなります。

プログラミングでは、「数値」も扱うことができます。数値は文字列と違って、クォーテーションで囲む必要がありません。
数値は左図のように、数学と同じ記号「+」「-」を用いて、足し算と引き算が可能です。数値や記号はすべて半角で記述します。また記号の前後の半角スペースはなくても構いませんが、入れた方がコードが見やすくなります。

図のように、「3 + 5」は計算結果である「8」を出力してくれます。
一方、「’3 + 5’」のようにクォーテーションで囲むと、文字列として解釈されて、そのまま「3 + 5」が出力されます。
このようにプログラミングの世界では、文字列と数値は全く異なるものとして扱われます。

プログラミングでは、足し算・引き算以外の計算をすることもできます。
掛け算は「*」、割り算は「/」で表します。また、「%」で割り算の余りを計算することができます。
この3つの記号は数学で用いる記号と少し違いますので、しっかり覚えましょう。

ここからは「変数」について学習します。
変数とは、データ(値)を入れておく箱のようなものです。
この箱(変数)に名前(変数名)をつけることで、その名前を用いて変数に値を入れることや、変数から値を取り出すことができます。

変数を活用するために、まず変数を用意(定義)するためのルールを見ていきましょう。
変数は下図のように「変数名 = 値」で定義します。変数名はクォーテーションで囲む必要はありません。
また、プログラミングの「=」は「等しい」という意味ではなく、「右辺を左辺に代入する」という意味になるので覚えておきましょう。

次は変数の値の取り出し方について学習しましょう。
図のようにprint(name)とすると、変数nameの値を出力することができます。
しかし、print(‘name’)のようにクォーテーションで囲ってしまうと、nameが変数ではなく文字列として認識され、「name」とそのまま出力されてしまうので注意しましょう。

変数の値を更新する(1)

計算変数代入

今度は、一度定義した変数の値を更新してみましょう。
「変数名 = 新しい値」とすることで変数の値を上書きすることができます。
下図では、変数を途中で上書きしたことによって、出力結果が変わっています。

変数の値を更新する(2)

計算変数代入

すでに定義された変数に数値を足す場合は、左図のように書きます。変数自身に数値を足したものを再び同じ変数に代入することで、値を上書きすることができます。この書き方には違和感を感じるかもしれませんが、「=」は「代入」の意味であり、「等しい」の意味ではないことを思い出しましょう。
引き算などのその他の計算でも同様です。

変数の値を更新する(3)

計算変数代入

数値の入った変数の値を更新する場合は、図のように省略して書くことができます。これは引き算などその他の計算でも同様です。
この書き方はよく使うのでぜひ覚えておきましょう。

文字列の連結

文字列変数連結

数値の計算で用いた「+」記号は、計算だけでなく文字列の連結も行うことができます。
文字列の連結は図のようにします。
他にも、変数と文字列の連結、変数同士の連結をすることができます。

ここではデータ型というものについて学習していきましょう。
これまで「文字列」や「数値」という言葉で値の種類を説明してきましたが、これらは「データ型」と呼ばれ、さまざまなデータの種類が存在します。
まずは「文字列型」と、数値のデータ型である「数値型」を覚えましょう。

データ型の違い

データ型が異なるとコードは異なる動作をします。
例えば、図のprint(5 + 7)は数値の計算、print(‘5’ + ‘7’)は文字列の連結となります。

型変換 str

型str

データ型の異なる文字列型と数値型を連結すると、左図のようにエラーが起きてしまいます。しかし、数値型を文字列型に変換すると、文字列同士の連結として扱われるようになるため、連結ができるようになります。
このようにデータ型を変えることを「型変換」といいます。
数値型を文字列型に変換するには「str」を用います。

先ほどの例とは反対に、文字列型を数値型に変換したい場合には「int」を用います。
intは下図のように使います。

if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能になります。
if文は図のように書きます。ifの後に条件式を指定し、その条件が成り立つときに実行する処理を次の行に書きます。
詳しい書き方については次のスライドから見ていきましょう。

まずは、if文の条件の作り方を詳しく見ていきましょう。
条件式の中では、2つの値を比較するための記号「比較演算子」がよく使われます。まずは左図の2つを覚えましょう。
if文の条件部分は右図のように「if 条件式 :」のように書きます。

先ほどのスライドで紹介した真偽値に関する内容を踏まえて、もう一度if文を見てみましょう。
if文では条件式がTrueのときには処理が実行され、Falseのときには処理は実行されません。

比較演算子には、==と!=といった値の等しさを比較する記号以外に、値の大小を比較する記号が存在します。
数学でも用いられる<, >という大小比較の記号です。「x > y」はxがyより大きければTrue, 小さければFalseを返します。「x < y」はその逆になります。また数学で同様に用いる≧, ≦という記号(以上や以下を表します)は、>=, <=と記述します。

これまでに説明した代表的な比較演算子をまとめると下図のようになります。

ここではデータ型というものについて学習していきましょう。
これまで「文字列」や「数値」という言葉で値の種類を説明してきましたが、これらは「データ型」と呼ばれ、さまざまなデータの種類が存在します。
まずは「文字列型」と、数値のデータ型である「数値型」を覚えましょう。

データ型が異なるとコードは異なる動作をします。
例えば、図のprint(5 + 7)は数値の計算、print(‘5’ + ‘7’)は文字列の連結となります。

データ型の異なる文字列型と数値型を連結すると、左図のようにエラーが起きてしまいます。しかし、数値型を文字列型に変換すると、文字列同士の連結として扱われるようになるため、連結ができるようになります。
このようにデータ型を変えることを「型変換」といいます。
数値型を文字列型に変換するには「str」を用います。

文字列型を数値型に変換したい場合には「int」を用います。
intは下図のように使います。

if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能になります。
if文は図のように書きます。ifの後に条件式を指定し、その条件が成り立つときに実行する処理を次の行に書きます。
詳しい書き方については次のスライドから見ていきましょう。

if文の条件式が成立した時の処理を書くときには、インデント(字下げ)をします。
図のように、処理がif文の中にあるかどうかはインデントによって判別されます。条件が成立したときにif文の中の処理が実行されます。
Pythonではコードの見た目(インデント)がそのままプログラムの動作に影響するので、インデントに気をつけましょう。

if文の条件式が成立した時の処理を書くときには、インデント(字下げ)をします。
図のように、処理がif文の中にあるかどうかはインデントによって判別されます。条件が成立したときにif文の中の処理が実行されます。
Pythonではコードの見た目(インデント)がそのままプログラムの動作に影響するので、インデントに気をつけましょう。

リストも1つの値なので変数に代入することができます。
このとき、リストを代入する変数名は慣習上複数形にすることが多いので、覚えておきましょう。

リストの要素には、前から順に「0, 1, 2,・・・」と数字が割り振られています。これをインデックス番号といいます。インデックス番号は0から始まる点に注意してください。
リストの各要素は、リスト[インデックス番号]とすることで取得することができます。

リストの要素を更新してみましょう。
「リスト[インデックス番号] = 値」とすることで、リストの指定したインデックス番号の要素を更新することができます。

リストには、新しく要素を追加することもできます。
「リスト.append(値)」とすることで、すでに定義されているリストの末尾に新たな要素を追加することができます。

for文を使うと、リストの要素を順に取り出して処理を行うことができます。
下図のように「for 変数名 in リスト:」と書くことで、リストの要素の数だけ、処理を繰り返すことができます。
詳しい処理の流れは次のスライドで確認しましょう。

「for 変数名 in リスト:」とすると変数には、リストの要素が先頭から順に1つずつ入っていき、その上でfor文の中の処理が実行されます。処理はリストの要素の数だけ繰り返し行われます(繰り返し処理)。
また、変数名は自由ですが、リスト名の単数形にすることが慣習上多いです。

繰り返し処理にはfor文以外にもwhile文というものがあります。
while文を用いると、「ある条件に当てはまる間、処理を繰り返す」といったことが可能になります。
次のスライドでwhile文の書き方を見ていきましょう。

図のように、変数の値を更新する処理を記述する際にインデントを忘れるとwhile文の外と見なされてしまいます。よって、while文の条件式が永遠にTrueになるので無限ループとなります。
無限ループを起こさないためにもインデントには気をつけましょう。

ここでは繰り返し処理を繰り返しの途中で強制的に終了するための方法を学びましょう。
breakを用いると繰り返し処理を終了することができます。下図のようにif文などの条件分岐と組み合わせて使います。
while文でも同じように使うことができます。

繰り返し処理を終了するbreakと違い、continueはその周の処理だけをスキップすることができます。
continueもif文などと組み合わせて利用します。
while文でも同じように使うことができます。

関数を作ってみよう

まずは関数の作り方について学習していきましょう。
関数は「def 関数名():」のように定義します。
関数の処理の内容は、下図のようにインデントして書いていきます。

関数の使い方

関数は定義しただけでは実行されないので、呼び出して実行してみましょう。
関数名()のように() をつけて呼び出します。
ただし、関数は定義した後でしか呼び出せないので気をつけましょう。

引数とは

関数を呼び出す際に、関数に値を渡すことができます。
この値のことを引数といい、引数を渡すと関数の中でその値を利用することができるようになります。
関数に引数を渡せると、その値によって関数の処理結果を変えることができるので便利です。

関数に引数を渡すには、関数名(引数)として関数を呼び出します。渡された引数は、関数の仮引数に代入され、その値を関数の処理の中で用いることができます。

変数には、その変数が使える範囲が存在します。その範囲のことをスコープと呼びます。
仮引数や関数の中で定義した変数のスコープは関数の中だけとなります。よって、その変数を関数の外で使うことはできません。

複数の引数を渡すには下図のようにします。
引数の順番は、対応する仮引数の順番と同じにする必要があります。

引数の初期値

引数の初期値

引数には初期値を設定することもできます。
下図のように引数が省略されたとき、初期値が与えられていれば代わりの値として初期値が使われます。

名前を受け取ろう

じゃんけんをしよう

ここまでで関数の基礎的な知識を一通り学びました。
ここでは今までに作った関数を使って、下図のように入力に応じた処理ができるようにしていきます。

グー、チョキ、パーを要素とするリストを用意し、それぞれ要素のインデックス番号に対応する数字を入力することで、どの手を出すか選べるようにします。インデックス番号は、関数に渡す仮引数(hand)で受け取ります。

関数の処理結果を関数の呼び出し元で使いたい場合には、関数が戻り値を返すようにします。ここでは2つの引数を受け取って足し算を行い、結果を返す関数addを例に考えてみましょう。
関数addは「3」と「7」を受け取ると、処理結果の「10」を呼び出し元に返します。この「10」にあたるのが戻り値です。

戻り値を呼び出し元に返すには、関数の中でreturnを使います。
「return 戻り値」と書くことで戻り値を呼び出し元に返し、活用することができます。

戻り値がある場合、関数の呼び出し部分がそのまま値に置きかわります。
よって、下図のように関数の呼び出し部分を変数に代入することができます。

モジュールとは、Pythonのコードが書かれたファイルのことです。
別ファイルをモジュールとして読み込むことでそこに書かれたコードを利用することができます。
今までコードを記述していたscript.pyもモジュールです。ここでは関数の定義部分をscript.pyからutils.pyに移します。

importを使うことでモジュールを読み込むことができます。
モジュールを読み込んで使いたいファイルに、「import モジュール名」と書くことで読み込むことができます。
モジュール名はファイル名から拡張子(.py)を取り除いたものとなります。

読み込んだモジュールを使ってみましょう。
「モジュール名.関数名()」と書くことで、モジュール内の関数を実行することができます。
引数がある場合、関数を使用するときと同様に()のなかに書きます。

Pythonには便利なモジュールがいくつか用意されています。これらのあらかじめ用意されているモジュールは標準ライブラリと呼ばれ、importを用いて読み込むことで便利な関数を利用できるようになります。

ここではrandomモジュールに用意されている関数randintを用いて、コンピュータの出す手がランダムになるようにしましょう。
randomモジュールは下図のように読み込みます。
random.randint(x, y)と書くことで、xからyまでの整数をランダムに取得することができます。