Python プログラミング入門 (020) - ループ構造プログラミング (1): for ループ
目次
1. forループの構文
for ループはカウントされたループであり、シーケンスや反復オブジェクト内の要素を列挙したり走査したりするのに適しており、通常、ループの数がわかっている場合に使用されます。for ループの構文形式は次のとおりです。
for 迭代变量 in 对象:
循环体
例証します:
(1) 反復変数: 読み取った値を保存するために使用されます。
(2) オブジェクト: 走査または反復されるオブジェクトは、文字列、リスト、タプルなどの任意の順序付けされたシーケンス オブジェクトにすることができます。
(3) ループ本体: 繰り返し実行する必要があるステートメントのセット。
(4) Python はコードのインデントとコロン (:) を使用してコード レベルを区別します。for ループ式行の終わりのコロンと次の行のインデント (通常、インデント量として 4 つのスペースが使用されます) はコード ブロックの始まりを示し、インデントの終わりはコード ブロックの終わりを示します。 。for ループを使用する場合、コードはインデント規則に従って厳密に記述する必要があります。
例えば:
(1) 文字列内の数字、文字、英語記号などを抽出します。
str1 = "ds3,3jH.iee/我fj*32的&号30U,码河。……H54南"
digit = ""
letter = ""
pun = ""
other = ""
for item in str1:
if ord(item) in range(48,58): # 数字的ASCII码为48-57
digit += item
elif ord(item) in range(65,91) or ord(item) in range(97,123): # 大写字母的ASCII码为65-90,小写字母的ASCII码为97-122
letter += item
elif ord(item) < 128: # 去除数字和字母
pun += item
else: # 其他字符(ASCII码大于127)
other += item
print("数字为:",digit)
print("字母为:",letter)
print("英文字符为:",pun)
print("其他字符:",other)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
数字为: 33323054
字母为: dsjHieefjUH
英文字符为: ,./*&
其他字符: 我的号,码河。……南
(2) トラバースリストデータ
list1 = ["Tom","Jerry","Kate","Black"]
for item in list1:
print(item)
print("="*30)
for item in range(len(list1)):
print(list1[item])
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Tom
Jerry
Kate
Black
==============================
Tom
Jerry
Kate
Black
(3) タプルデータの走査
tuple1 = (["Tom",20],["Jerry",22],["Kate",18],["Black",19])
for item in tuple1:
print("Name:",item[0],"\tAge:",item[1])
print("="*30)
for item in tuple1:
print("姓名:{}\t年龄:{}".format(item[0],item[1]))
print("="*30)
for item in tuple1:
for i in item:
print(i,end="\t")
print()
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Name: Tom Age: 20
Name: Jerry Age: 22
Name: Kate Age: 18
Name: Black Age: 19
==============================
姓名:Tom 年龄:20
姓名:Jerry 年龄:22
姓名:Kate 年龄:18
姓名:Black 年龄:19
==============================
Tom 20
Jerry 22
Kate 18
Black 19
(4) トラバース辞書データ
dict1 = {
"Tom":20,"Jerry":22,"Kate":18,"Black":19}
for key in dict1.keys():
print("Name:{}\tAge:{}".format(key,dict1.get(key)))
print("="*30)
for item in dict1.items():
print("Name:{}\tAge:{}".format(item[0],item[1]))
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Name:Tom Age:20
Name:Jerry Age:22
Name:Kate Age:18
Name:Black Age:19
==============================
Name:Tom Age:20
Name:Jerry Age:22
Name:Kate Age:18
Name:Black Age:19
2. for ループで range() 関数を使用します。
for ループは、変数を反復処理することにより、オブジェクト内の各要素を反復処理します。インデックスによってオブジェクトを反復処理する場合、連続する一連の整数を生成するために range() 関数がよく使用されます。range() 関数の形式は次のとおりです。
range([start,] end[, step])
说明:
(1)start:指定计数的起始值。如果省略,则从0开始计数。
(2)end:指定计数的结束值,该参数不能省略,当函数中只有一个参数时即表示技术的结束值。生成的序列不包括结束值。比如 range(5),生成的序列为[0-4],range(1,11),生成的序列为[1-10]。
(3)step:指定步长,即两个数之间的间隔,如果省略则步长为1。
(4)在使用 range() 函数时,如果只有一个参数,则指定的是end;如果有两个参数,则指定的是start和end;指定三个参数时,第一个参数为start,第二个参数为end,第三个参数为step。
例えば:
(1) リスト要素を横断する
list1 = ["Tom","Jerry","Kate","Black"]
for i in list1:
print("{}".format(i),end="\t")
print()
print("="*30)
for i in range(len(list1)):
print("{}".format(list1[i]),end="\t")
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
Tom Jerry Kate Black
==============================
Tom Jerry Kate Black
(2) 5を計算してみよう! (1*2*3*4*5)
f = 1
for i in range(1,6):
f *= i
print("5!结果为:",f)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
5!结果为: 120
(3) 1 ~ 100 のすべての奇数の合計を計算します。
sum1 = 0
for i in range(1,101,2):
sum1 += i
print("1-100的和:",sum1)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
1-100的和: 2500
3. for…elseステートメント
for ループでは、else 分岐ステートメントを追加できます。else ステートメントは、for ループステートメントが正常に実行された後にのみ実行されます。for ループ ステートメント内で Break または exit(0) ステートメントが発生し、終了条件が満たされた場合、else ステートメントは実行されません。for ... else ステートメントの構文形式は次のとおりです。
for <迭代变量> in <遍历结构>:
语句块1
else:
语句块2
注: else に続くステートメントは、for ループの実行が完了した後に実行されます。
例えば:
(1) else文が実行される
コードは以下のように表示されます。
num = 97
for i in range(2,int(num**0.5) + 1):
if num % i == 0:
break
else:
print("{}是一个素数。".format(num))
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
97是一个素数。
(2)else文は実行されません
num = 95
for i in range(2,int(num**0.5) + 1):
if num % i == 0:
print("{}不是一个素数。".format(num))
break
else:
print("{}是一个素数。".format(num))
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
95不是一个素数。
4.表現のために
for 式は、反復可能なオブジェクトを使用して新しいシーケンスを作成できます。for 式はシーケンス再帰とも呼ばれます。構文形式は次のとおりです。
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
例えば:
(1) 2~100の素数を探す
list1 = [2]
for i in range(3,101):
if 0 not in [i%j for j in range(2,int(i**0.5) + 1)]:
list1.append(i)
print(list1)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
(2) プロセスリストデータ
list1 = ["Tom","Jerry","Kate","Black"]
list2 = ["Name:" + item for item in list1]
print(list2)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
['Name:Tom', 'Name:Jerry', 'Name:Kate', 'Name:Black']
(3) zip()関数を使って複数のリストを結合する
list1 = ["Tom","Jerry","Kate","Black"]
list2 = [21,20,18,19]
list3 = [name + ":" + str(age) for name,age in zip(list1,list2)]
print(list3)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
['Tom:21', 'Jerry:20', 'Kate:18', 'Black:19']
(4) for式で使用する条件
list1=[x ** 2 for x in range(1,10) if x % 2 == 0] # 返回1-9之间偶数的平方组成的列表
num = [2*x if x>=2 and x<=5 else x**2 for x in range(1,11)] # 如果x的值介于2和5之间返回 2*x,否则返回 x**2
print(list1)
print(num)
程序的运行结果为:
===================== RESTART: C:\Python\Python38\First.py =====================
[4, 16, 36, 64]
[1, 4, 6, 8, 10, 36, 49, 64, 81, 100]