CS50P 2_Loop

poetries = ["寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。", 
            "空山不見人,但聞人語響。返景入深林,復照青苔上。",
            "床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。"]

print(poetries[0])
print(poetries[1])
print(poetries[2])
寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。
空山不見人,但聞人語響。返景入深林,復照青苔上。
床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。
poetries = ["寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。", 
            "空山不見人,但聞人語響。返景入深林,復照青苔上。",
            "床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。"]

for i in range(0,3):
    print(poetries[i])
寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。
空山不見人,但聞人語響。返景入深林,復照青苔上。
床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。
poetries = ["寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。", 
            "空山不見人,但聞人語響。返景入深林,復照青苔上。",
            "床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。"]

for poetry in poetries:
    print(poetry)
寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。
空山不見人,但聞人語響。返景入深林,復照青苔上。
床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉。

Loop 迴圈

重複執行某些相同的步驟

固定次數 for loop

指定條件 不固定次數 while loop

For Loop Structure

for _ in sequence:
    do repeat things
    ...

_ indicates we're not interested in the loop variable. It's a common convention when the value is ignored.

for _ in range(5):
  print("***")
***
***
***
***
***

For Loop Structure

for i in sequence:
    do repeat things
    ...

Using "i" means we are actually utilizing the loop variable within the loop.

for i in range(1, 6):
  print("*"*i)
*
**
***
****
*****

range() function

The range() function can create a sequence of integers.

range(start value, end value (excluding), increment (decrement) value)

range(end value)

range(start value, end value)

range(start value, end value, increment (decrement) value)

range() example

for i in range(10):      # 產生從0到9的整數序列
    print(i, end=" ")
print("\n=========================")
for i in range(0, 10):   # 產生從0到9的整數序列
    print(i, end=" ")
print("\n=========================")    
for i in range(1, 10, 2): # 產生從1到9的奇數序列
    print(i, end=" ")    
print("\n=========================")
for i in range(20, 0, -2): #產生從20到2的偶數序列
    print(i, end=" ")
0 1 2 3 4 5 6 7 8 9 
=========================
0 1 2 3 4 5 6 7 8 9 
=========================
1 3 5 7 9 
=========================
20 18 16 14 12 10 8 6 4 2

Nested for loop (巢狀 for-loop)

Multiple layers of for loops.

for i in sequece:
    do repeat things
    for j in sequece:
        do repeat things
...    

For each iteration of the outer loop i,
the inner loop j executes the entire loop.

Multiplication Table of 9

for i in range(1, 10):
    print(f" i = {i}", end = ' ')
    for j in range(1, 10):
        if j == 9:
            print(f"{i*j:5}") # j == 9時,換行
        else:
            print(f"{i*j:5}", end = '') # j < 9時,不換行
i = 1     1    2    3    4    5    6    7    8    9
i = 2     2    4    6    8   10   12   14   16   18
i = 3     3    6    9   12   15   18   21   24   27
i = 4     4    8   12   16   20   24   28   32   36
i = 5     5   10   15   20   25   30   35   40   45
i = 6     6   12   18   24   30   36   42   48   54
i = 7     7   14   21   28   35   42   49   56   63
i = 8     8   16   24   32   40   48   56   64   72
i = 9     9   18   27   36   45   54   63   72   81

break 和 continue

強制中斷的方式來結束迴圈

break:

中斷迴圈的執行並跳脫迴圈結構,繼續執行迴圈外的敘述。

continue:

不會讓迴圈結束;只跳過迴圈內 continue 後面的剩餘敘述,接著繼續執行下一次的迴圈運作。

break

for i in sequence:
    # statements inside for-loop
    if condition:
        break  # Exit the loop
    # statements inside for-loop (after the break)
# statements outside for-loop


for i in "Hey Jude":
    if i == "u":
        break
    print(i, end = "")
Hey J

break

Continue

for i in sequence:
    # statements inside for-loop
    if condition:
        continue  # Skip the rest of this iteration and
                  # jump to the next iteration
    # statements inside for-loop (after the continue)
# statements outside for-loop


for i in "Hey Jude":
    if i == "u":
        continue
    print(i, end = "")
Hey Jde

Continue

while loops

無法預知迴圈數 直到出現指定的特殊狀況時才停止

當 ... 的時候 直到 ...

while condition:
    do condition True things

while loop check 成績

score = int(input("輸入學生成績:"))

while score < 0 or score > 100:
    score = int(input("成績錯誤,請重新輸入:"))

print("學生成績 : ", score)    
    
輸入學生成績: -120
成績錯誤,請重新輸入: 120
成績錯誤,請重新輸入: 50
學生成績 :  50

無窮迴圈

一直持續下去的循環

while True:
    do something
while True:
    print('How is your day?')
    your_reply = input()
    if your_reply == 'quit':
        break
print('good bye')

while loop check username & password

while True:
    print('Account name:')
    name = input()
    if name != 'success':
        continue
    print('Password, please:')
    password = input()
    if password == 'selflearning':
        break
print('Welcome to Self Learning Success!')

For loop Access Dictionary

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for key in knights:
  print(f" key: {key}")
 key: gallahad
 key: robin

For loop Access Dictionary

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for key in knights:
    print(f"key: {key}\nknights{[key]} : {knights[key]}")
key: gallahad
knights['gallahad'] : the pure
key: robin
knights['robin'] : the brave

For loop Access Dictionary

knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print(f"knights[{k}] : {v}")
knights[gallahad] : the pure
knights[robin] : the brave

enumerate() function

s = ['tic', 'tac', 'toe']
print(f"list is {s}\n")
for i, v in enumerate(s):
    print(f"index i = {i}, value v = {v}")
list is ['tic', 'tac', 'toe']

index i = 0, value v = tic
index i = 1, value v = tac
index i = 2, value v = toe