第 4 章: Python でのプログラムの構成
1. プログラムの組織構造
1996 年、コンピュータ科学者は、単純であろうと複雑であろうと、どのアルゴリズムでもシーケンス構造、選択構造、およびループ構造(3 つの基本構造を組み合わせたもの)を持つことができるという事実を証明しました。
2. シーケンシャル構造
- 配列構造とは何ですか
- プログラムは、プログラムの最後まで、途中での判断やジャンプを行わずに、上から下にコードを順番に実行します。
- シーケンス構造フローチャート
-
コードデモ
- コードの書き方
"""把大象当冰箱一共需要几步""" print('---------程序开始------------') print('1.把冰箱打开') print('2.把大象放进去') print('3.关闭冰箱门') print('---------程序结束------------')
- 結果分析
---------程序开始------------ 1.把冰箱打开 2.把大象放进去 3.关闭冰箱门 ---------程序结束------------
3. オブジェクトのブール値
Python ではすべてがオブジェクトであり、すべてのオブジェクトはブール値を持ちます。
-
オブジェクトのブール値を取得します
- 組み込み関数bool() を使用する
-
次のオブジェクトのブール値はFalseで、他のオブジェクトのブール値は True です。
- 間違い
- 値0
- なし
- 空の文字列
- 空のリスト
- 空のタプル
- 空の辞書
- 空のコレクション
-
コードデモ
- コードの書き方
# 测试对象的bool print("以下对象的布尔值为False") print(bool(False)) # False print(bool(0)) # False print(bool(0.0)) # False print(bool(None)) # False print(bool("")) # False 空字符串 print(bool([])) # False 空列表 print(bool(list())) # False 空列表 print(bool(())) # False 空元组 print(bool(tuple())) # False 空元组 print(bool({ })) # False 空字典 print(bool(dict())) # False 空字典 print(bool(set())) # False 空集合 print("其他对象的布尔值为True")
4. 分岐構造(構造を選択)
- 選択構造とは何ですか
- プログラムは判定条件に応じていくつかのコードを選択的に実行し、どのような条件で何をすべきかをコンピュータに明確に知らせます。
4.1 単一分岐 if 構造
- 中国語の意味
- もしそうなら…
- 雨が降ったら傘を持ってください
- もしそうなら…
- 文法構造
if 条件表达式:
条件执行体
- フローチャート
-
コードデモ: 出金操作
- コードの書き方
"""取款操作""" money = 1000 # 余额 s = int(input("请输入取款金额:")) # 取款金额 # 进行判断,余额是否充足 if money >= s: money = money - s print("取款成功,余额为:", money)
4.2 二重分岐 if...else 構造
- 中国語の意味
- もし...満足できないなら...
- 雨が降っている場合は傘を持ってください、雨が降っていない場合は傘を持ってはいけません
- もし...満足できないなら...
- 文法構造
if 条件表达式:
条件执行体1
else
条件执行体2
- フローチャート
-
コードデモ: 出金操作
- コードの書き方
"从键盘录入一个数,编写程序需让计算机判断是奇数还是偶数" num = int(input("请输入一个整数:")) # 条件判断 if num % 2 == 0: print(num, "为偶数") else: print(num, "为奇数")
4.3 複数分岐の if...elif...else 構造
- 文法構造
if 条件表达式1:
条件执行体1
elif 条件表达式2:
条件执行体2
....
elif 条件表示式N:
条件执行体N
[else:]
条件执行体N+1
- フローチャート
- コードデモ
"""从键盘录入一个整数升级,并判断
90-100 A
80-89 B
70-79 C
60-69 D
0-59 E
小于0或者大于100的数位非法数据(不是成绩的有效范围)"""
score = int(input("请输入一个成绩:"))
if 90 <= score <= 100:
print("A")
elif 80 <= score <= 89:
print("B")
elif 70 <= score <= 79:
print("C")
elif 60 <= score <= 69:
print("D")
elif 0 <= score <= 59:
print("E")
else:
print("非法数据")
4.4 if 文の入れ子
- 文法構造
if 条件表达式1:
if 内层条件表达式:
内层条件执行体1
else 内层条件执行体2:
else:
条件执行体
- フローチャート
- コードデモ
answer = input("您是会员吗?Y或N")
money = float(input("请输入你的购物金额:"))
if answer == "Y":
print("会员")
if money >= 200:
print("付款金额为:",money*0.8)
elif money>=100:
print("付款金额为:", money * 0.9)
else:
print("不打折,付款余额为:、")
else:
print("非会员")
4.5 条件式
- 本質: if…else…の略語
- 文法構造
x if 判断条件 else y
- アルゴリズム
- 判定条件のブール値がTrueの場合、条件式の戻り値はx、それ以外の場合、条件式の戻り値は False になります。
- コードデモ
"""从键盘录入两个整数,并判断大小"""
num_a = int(input("请输入第一个整数:"))
num_b = int(input("请输入第二个整数:"))
# 比较大小
"""if num_a >= num_b:
print(num_a, "大于等于", num_b)
else:
print(num_a, "小于", num_b)"""
print("使用条件表达式进入比较")
print(str(num_a) + "大于等于" + str(num_b) if num_a >= num_b else str(num_a) + "小于" + str(num_b))
4.6 pass ステートメント
-
pass ステートメントとは何ですか
- このステートメントは何もしません。構文的にステートメントが必要な場所にある単なるプレースホルダーです。
-
いつ使用するか
- コードの書き方を考える前に、まず文法構造を構築するとき
-
どのステートメントを使用できるか
- if ステートメントの条件付き実行本体
- for-in ステートメントのループ本体
- 関数定義時の関数本体
-
コードデモ
answer = input("您是会员吗?:y/n")
if answer == "y":
pass
else:
pass
# 代码不会报错
5. サイクル構造
5.1 range() 関数の使用
-
一連の整数を生成するために使用されます
-
range() オブジェクトを作成する3 つの方法
パラメータは左が閉じ、右が開いています
- range(stop) : ステップ サイズ 1 で [0,stop] の間の整数のシーケンスを作成します。
- range(start,stop) : [start,stop] の間にステップ サイズ 1 の整数のシーケンスを作成します。
- range(start,stop,step) : [start,stop,stop] の間のステップ サイズ step で整数のシーケンスを作成します。
-
range関数の戻り値はイテレータオブジェクトです
-
レンジタイプの利点:
- range オブジェクトによって表される整数シーケンスがどれだけ長くても、すべての range オブジェクトが占めるメモリ空間は同じです。これは、start
、stop、step のみを保存する必要があり、range オブジェクトが使用される場合にのみ、関連する要素が格納されるためです。シーケンスが計算される
- range オブジェクトによって表される整数シーケンスがどれだけ長くても、すべての range オブジェクトが占めるメモリ空間は同じです。これは、start
-
inとnot in ** が存在するかどうかを決定します (存在しません) ** 整数シーケンス内の指定された整数
-
コードデモ
# range创建的三种方式
"""第一种创建方式,只有一个参数"""
r = range(10) # 默认从零开始,步长默认为1
print(r)
print(list(r))
"""第二种方式,给了两个参数"""
r2 = range(1, 10)
print(list(r2))
"""第三种方式,给了三个参数"""
r3 = range(1, 10, 2)
print(list(r3))
"""in 与 not in
判断指定的整数在不在序列中"""
print(10 in r3)
print(10 not in r3)
5.2 while ループ
- 文法構造
while 条件表达式:
条件执行体(循环体)
- フローチャート
- 選択構造のifとループ構造のwhileの違い
- if は 1 回判定し、条件は True で 1 回実行します
- while は N+1 回判定し、条件は True で N 回実行します
- whileループ(4段ループ方式)の実行フローは
初期化変数、条件判定変数、変更変数は同じです- 変数の初期化
- 条件判断
- 条件付き実行本体(ループ本体)
- 変数を変更する
- コードデモ
"""计算0到4的累加和"""
# 初始化变量
a = 0
sum = 0
# 条件判断
while a <= 4:
# 条件执行体
sum += a
# 改变变量
a += 1
print("和为:", sum)
- 練習問題:1から100までの偶数の和を計算してください
"""代码1"""
# 初始化变量
a = 1
sum = 0
# 条件判断
while a <= 100:
# 条件执行体
if not bool(a % 2) :
sum += a
# 改变变量
a += 1
print("1到100之间的偶数和为:", sum)
"""代码2"""
# 初始化变量
a = 1
sum = 0
# 条件判断
while a <= 100:
# 条件执行体
if a % 2 == 0:
sum += a
# 改变变量
a += 1
print("1到100之间的偶数和为:", sum)
5.3 for-inループ
- for-on ループの概念
- in 式は (文字列、シーケンス) から値を順番に取得します。トラバーサルとも呼ばれます。
- for-in によってトラバースされるオブジェクトは反復可能なオブジェクトである必要があります
- 文法構造
for 自定义的变量 in 可迭代对象:
循环体
- フローチャート
- ループ本体内のカスタム変数にアクセスする必要はなく、カスタム変数はアンダースコアで置き換えることができます。
- コードデモ
for item in "Python":
print(item)
for i in range(0, 10):
print(i)
# 如果在循环体中不需要使用到自定义变量,可将自定义变量写为_
for _ in range(5):
print("人生苦短,我用Python") # Python循环5次
"""使用for in 计算1到100之间的偶数和"""
sum = 0
for item in range(1, 101):
if item % 2 == 0:
sum += item
print("1到100的偶数和为:", sum)
- 演習: 水仙の数を 1 ~ 999 の間で出力します。
"""输出100到999之间的水仙花数
水仙花数,举例
153=3*3*3+5*5*5+1*1*1"""
for item in range(100, 1000):
ge = item % 10
shi = item // 10 % 10
bai = item // 100
if item == ge ** 3 + bai ** 3 + shi ** 3:
print(item)
5.4 Break、Continue、および else ステートメント
5.4.1 ブレーク文
- ループ構造を終了するために使用され、通常は分岐構造 if とともに使用されます。
- コードデモ
"""从键盘录入密码,最多录入三次,如果正确就结束循环"""
for item in range(1, 4):
pwd = input("请输入密码:")
if pwd == "8888":
break
else:
print("密码不正确")
5.4.2 continue ステートメント
- 現在のループを終了して次のループに入るために使用され、通常は分岐構造内の if と一緒に使用されます。
- コードデモ
"""输出1到50之前所有的倍数"""
for item in range(1, 51):
if item % 5 != 0:
continue
print(item)
5.4.3 else 文
for item in range(3):
pwd = input("请输入密码:")
if pwd == "9999":
print("密码正确")
else:
print("密码不正确")
else:
print("对不起,三次机会已经用完")
5.5 入れ子になったループ
- ネストされたループ
- 別の完全なループ構造がループ構造内にネストされており、内側のループが外側のループのループ本体として実行されます。
- コードデモ
"""输出一个三行四列的矩形"""
for i in range(1,4):
for j in range(1,5):
print("*",end="\t")
print()
"""输出一个9行的直角三角形"""
for i in range(1,10):
for j in range(1,i):
print("*",end="\t")
print()
- 二重ループで中断して続行する
for i in range(1, 5):
for j in range(1, 11):
if j % 2 == 0:
continue
print(j,end="\t")
print()