---
# System prepended metadata

title: 'wk06_1012_loop while break continue '
tags: [python]

---

# wk06_1012_loop while break continue _陳姿頴
## 課程目標

1. break 命令
    - 加入if判斷，跳出for loop且不用繼續執行
2. continue 命令
    - 加入if判斷，排除特定值後並繼續執行
3. while 迴圈


## [inclass practice]


```python
#去除5的倍數
n = int(input("enter n "))

for i in range (1, n+1):
    if i % 5 == 0:
        continue
    print(i)
```

    enter n 1
    1
    


```python
#遇到9就停止
n = int(input("enter n "))

for i in range (1, n+1):
    if i == 9:
        break
    print(i)
```

    enter n 1
    1
    


```python
#最小公倍數(i)
a = int(input("enter a "))
b = int(input("enter b "))

maxno = a * b
for i in range(1, maxno + 1 ):
    if i % a == 0 and i % b == 0:
        break

print(a, b, i)
```

    enter a 1
    enter b 1
    1 1 1
    


```python
#求任意數的階層
num = int(input("enter a number"))

ans = 1
n = 0

while n < num:
    n = n + 1
    ans = ans * n

print(num,"! =", ans)
```

    enter a number8
    8 ! = 40320
    


實作5:
一個正整數除了1和自己外，無法再被其他數整除，這個數就是質數。
請輸入一正整數，列出此數的所有正因數，並判斷使數字是否為質數



```python
n = int(input("enter n "))
p = 1
counter = 0
while p <= n:
    if n % p ==0:
        counter = counter + 1
    p = p + 1
    
if counter > 2:
    ans = "合數"
else:
    ans = "質數"
        
print(n,ans,"有",counter,"因數")
```

    enter n 157
    157 質數 有 2 因數
    

### {補充 while 練習}
1. 猜數字遊戲：寫一個程式，隨機選擇一個1到100的數字，然後要求玩家通過輸入猜測該數字，直到猜對為止。使用while迴圈來實現，並在玩家猜對時結束遊戲。


```python
#import random
# 生成隨機數字
#target_number = random.randint(1, 100)

target_number = 26
guess = None    #None做比較運算不會有問題
attempts = 0

while guess != target_number:
    guess = int(input("請猜一個1到100的數字："))
    attempts += 1

    if guess < target_number:
        print("太低了！再猜一次。")
    elif guess > target_number:
        print("太高了！再猜一次。")

print(f"恭喜！你猜對了，答案是{target_number}。你總共猜了{attempts}次。")
```

    請猜一個1到100的數字：26
    恭喜！你猜對了，答案是26。你總共猜了1次。
    

2. 使用者輸入：寫一個程式，要求使用者輸入一個整數，然後使用while迴圈，只有當輸入的數字是正整數時，才停止請求輸入。如果輸入不是正整數，則繼續要求輸入，直到收到正確的輸入。


```python
user_input = None

while not user_input:
    user_input = input("請輸入一個正整數：")
    if user_input.isdigit():     #isdigit:檢查屬性是否正確
        user_input = int(user_input)
    else:
        user_input = None
        print("請輸入正確的整數。")

print(f"您輸入了正整數：{user_input}")
```

3. 倒數計時器：寫一個程式，請求使用者輸入一個正整數作為倒數計時的秒數，然後使用while迴圈從輸入的秒數倒數到0。在每個秒數的間隔打印出剩餘的秒數。


```python
import time

countdown = int(input("請輸入倒數的秒數："))

while countdown > 0:      
    print(countdown)
    time.sleep(1)
    countdown -= 1    

print("時間到！")
```

    請輸入倒數的秒數：5
    5
    4
    3
    2
    1
    時間到！
    

4. 累積加法：寫一個程式，要求使用者不斷輸入整數，並使用while迴圈計算這些整數的總和。當使用者輸入0時，停止接受輸入並印出總和。


```python
total = 0

while True:         #True:判斷之後的結果
    num = int(input("請輸入一個整數（輸入0結束）："))
    if num == 0:
        break       #結束
    total += num

print(f"總和：{total}")
```

    請輸入一個整數（輸入0結束）：12
    請輸入一個整數（輸入0結束）：0
    總和：12
    

5. 數字猜謎：寫一個程式，在1到10之間選擇一個隨機數字，然後要求玩家通過輸入猜測該數字。使用while迴圈來實現，並提供猜測是太高還是太低的提示，直到猜對為止。


```python
import random

# 生成隨機數字
target_number = random.randint(1, 10)

guess = None

while guess != target_number:
    guess = int(input("請猜一個1到10的數字："))

    if guess < target_number:
        print("太低了！再猜一次。")
    elif guess > target_number:
        print("太高了！再猜一次。")

print(f"恭喜！你猜對了，答案是{target_number}。")
```

    請猜一個1到10的數字：10
    太高了！再猜一次。
    請猜一個1到10的數字：5
    太高了！再猜一次。
    請猜一個1到10的數字：2
    恭喜！你猜對了，答案是2。
    

## [afterclass practice]

1. 複習ch03、ch04 
2. 教學影音 lesson 7、9

## [selfpractice]
<pre>
定義:
1. None:
    - 為特殊空值，可將None賦值給任何變量
    - 數據類型:NoneType
    - 不等於空字符串、空列表、0
2. NULL:
    - 一種類型
    - 沒有存儲值
3. NaN:
    - Not A Number
    - 缺失值(甚麼值都沒有)
<pre/>
