ねらい: for文による繰り返しに慣れ,簡単な計算を行う.
教科書 p. 118 にある納豆購入金額に関するリスト
list_tohoku = [5349, 5478, 5344, 4644, 4968, 6259]
リストの全ての数値を表示せよ.ただし,単位「円」を数値の末尾に付加すること.
変数の値を表示する際には,Python 3.6から追加されたf文字列の使用を推奨します.
f文字列とは, 文字列の直前(''や""の前です.文字列の中ではない)にfを付けることによって,文字列中の{...}で囲まれた箇所を,そのまま出力するのではなく,{...}内の変数の値を出力するようになる機能のことです. インタラクティブシェルで以下のようにf文字列の挙動を確認し,本課題に応用してください.
>>> i = 10
>>> print(f'{i}')
>>> print(f'i = {i}')
金額を大きい順に表示せよ.
本項目はリスト型を利用する方法の復習です.
リストの項目を降順に並べ替える方法が不確かな場合,過去の課題を確認した上で,インタラクティブシェルで以下を試し,各メソッドの挙動を理解した上で,本課題に応用してください.
>>> a = [2, 3, 1]
>>> a
>>> a.sort()
>>> a
>>> a.reverse()
>>> a
メソッド sort() には,キーワード引数 reverse=True を与えることによって,逆順に並べ変える機能があります.この機能を使うと,メソッド reverse() を実行する必要がなくなります.
>>> a = [2, 3, 1]
>>> a
>>> a.sort(reverse=True)
>>> a
教科書 p. 121 を参考にして,合計を計算して表示せよ.ただし,合計を保持する変数名を sum_tohoku とせよ.
Pythonには sum() という組み込み関数があるが,学習のため,関数 sum() は使わずに実装せよ.
平均を計算して変数 avg_tohoku に保持し,その値を表示せよ.
本課題の最終的な出力例は以下の通りである.
6259円
5478円
5349円
5344円
4968円
4644円
合計: xxxxx円
平均: xxxx.xxxx円
ねらい: 関数 range() を用いて,一連の数値に対して処理を行う方法を学ぶ.
以下のプログラムは,半径が1から10までの円の面積を求めて表示するプログラムであるが,非常に冗長である.まず一度実行して出力される結果を確かめた後,同一の結果を出力するように,forを用いて書き直せ.
import math
s = math.pi * 1 * 1
print(f'半径1: 面積{s}')
s = math.pi * 2 * 2
print(f'半径2: 面積{s}')
s = math.pi * 3 * 3
print(f'半径3: 面積{s}')
s = math.pi * 4 * 4
print(f'半径4: 面積{s}')
s = math.pi * 5 * 5
print(f'半径5: 面積{s}')
s = math.pi * 6 * 6
print(f'半径6: 面積{s}')
s = math.pi * 7 * 7
print(f'半径7: 面積{s}')
s = math.pi * 8 * 8
print(f'半径8: 面積{s}')
s = math.pi * 9 * 9
print(f'半径9: 面積{s}')
s = math.pi * 10 * 10
print(f'半径10: 面積{s}')
関数 range() を用いると,連番を発生させることができ,これを用いると一定間隔の数値の繰り返しを容易に実現できます.インタラクティブシェルで以下を試してください.
>>> for i in range(5):
>>> print(i)
0
1
2
3
4
なお,for文と共に使う場合,range() (の返値)をリスト型に変換する必要はありません(むしろ,するべきではない).
ねらい: if文の使い方を知る.
以下の手順に従って,(プログラム内で)サイコロを2つ振り,2つの目の数を出力した後,ゾロ目(2つの数が等しい)かどうかを判定し,ゾロ目であれば「ゾロ目です」,そうでなければ「ゾロ目ではありません」と表示するプログラムを作成せよ. プログラムは複数回実行し,ゾロ目の場合とゾロ目でない場合が両方含まれるスクリーンショットを提出せよ.
2つの変数(名前は自分で適当に名付けよ)を用意し,それぞれに1から6の値をランダムに格納する.
a以上b以下の整数値をランダムに発生させるには,random モジュールをインポートし,random.randint(a, b)を使うことができます.教科書 p.129 を参照してください.また,以下を試してください.
>>> import random
>>> random.randint(1, 6)
何回か実行して,所望の範囲の値が得られるか(0が出ない,1が出る,6が出る,7が出ない)を確認してください.
2つの変数の値を表示する.
if 文を用いて2つの変数の値が等しいかどうかを調べ,等しい場合,「ゾロ目です」と表示する.教科書 p.51,教科書 p.124 を参照せよ.
更に else 節を加えて,等しくない場合,「ゾロ目ではありません」と表示する.教科書 p.125 を参照せよ.
出力例:
> python a05_3.py
2つの目: 4,6
ゾロ目ではありません.
> python a05_3.py
2つの目: 4,4
ゾロ目です.
ねらい: 複数の条件を書く.
ある遊園地の入場料は,以下のように設定されている(意味がわからない値段設定だが...).
年齢を入力すると,その人の入場料を表示するプログラムを作成せよ.
3種類の場合分けについては,教科書 p.127 を参照せよ.
キーボードからの入力を変数に代入するには,関数 input() を使います.
>>> a = input()
テスト
>>> a
'テスト'
入力されたものは全て文字列とみなされます.
>>> a = input()
12
>>> a
'12'
>>> type(a)
<class 'str'>
数値として使用するためには,入力が整数の場合は関数 int() を,小数の場合は関数 float() を使って,型を変換します.
>>> a = int(input())
12
>>> a
12
>>> type(a)
<class 'int'>
関数 input() の引数に文字列を与えると,入力を促す際にメッセージとして表示されます. 以下の例では,2行目の 'x = ' が,メッセージとして表示された箇所です.
>>> a = int(input('x = '))
x = 12
>>> a
12
>>> type(a)
<class 'int'>
2つの条件を同時に満たしていることを判定するためには,2つの条件を and で接続します.
例1
x = 1
y = 2
if x > 0 and y > 0:
print('xもyも正')
例2
x = 10
if 5 <= x and x < 15:
print('xは5以上15未満')
例2は,Pythonの場合は以下のように書くこともできる (このように記述できない言語もある).
例2'
x = 10
if 5 <= x < 15:
print('xは5以上15未満')
2つの条件の少なくとも一方が成立していることを判定する場合には,2つの条件を or で接続します.
例3:
x = 1
y = -2
if x > 0 or y > 0:
print('xかyのいずれかは正')
条件が両方成立してもOKです.
例4:
x = 1
y = 2
if x > 0 or y > 0:
print('xかyのいずれかは正')
条件式に関するその他の重要事項:
ねらい: forとifを組み合わせて,条件によって処理を変える方法を学ぶ.
1から100までの整数に対して,以下の条件に基づいた表示を行いたい.
まず,インタラクティブシェルで,以下の計算を行ってみる. n を様々に変えて行い,(a)(b)(c)の各出力が,整数 n の何を取り出すことになっているかを把握する. この結果を提出する必要は無い.
以上ができたら,以下の設問に進む.
各数字について,if文と適切な条件式を用いて3の倍数であるかどうかを判定し,3の倍数のときには数字の代わりに文字列 'AHO' を表示するようにせよ.
2の条件式の部分を拡張し,1の位が3の場合にも,文字列 'AHO' を表示するようにせよ.課題A05_4の複数条件の指定の方法を参考にせよ.
更に,10の位が3の場合にも,文字列 'AHO' を表示するようにせよ.
出力の一部:
1
2
AHO
4
(中略)
98
AHO
100
提出するスクリーンショットは,適切に処理が行われていることがわかればよく,出力の全部(1から100まで)が含まれている必要はない.