習うより慣れてみよう!

習うより慣れろ

Python言語のテキストの多くは,文法を教えることがメインになっている. 他のプログラミング言語を習得した後の人ならそれでも良いが,本当の初学者には,計算機とプログラミングでどんなことができるのかを教えた方が良い.

ここでは,本当の初学者向けに,Python言語に慣れてもらうことを目的として,簡単な練習問題を(大量に)準備した.

さあ, 習うより慣れてみよう!

電卓としてのPython

●例題1-1

Jupyterは,電卓としても使える. $2^4$ (2の4乗)を計算せよ.

(Pythonではべき乗の演算子は $**$ である. Jupyterでプログラムを実行するためには,Shiftlキーを押しながら,Enterキーを押す.すると,最後の文が評価されて画面に表示される.

試してみよう!

2**4
16

●例題1-2

結果を画面に表示させるためには, print関数を用いる. printの後ろの()の中に表示したいものを入れると,出力が返される.

(このように,何かを入れると何かが返されるものを「関数」と呼ぶ. 詳細については後述する .)

例として, $2+7$ の結果と, 文字列 'Hello' (文字列を表示させるためには,' ' で囲むか," " で囲む) を表示してみよう.

print(2 + 7)
print("Hello")
9
Hello

2つの結果を同じ行に表示させるためには,間に ,(カンマ)を入れて書く. 日本語も表示できるが, 日本語の全角文字で空白や記号を入れるとエラーすることもあるので,注意しよう.

プログラムは基本的には半角「だけ」で入力するようにした方が,初学者には混乱がないだろう.

●例題1-3

画面に "10を3で割ったときの商は" に続いて $10 // 3$ の結果を,"余りは" に続いて剰余 $10 \% 3$ を表示せよ.

整数除算の演算子は //,剰余の演算子は % である .普通の割り算 $/$ をすると小数(正確な用語は浮動小数点数)が表示される.

print("10を3で割ったときの商は", 10 // 3)
print("余りは", 10 % 3)
print(10 / 3)
10を3で割ったときの商は 3
余りは 1
3.3333333333333335

■問題1-1

print関数を用いて

  1. Hello World
  2. $4+4*5$の結果

を表示せよ.

■問題1-2

11211
12121
21112

を一気に表示するようなプログラムを作れ.

■問題1-3

2の10乗と5の100乗を出力するプログラムを作れ. (べき乗を計算する演算子は$**$である.)

●問題1-4

「(33+44)×55」と「2.1+4.3+6.5」と「123+456を78で割った余り」を計算し,表示するプログラムを作れ.

その際に,(33+44)*55=のように計算式も表示せよ.

■問題1-5

(1) $1+2+3+4+5$ の計算結果を表示せよ.

(2) $1*3*5*7*9$ の計算結果を表示せよ.

(3) $98*3+48*4+188+(208-50)*5$ の計算結果を表示せよ.

変数と計算

計算式が長い場合には,途中経過を保存しておく方が分かりやすく書ける. 一時保管用の場所は変数と呼ばれる.

以下の例では簡単のため,変数は $z,y,z,a,b, c$ などのアルファベットを用いるが,実際のプログラムでは覚えやすいような名前を付ける.

たとえば,temp_variableamount12 など,アルファベット以外の記号も使えるが,数字で始めることはできない.

●例題2-1

変数を使ったプログラムを作ってみよう.変数xに123*45を代入した後,xの値を表示する.

  1. 変数 x に 123*45 の計算結果を代入する.

  2. x の値を表示する.

という順番で命令を実行してみよう!

x = 123 * 45
print(x)
5535

●例題2-2

今度は, 整数と小数(浮動小数点数)を使ったプログラムを作ってみる.

このプログラムは,浮動小数点数である $y=9.99$ と整数である $x=50$ をそれぞれ10倍して表示する.

浮動小数点数の数字には.(ピリオド)がついており,整数の数字にはついていないことが確認できる.

y = 99.9
x = 50
print(y * 10, x * 10)
999.0 500

●例題2-3

以下のプログラムは,xとyの値を3回表示するのですが,それぞれ,何と何が表示されるか,頭の中で考えてみよ.

プログラムがどのように動いて,変数には何が代入されるかを考えた上で,① 10,10 ② 10,20 ③ 20,20の中から選べ.

その後で,print関数の前にある#(シャープ)を外して,実行せよ. (文の先頭の#は,その文がコメント文であることを表す.)

x = 10
y = 10
# print(x, y)
x = y + 10
y = 20
# print(x, y)
x = x - 10
y = y - x
# print(x, y)

■問題2-1

例題2-1のサンプルコードを用いて,

(1) 変数xの名前を,自分の好きな名前に変えてみよう. どのような名前にすると,エラーが出るか?

(2) x=の後の計算式を 12+45のようにいろいろと変えてみよう.

(3) 1行目と2行目を入れ替えると何が起きるか試してみよ. また,なぜそうなるのか,考えよ. (ヒント:コンピュータは最初の行から順番に命令を実行する.)

■問題2-2

例題2-3のサンプルコードを用いて,

(1) 各行の式に出てくる10や20などの数値を,自分の好きな数,例えば30や5に変更し,実行結果がどう変わるか調べよ.

(2) 4行目と5行目を入れ替えると,実行結果がどう代わるか,予測せよ.また,7行目と8行目を入れ替えるとどのようになるかも予測せよ 予測したら,実際に入れ替えて実行し,予測があっているか確認せよ.

■問題2-3

変数xに1020を,yに3040を代入し,xとyの値を表示するプログラムを作れ.

■問題2-4

変数xに1.5を代入し,xの値の1/10を表示するプログラムを作れ.

■問題2-5

変数xに10を代入してxの値を表示,次に20を代入してxの値を表示,最後に30を代入してxの値を表示する,というプログラムを作れ. また,行を適当に入れ替えて,動きがどう変わるか調べてみよ.

入力関数 input

ユーザーに入力を促し入力を受け取る関数inputの構文は以下のようになる.

ユーザーが入力した文字列  = input( 画面に表示するメッセージ文字列 )

関数(function)については,後で詳しく述べるが,何か(引数とよぶ)を () に入れて返すと,何か(返値とよぶ)を返すものである.

input関数は文字列を返す.

整数を入力したい場合には,int関数で入力された文字列を整数に直す必要がある.

整数 = int( 文字列など )

このように関数は,入力を出力に変換する.int( input (メッセージ) ) と書くと,以下のように変換される.

ユーザーの入力  -> input関数 -> 文字列  -> int関数 -> 整数

●例題3-1

整数の入力をうながし,入力した数の 10乗を計算した結果を表示せよ.

x = int(input("何か整数を入力してね"))
print(x**10)
1

●例題3-2

名字を名前を英文で入力するようにうながし,フルネームを表示するプログラムを作成せよ.

first = input("名字を英文で入力してね")
given = input("名前を英文で入力してね")
print(given,first)
Kitty White

■問題3-1 inputが入力した数値を変数に代入している,ということを,プログラムを作って確認せよ. 代入された変数の値を表示すれば確認できるので,プログラムの基本的な構造は以下のようになる.

  1. input関数で変数xに整数を入力する.

  2. print関数で変数xの値を表示する.

(1)上の構造どおりのプログラムを作れ

(2)変数xの名前を自分の好きな名前に変えてみよ.

(3)数値を入力して表示する,という作業を2回するように変更せよ.

(4)入力する前に Integer = ?と表示するようにせよ.

(5)小数(正確には浮動小数点数)を入力し,それを表示させるように変えよ.(文字列を浮動小数点数に変換するにはfloat関数を用いる.)

■問題3-2

入力した数値を使った計算をする.inputを使ってキーボードから2つの整数を入力して,その合計を表示する,というプログラムを作りたい. プログラムの基本的な構造は以下のようになる.

  1. 整数を2つ入力し,それぞれを異なる変数に代入する.

  2. 2つの整数の和を表示する.

(1)上の構造どおりのプログラムを作れ.

(2)整数3つを入力して,その合計を表示するようにせよ.

(3)浮動小数点数2つを入力して,その合計を表示するようにせよ.

(4)整数2つを入力して,その積を表示するようにせよ.

■問題3-3【難】

上で勉強したinput,print,変数の3つだけで 借金返済計画を立てるプログラムを作りたい. ただし, 簡単のため利子は無しとする.

まず,借金の総額と,ひと月に返済する金額を入力すると,返済にかかる年数を表示し,さらに,毎年のボーナスから返済する金額を入力すると,返済完了が何年早まるかを表示し, その次に返済を完了したい年数を入力すると,ボーナスからいくら返せばよいかを表示するプログラムを作成せよ.

(この問題は記述があやふやで,自分で仕様を決めてあげる部分が残されている. 実際問題のプログラムでは,お客さんの要望にしたがって仕様を決めていくが,ここでは解きやすいように自分で仕様を決めてかまわない. たとえば,「年数」は半端もあり(浮動小数点数)で出力し,ボーナスは年始に1回だけ渡されるものと仮定しても良い.)

■問題3-4(▲参考:問題3-1)

キーボードから2つの整数と2つの浮動小数点数を入力して, それぞれを出力するプログラムを作れ.

■問題3-5(▲参考:問題3-2)

整数を4つ入力して,それらの合計を表示するプログラムを作れ.

例えば,プログラムを実行して,10,20,33,44を入力すると, その合計の107が表示されるようにせよ.

■問題3-6

整数を2つ入力して,それらの積を表示し, さらに整数を2つ入力してそれらの積を表示し,最後に,今までに表示した2つの数の合計を表示するプログラムを作れ.

例えば,プログラムを実行して10,20,33,30 を入力すると, 実行結果が以下のようになるようにする.

10
20
product = 200
33
30
product = 990
total = 1190

■問題3-7

変数 $x$ と $y$ にキーボードから整数を入力し, その和と積を表示するようなプログラムを作れ. 

if文(条件分岐)

今までのプログラムは分岐がありませんでした(これを直線的プログラムと呼ぶ).

条件が成立するときだけ,ある文を実行させることによって,もう少し面白いプログラムが書ける.

if 条件文 :

  条件文が成立する(True)のときに実行される文のブロック

というのが基本文法である.

とても重要な注意:

Python では 字下げ(同じ数の半角の空白)でプログラムの固まり(ブロックと呼ぶ)を定義する.

:(コロン)を書いた後に改行して,同じ数の半角の空白(スペースキーをうつ)を入れる.

Jupyterを含むほとんどのエディタでは,自動的に整形される.

●例題4-1

「0<10という条件が成り立つならOKと表示する」というプログラムを作って, ifの使い方を練習する.

0は10より小さいので0<10は必ず成り立つ.

よって,以下を実行すると,OKが表示される.

if 0 < 10:
    print("OK")
OK

●例題4-2

もう少し難しい条件を判定しよう. if の後ろの式が成り立たない(偽: False)のときに実行されるのが else: のブロックである.

if 条件文 :
    条件文が成立する(True)のときに実行される文のブロック
else: 
    条件文が成立しない(: False)のときに実行される文のブロック

キーボードから入力した数に $25000$ を足したものが,$3500*9$ と等しいかどうかを判定するプログラムを作りたい.

それには,以下の順で命令を実行する.

1. 変数xに数値を入力する.

2. ifで $x+25000$ と $3500*9$ が等しいかどうか判定する.

3. 等しいならOKを,そうでなければBooを表示する.

条件式では,等号に $==$ を使う.

x = int(input("Please enter an integer:"))
if x + 25000 == 3500 * 9:
    print("OK")
else:
    print("Boo")
Boo

●例題4-3

ifブロックの中に別のifブロックがあるプログラムを作ってみよう.

else の後に if 文を入れたい場合には,elif: とあわせて書くことができる. これを使うと,不必要な字下げ(インデント)をしないで済むようになるので綺麗に書ける.

if 条件文1:
  条件文1が真のときに実行される文のブロック
elif 条件文2: 
    条件文1が偽で条件文2が真のときに実行される文のブロック
else:
    条件文1が偽で条件文2も偽のときに実行される文のブロック

入力した整数が正の場合はpositiveと表示して, さらに100以上の場合は100以上,100未満の場合は100未満と表示する.

また,入力した整数が正でない場合,0の場合はzero,負の場合はnegativeと表示する.

x = int(input("Please enter an integer:"))
if x > 0:
    print("positive")
    if x >= 100:
        print("100以上")
    else:
        print("100未満")
elif x == 0:
    print("zero")
else:
    print("negative")
positive
100以上

条件文には,様々な論理式を入れることができる.

論理式とは真(True)か偽(False)に and(かつ) や or(または) や not などの論理演算子を適用した式のことであり, 必ず真か偽になる.

たとえば,「xが 1 または yが6でない」ということは,

x==1 or y!=6

という論理式で書ける.

同様に「xが4未満でなく かつyが6未満」は

not(x<4) and y<6

と書ける.

●例題4-4

入力した整数が負か100以上なら"範囲外"と出力し,それ以外なら"OK"と出力するプログラムを作成せよ.

x =int( input("数を入力してください "))
if x < 0 or x >= 100:
    print("範囲外")
else:
    print("OK")
範囲外

■問題4-1

(1) 入力した数が0ならzeroと表示するプログラムを作れ.

(2) 入力した数が100以上ならOKと表示するプログラムを作れ.

(3) 入力した数が0以上ならpositive,そうでなければnegativeと表示するプログラムを作れ.

(4) 入力した2つの数が等しいならequalと表示するプログラムを作れ.

■問題4-2

(1) 入力した数が10か10より大きいか10未満かを判定するプログラムを作れ.

(2) 入力した数が1なら1,2なら2,それ以外ならetcと表示せよ.

(3) 例題4-3のサンプルコードの最初のifの条件式を(x<0)とすると,実行結果は元のプログラムと変わってしまいます. そこで,この条件式以外の部分を修正して,元のプログラムと同じ実行結果を出すプログラムに修正しましょう.

■問題4-3

キーボードから2つの数 $x$ と $y$ を入力し,$y$ が $x$ 以下なら $x-y$ を表示し, $y$ が $x$ より大きければ '負になります' と表示するプログラムを作れ.

■問題4-4

まず,文字で絵を3種類作れ (例えば '(>_<)'や '⌒▽⌒"'のような絵).そして,キーボードから数を入力し,その数が1なら1番目の絵を,2なら2番目の絵を,3なら3番目の絵を表示するプログラムを作れ. それ以外の数が入力された場合は,何もしなくて良い.

■問題4-5

キーボードから数値をxに入力し,ifを使って,xが偶数なら Even,奇数なら Odd と表示させるプログラムを作れ.

(ヒント:xが偶数なら,xを2で割った余りが0となり,奇数であれば1になるので,xを2で割った余りを調べれば良い. 余りを計算するには,剰余演算子 % を使う.)

■問題4-6

キーボードから入力した数が10以上20以下であればOKと表示するプログラムを作れ.

■問題4-7

文字で作った絵を2つ作ってみよう. そして,キーボードから入力した数が10 以上20 以下なら1つ目の絵を,50以上60以下なら2つ目の絵を表示するプログラムを作れ.

■問題4-8

キーボードから数を入力し,その数が正ならその数を表示.そうでなければ,もうひとつ数を入力し,最初の数との積を表示するプログラムを作れ.

表示結果例

x = -3
y = 2
product = -6

while,forによる反復文

プログラム(コンピュータ)は,同じ操作を繰り返すことが得意だ.

while 条件: 
  
  繰り返したい文

の構文で条件が成立している間(真のとき)に文(複数でも可)が繰り返し実行されます.

注意

必ずいつかは「条件」が,偽(False)になるように設定せよ. そうでないと,無限ループと言ってプログラムが止まらなくなる. (Jupyterの場合には上部メニューからKernelの Interrupt Kernel(中断)もしくは Restart Kernel(再起動)を行う必要がある.)

●例題5-1

5から1までの数字を順番に表示するプログラムを作れ.

  1. xに最初に5を代入します.

  2. while x > 0: とxが正の間は繰り返す while 文を作る.

  3. 繰り返したいブロックの中で,xをprintしてから,xをから1を引いた値を再びxに代入する.

x = 5
while x > 0:
    print(x)
    x = x - 1  # x -= 1 と書いても同じ
5
4
3
2
1

●例題5-2

while の中で break文を入れると,whileの反復(ループ)から出ることができる.

10から1までの数字の2乗を順に出力するプログラムを作成せよ.

  1. xに最初に10を代入しておく.

  2. while の後に True(もしくは1)と常に真になる式を入れて whileループを作ります.繰り返しブロックの中でxの2乗を出力してから,1を引く.

  3. その後に,if文を入れて,xが0以下になったら breakするようにする.

x = 10
while True:
    print(x**2)
    x = x - 1
    if x <= 0:
        break
100
81
64
49
36
25
16
9
4
1

●例題5-3

簡単な数字の繰り返しなら for 文を使った方が簡単であり,こちらの方がよく使う

for x in range(初期値終了値ステップ)

  繰り返したい文

の構文である. .ここで繰り返しは range()関数を用いて生成する.

たとえば,range(0,10,1) と書くと,0,1,2,...,9 の数字を x に順に代入して繰り返す .終了値の1つ前まで繰り返すことに注意せよ.

初期値は省略すると 0,ステップは省略すると 1 になるので,range(0,10,1)は range(10) と書いても大丈夫である.

ステップを2にすると,1つ飛ばしで数列が生成される. たとえば range(1,10,2) は 1,3,5,7,9 となる.

例題:

1から10までの奇数の2乗を順に出力するプログラムを作成せよ.

for x in range(1, 10, 2):
    print(x**2)
1
9
25
49
81

●例題5-4

例題5-2と同じ問題(10から1までの数字の2乗を順に出力するプログラムを作成せよ)をfor文を使って解いてみる.

10から1までの数列を生成するには,range(10,0,-1)とステップに-1を入れる.

for x in range(10, 0, -1):
    print(x**2)
100
81
64
49
36
25
16
9
4
1

●例題5-5

for(while)文の中にfor(while)文を書くこともできる. これは反復(ループ)の入れ子と呼ばれる.

Pythonでは,字下げ(インデント)が重要なので,構文は以下のようになる.

for x in range(初期値終了値ステップ)

  for y in range(初期値終了値ステップ)

    繰り返したい文

while文でも同様である.

例題:

1から5までの整数 $x$ と 8 から16までの整数 $y$ の和の表を作成せよ.

以下のような出力を得たいのだが, print()関数で出力すると,自動的に改行されてしまう.

9 10 11 12 13 14 15 16 17

10 11 12 13 14 15 16 17 18

11 12 13 14 15 16 17 18 19

12 13 14 15 16 17 18 19 20

13 14 15 16 17 18 19 20 21

改行しないで(かつ空白を入れて)出力したいときには,print(出力したい数, end=' ') と書く. これは,end= の後に書いた文字が,改行コードの代わりに,出力に付加されることを表す.

すると全部つながって

9 10 11 12 13 14 15 16 17 10 11 12 13 14 15 16 17 18 11 12 13 14 15 16 17 18 19 12 13 14 15 16 17 18 19 20 13 14 15 16 17 18 19 20 21

と出力されてしまうので,内側のforループが終わったあとに print() と改行を行うための出力をいれる.

for x in range(1, 6):
    for y in range(8, 17):
        print(x + y, end=" ")
    print()
9 10 11 12 13 14 15 16 17 
10 11 12 13 14 15 16 17 18 
11 12 13 14 15 16 17 18 19 
12 13 14 15 16 17 18 19 20 
13 14 15 16 17 18 19 20 21 

■問題5-1

(1)「入力した数を表示する」という作業を,3回繰り返すプログラムを作れ.

(2)「入力した2つの整数の和を表示する」という作業を,3回繰り返すプログラムを作れ.

(3)「入力した定価の税込価格(消費税は8%で半端は切り捨てとする)を表示する」という作業を3回繰り返すプログラムを作成せよ.

(4)0を入力したら,次の反復に移らず,終了するプログラムにせよ.

(5)負の数を入力したら,次の反復に移らず,終了するプログラムにせよ.

■問題5-2

(1)「入力した整数が7の倍数かどうかを判定する」という作業を2回繰り返すプログラムを作れ.

(2)3の倍数かどうかの判定を繰り返すようにせよ.

(3)負かどうかの判定を繰り返すようにせよ.

■問題5-3

(1)Hello!を10回表示するプログラムを作れ.(実は "Hello!"*10 でも良いが, for もしくは while を用いて書け.)

(2)20回表示するプログラムに変更せよ .

■問題5-4

(1)1から10までの整数を表示するプログラムを作れ.

(2)1から20までの整数を表示するように書き換えよ.

(3)-10から10までの整数を表示するように書き換えよ.

(4)2,4,6,8,10 を表示するように書き換えよ.

(ヒント:xを2つずつ大きくすると…)

■問題5-5

(1)10から1までの整数を大きい順で(10,9,8,… )表示せよ.

(2)1から100までの偶数を表示せよ.

■問題5-6

(1)forの2重ループを使って,九九の表を書くプログラムを作成せよ. ただし,表の罫線を書くのは大変なので,中身の数字だけを書く.

(2)9×9 の足し算の答えを表にせよ.

(3)12×12 の掛け算の答えを表にせよ.

■問題5-7

 ##########   1個の空白と10個の#を表示
  ########    2個の空白と8個の#を表示
   ######    3個の空白と6個の#を表示
    ####    4個の空白と4個の#を表示
     ##     5個の空白と2個の#を表示

上のような#で作った三角形を表示するプログラムを作成せよ. 

■問題5-11(whileとif文の練習)

数当てゲームを作りたい.

1から100までの適当な整数を用意し, キーボードから入力した整数がその数と同じならば 終了するプログラムを作成する.

ただし,はずれたときは, 正解よりも大きかったか小さかったかを表示して ヒントを出すようにすること. 

■問題5-12(for,whileの使い分け)

2つの整数aとbをキーボードから入力させ, a以上b以下の整数をすべて表示させるプログラムを作れ

(1) for文を使って作れ(whileは使わない)

(2) while文を使って作れ(forは使わない)

■問題5-13

2つの整数a,bをキーボードから入力し, 縦がa文字,横がb文字の$*$で出来た四角を描くプログラムを作りなさい.

たとえば,a=2,b=5なら,

*****
*****

と表示される.

■問題5-14

九九の表を作るプログラムを,掛け算の答えだけでなく,

それぞれが何と何の掛け算なのか,つまり $3*5=15$ のように表示するプログラムを作れ.

■問題5-15

3×3×3のかけ算の表を表示するプログラムを作れ.

1×1×1,1×1×2,1×1×3,1×2×1,...の順で表示するようにせよ.

■問題5-16

キーボードか整数xを入力し,xの数だけ#を横に並べて表示する,という作業を繰り返すプログラムを作れ.

ただし,入力した数が0なら終了するようにします.例えば,5,3,15,0と入力した場合にはこのようになる.

5
#####
3
###
15
###############
0

繰り返し文の応用,補助変数・カウント・フラグ

●例題6-1(補助変数)

「数を繰り返し入力し,前回と同じ数が入力されたら終了する」プログラムを,補助変数を使って作成する.

前回入力された数を記録するために,補助変数 $y$ を用意します.そして,ループ内で新たに $x$ に数を入力する前に,$y$ に $x$ を代入して, 前回入力された値を $y$ に保存するようにする. 数の比較には $x==y$ (等しい) や $x!=y$ (異なる) などの表現を用いる.

y = int(input("y="))
x = int(input("x="))
while y != x:
    y = x
    x = input("x=")

●例題6-2 (最大値)

10個の数を入力して,その中で最大のものを表示する,というプログラムを作成する.

  1. 最大値を表す補助変数 $m$ を準備して,十分に小さな数を代入しておく.

  2. 次にfor文による反復の中で,入力した数が $m$ より大きいならば,その数を $m$ に代入する.

  3. 反復から抜けたときの $m$ の値が最大値になる.

m = -9999
for i in range(10):
    j = int(input("Please enter an integer:"))
    if m < j:
        m = j
print(m)
10

●例題6-3(カウント)

「入力した10個の数の中に10以上のものはいくつあるか」というプログラムを作る.

  1. 最初に10以上のものの数を表す補助変数 c に0を入れておく.

  2. for文による反復(ループ)の中で,10以上の数字が出てきたときに c に1を加える.

  3. ループから出てきたときには,c に10以上の数をカウントした数が入っている.

c = 0
for i in range(10):
    j = int(input("Please enter an integer:"))
    if j >= 10:
        c += 1  # c = c+1
print(c)
0

●例題6-4(フラグ)

「入力した5個の数の中に5があるかどうか」を調べるプログラムを作る

これには,フラグ(旗のこと)とよばれる補助変数を用いる.

以下のプログラムでは, f をフラグにしている.

  1. フラグ f は反復(ループ)に入る前には $0$ に設定されています.これはまだ $5$ が見つかっていないことを表す.

  2. ループの中で $5$ が入力されたら,フラグ f は $1$ に変更する.

  3. 最後にループを出た後で f が $1$ になっていれば5があった, f が $0$ のままなら5がなかったことになる.

f = 0
for i in range(5) :
    j = int(input("Please enter an integer:"))
    if j == 5 :
        f = 1
if f == 1 :
    print ("5があった") 
5があった

●例題6-5(break)

Pythonの機能を使うと、上と同じ問題をフラグを用いずに解くことができます。

Pythonでは、for文による反復の中で、break文を入れることによって、反復を強制的に抜けることができます。

以下の例では、5があったら反復を抜けるようにしてあります。また、for文を抜けた直後に、elseによるブロックを入れると、breakで終了しなかったときだけ実行されます。

ここでは、「5がなかった」と表示するようにしてあります。

for i in range(5) :
    j = int(input("Please enter an integer:"))
    if j == 5 :
        print ("5があった")
        break
else:
    print("5がなかった")
5がなかった

●例題6-6 (continue)

breakを使うと反復から強制的に抜けることを上で学びました。

代わりに continue文を使うと、反復から抜けるのではなく、次の反復に移ることができます。

以下の例では、入力された数字をprintで出力しますが、反復のカウンタが3のときだけprintしないようにしています。

for i in range(5):
    if i == 3:
        continue
    print("入力値は", i)
入力値は 0
入力値は 1
入力値は 2
入力値は 4

■問題6-1

(1) 10個の数字を入力する反復の中で,前回入力した数より倍以上大きな数を入力したら終了するようなプログラムを作りなさい.

(2) 10個の数字を入力する反復の中で,前回入力した負の数と同じ数を入力したら終了するようにしましょう(1,-1,4,-4,5 と入力した時点では,前回入力した負の数は-4です).

(ヒント:xが負のときだけ,yにxを代入しましょう.)

■問題6-2

(1) 「入力した5個の数の最小」を表示するプログラムを作りなさい.

(2) 入力した5個の数の中で「10以下の数の中での最大」を表示するようなプログラムを作りなさい.ただし,10以下の数は必ず1つは入力される,とみなして良いとします.

■問題6-3

キーボードから5個の数字を入力し,

(1) 負の数がいくつ入力されたかを表示するプログラムを作りなさい.

(2) 偶数がいくつ入力されたかを表示するプログラムを作りなさい.

■問題6-4

(1) キーボードから入力した5個の整数の中に1がなければ"1がありません"と表示するようにしましょう.

(2) 入力した5個の数の中に負の数があるかどうかを表示するようにしましょう.

■問題6-5

数を5個入力してその合計を表示するプログラムを作りなさい.

■問題6-6

足し算だけの電卓を作りなさい.数を入力し,今まで入力した数の合計を表示する,という作業を繰り返すプログラムです.

さらに,0 を入力したときは終了するようにしなさい.

例えば,10,20,63,0 と入力すると,このように表示されます.

「10 30 93 」

■問題6-7

入力した5個の0か1の数の中に1と0,どちらが多いかを判定するプログラムを作りなさい.

■問題6-8

入力した数が素数かどうかを判定するプログラムを作れ.

(ヒント:ある数 $x$ が素数ならば,$2$ 以上 $x$ 未満の数で,$x$ を割り切るものがない. そこで,$2$ から $x-1$ までのループを作り,それぞれで $x$ を割った余りが $0$ になるかどうか判定し,$0$ になったらフラグ変数にそのことを記録する.)

■問題6-9

問題6-8のプログラムを使って,2から入力した数 $n$ までの素数を表示するプログラムを作りなさい.

■問題6-10

5個の数を入力し,「前回と同じ数を入力した回数」を勘定するプログラムを作りなさい.例えば,2,2,4,4,4と入力すると,3回と表示します.

■問題6-11

例題6-6でcontinueの代わりにbreakを入れるとどうなるか、確認しなさい。