A05 [授業内]

A05_1 (スクリプト)

ねらい: for文による繰り返しに慣れ,簡単な計算を行う.

教科書 p. 118 にある納豆購入金額に関するリスト

list_tohoku = [5349, 5478, 5344, 4644, 4968, 6259]
に対して,以下の処理を順に追加し,最終的に平均金額を表示せよ.

  1. リストの全ての数値を表示せよ.ただし,単位「円」を数値の末尾に付加すること.

    変数の値を表示する際には,Python 3.6から追加されたf文字列の使用を推奨する.

    f文字列とは, 文字列の直前(''や""の前.文字列の中ではない)にfを付けることによって,文字列中の{...}で囲まれた箇所を,そのまま出力するのではなく,{...}内の変数や式の値を出力する機能である. インタラクティブシェルで以下のようにf文字列の挙動を確認し,本課題に応用せよ.

    >>> i = 10
    >>> print(f'{i}')
    >>> print(f'i = {i}')
    
  2. 金額を大きい順に表示せよ.

リストの項目を並べ替える方法が不確かな場合,過去の課題を確認したうえで,インタラクティブシェルで以下を試し,各メソッドの挙動を理解した上で,本課題に応用せよ.なお,他の方法もある.
```
>>> a = [2, 3, 1]
>>> a
>>> a.sort()
>>> a
>>> a.reverse()
>>> a
```
  1. 教科書 p. 121 を参考にして,合計を計算して表示せよ.ただし,合計を保持する変数名を sum_tohoku とせよ.

    Pythonには sum() という組み込み関数があるが,学習のため,関数 sum() は使わずに実装せよ.

  2. 平均を計算して変数 avg_tohoku に保持し,その値を表示せよ.

本課題の最終的な出力例は以下の通りである.

6259円
5478円
5349円
5344円
4968円
4644円
合計: xxxxx円
平均: xxxx.xxxx円
(xxxで示された箇所には,計算結果の数値が入る)


A05_2 (スクリプト)

ねらい: 関数 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() を用いた繰り返し

range() を用いると,連番を発生させることができ,これを用いると一定間隔の数値の繰り返しを容易に実現できる.インタラクティブシェルで以下を試してみよ.

>>> for i in range(5):
>>>   print(i)
出力:
0
1
2
3
4

なお,for文と共に使う場合,range() (の返値)をリスト型に変換するべきではない.詳しくは python range型 を調べてみよ.


A05_3 (スクリプト)

ねらい: if文の使い方を知る.

以下の手順に従って,(プログラム内で)サイコロを2つ振り,2つの目の数を出力した後,ゾロ目(2つの数が等しい)かどうかを判定し,ゾロ目であれば「ゾロ目です」,そうでなければ「ゾロ目ではありません」と表示するプログラムを作成せよ. プログラムは複数回実行し,ゾロ目の場合とゾロ目でない場合が両方含まれるスクリーンショットを提出せよ.

  1. 2つの変数(名前は自分で適当に名付けよ)を用意し,それぞれに1から6の値をランダムに格納する.

    a以上b以下のランダムな整数値の発生は,random モジュールをインポートし,random.randint(a, b)を使うと容易である.教科書 p.129 を参照し,以下を試してみよ.

    >>> import random
    >>> random.randint(1, 6)
    

    何回か実行して,所望の範囲の値が得られるか(0が出ない,1が出る,6が出る,7が出ない)を確認せよ.

  2. 2つの変数の値を表示する.

  3. 2つの変数の値が等しいかどうかを調べ,等しい場合「ゾロ目です」,等しくない場合「ゾロ目ではありません」と表示する.教科書 p.51, 124, 125 を参照せよ.

出力例:

> python a05_3.py
2つの目: 4,6
ゾロ目ではありません.

> python a05_3.py
2つの目: 4,4
ゾロ目です.


A05_4 (スクリプト)

ねらい: 複数の条件を書く.

ある遊園地の入場料は,以下のように設定されている(意味がわからない値段設定だが...).

年齢を入力すると,その人の入場料を表示するプログラムを作成せよ.

3種類の場合分けについては,教科書 p.127 を参照せよ.

※キーボードからの入力を変数に代入する

キーボードからの入力を変数に代入するには,関数 input() を使う.

>>> a = input()
テスト
>>> a
'テスト'

入力されたものは全て文字列とみなされることに注意せよ.

>>> a = input()
12
>>> a
'12'
>>> type(a)
<class 'str'>

数値として使用するためには,型の変換が必要である.以下の例を参考にせよ.

>>> 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'>

※複数の条件 and / or

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のいずれかは正')

条件が両方成立してもよい.

例4:

x = 1
y = 2
if x > 0 or y > 0:
    print('xかyのいずれかは正')

条件式に関するその他の重要事項:


A05_5 (スクリプト)

ねらい: forとifを組み合わせて,条件によって処理を変える方法を学ぶ.

1から100までの整数に対して,以下の条件に基づいた表示を行いたい.

準備

まず,インタラクティブシェルで,以下の計算を行ってみる. n を様々に変えて行い,(a)(b)(c)の各出力が,整数 n の何を取り出すことになっているかを把握する. この結果を提出する必要は無い.

以上ができたら,以下の設問に進む.

  1. まず,1から100までの数字を順に表示するプログラムを作成せよ.課題A05_2を参考にせよ.
  1. 各数字について,if文と適切な条件式を用いて3の倍数であるかどうかを判定し,3の倍数のときには数字の代わりに文字列 'AHO' を表示するようにせよ.

  2. 2の条件式の部分を拡張し,1の位が3の場合にも,文字列 'AHO' を表示するようにせよ.課題A05_4の複数条件の指定の方法を参考にせよ.

  3. 更に,10の位が3の場合にも,文字列 'AHO' を表示するようにせよ.

出力の一部:

1
2
AHO
4
(中略)
98
AHO
100

提出するスクリーンショットは,適切に処理が行われていることがわかればよく,出力の全部(1から100まで)が含まれている必要はない.