第六章:條件控制語句練習

1.水仙花數

練習1 求1000以內所有的水仙花數

水仙花數 指的是一個n位數(n >= 3),它的每個位數上的數字的n次冪之和等於它本身

13 + 53 + 3**3 = 153


# 先獲取1000以內所有的三位數
i = 100

while i < 1000:
    #假設 i 的百位數是a ,十位數是 b ,個位數是 c

    #求百位數
    a = i // 100
    # 求十位數
    b = i // 10 % 10
    # b = (i - a*100) // 10
    # 求個位數
    c = i % 10
    # print(a)
    # print(i)
    # 判斷 i 是否是水仙花數
    if a**3 + b**3 + c**3 == i:
        print(i)
    i += 1
>>>153
370
371
407

2.質數練習1

練習2 獲取用戶輸入的任意數,判斷其是否是質數

什麼是質數 只能被1和它本身整除的數就是質數 2 3 5 7 11 13 17 19


# 獲取用戶輸入的任意數

num = int(input('輸入一個任意大於1的整數:'))

# 定義一個變量
i = 2
flag = True
# 創建一個標記  用來記錄num是否是質數  默認是質數
while i < num:
    # print(i)
    #如果這個條件成立,則證明num一定不是質數
    if num % i == 0:
        # 一旦進入這個循環,則證明num不是質數
        flag = False
        # print(num)
    i += 1
if flag:
    print(num,'是質數')
else:
    print(num,'不是質數')

3.循環嵌套

 在控制檯輸入如下圖形
# *****
# *****
# *****
# *****

# print('*****')
# print('*****')
# print('*****')
# print('*****')
# print('*****')
>>>
*****
*****
*****
*****
*****


# 控制圖形的高度
# i = 0
#
# while i < 5:
#
#     print('*****')
#     i += 1
>>>
*****
*****
*****
*****
*****

外層循環控制的是高度(列),內層循環控制的是寬度(行)

i = 0
#
# while i < 5:
#     print('*',end='')
#     print('*',end='')
#     print('*',end='')
#     print('*',end='')
#     print('*',end='')
#     print()
#     i += 1
>>>*****
*****
*****
*****
*****
----------------------------------------------------------------------------------------------------------------------------
# 外層循環控制的是高度(列),內層循環控制的是寬度(行)

# 外層循環控制圖形的高度
i = 0

while i < 5:
    # 內層循環控制的是圖形的寬度
    j = 0
    while j < 5:
        print('*',end='')   # end=' '表示:防止換行
        j += 1

    print()
    i += 1
    >>>
 *****
*****
*****
*****
*****
>>>過程實現原理如下圖所示


print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print('*', end='')
print()
>>>
*****
*****
*****
*****
*****

練習1:打印出如下圖形

*
**
***
****
*****

# *       i = 0 j < 1  j < i + 1
# **      i = 1 j < 2  j < i + 1
# ***     i = 2 j < 3  j < i + 1
# ****    i = 3 j < 4  j < i + 1
# *****   i = 4 j < 5  j < i + 1

i = 0
while i < 5:

    j = 0
    while j < i + 1:
        print('*',end='')
        j += 1

    print()
    i += 1
 >>>
*
**
***
****
***** 

練習2:打印出如下圖形

*****
****
***
**
*
*****    i = 0  j < 5  j < 5 - i    j < 5 = 5 - i = 5 - 0 
****     i = 1  j < 4  j < 5- i     j < 4 = 5 - i = 5 - 1
***      i = 2  j < 3  j < 5- i     j < 3 = 5 - i = 5 - 2 
**       i = 3  j < 2  j < 5- i     j < 2 = 5 - i = 5 - 3 
*        i = 4  j < 1  j < 5- i     j < 1 = 5 - i = 5 - 4


i = 0
while i < 5:

    j = 0
    while j < 5 - i:
        print('*',end='')
        j += 1

    print()
    i += 1
>>>
*****
****
***
**
*

4. 99乘法表

練習3: 在控制檯輸出99乘法表

11=1
1
2=2 22=4
1
3=3 23=6 33=9
。。。。。。。 9*9=81
方案一:


# 創建一個外層循環來控制高度
i = 0

while i < 9:
    i += 1
    # 創建一個內層循環來控制寬度
    j = 0
    while j < i:
        j += 1
        print(f'{j}*{i}={j*i}',end='  ')

    print()
》》》
1*1=1  
1*2=2  2*2=4  
1*3=3  2*3=6  3*3=9  
1*4=4  2*4=8  3*4=12  4*4=16  
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  

方案二:

i = 0

while i < 9:
    i += 1

    j = 0
    while j < i:
        j += 1
        print(j,'*',i,'=',i*j,end='   ')

    print()
    》》》
1 * 1 = 1   
1 * 2 = 2   2 * 2 = 4   
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9   
1 * 4 = 4   2 * 4 = 8   3 * 4 = 12   4 * 4 = 16   
1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25   
1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36   
1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49   
1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64   
1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81 

5.continue和break

練習4:猜數字遊戲 隨機1-10個數字,如果猜對正確,如果沒有猜對,錯誤

給用戶9次機會,最終結果要求用戶一次都猜不對
1 2 3 4 5 6 7 8 9 10 猜9次,有9次機會
思路:可以先拿到用戶猜過的數字,我可以隨機拿一個數字,去和用戶猜過的數字做比對,如果這個循環的數字沒有在用戶猜過的數字當中。那麼這個數字就是我們需要的答案

# continue break
# continue 可以用來跳過當次循環
i = 0
while i < 6:
    i += 1

    if i == 2:
        continue
    print(i)
else:
    print('hello')
    》》》
    1
    3
    4
    5
    6
    hello
# break 可以立即退出循環語句,包括else語句
i = 0
while i < 6:
    i += 1

    if i == 2:
        break
    print(i)
else:
    print('hello')
    》》》
    1
import random
# 定義一個列表 目的:用來存儲用戶猜過的數字
list = []
i = 0
while i < 9:

    number = int(input('請輸入任意一個1-10之間的數字:'))
    # 把用戶猜過的數字追加到列表當中
    list.append(number)
    print('對不起,你沒有猜對')

    i += 1

while True:

    number_x = random.randint(1,10)    # 1 <= X <= 10
    if number_x in list:
        continue
    else:
        break
print('正確號碼是:',number_x)
》》》
請輸入任意一個1-10之間的數字:1
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:2
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:3
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:4
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:5
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:6
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:7
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:8
對不起,你沒有猜對
請輸入任意一個1-10之間的數字:10
對不起,你沒有猜對
正確號碼是: 9

6.質數練習2:

練習5 求100以內所有質數 2和可以被1和它本身整除的數


i = 2
while i <= 100:
    flag = True

    # 判斷 i 是否是質數
    # 獲取所有可能成爲i的因數
    j = 2
    while j < i:
        # 判斷 i 是否能被 就整除 ,i不是質數
        if i % j == 0:
            flag = False
        j += 1

    if flag:
        print(i)
    i += 1
    》》》
    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

7 質數練習2

優化前:

10000個數 8.70秒

100000個數 沒結果了···

from time import *
# 獲取程序開始的時間    經驗 性能
start = time()
i= 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i  :
        if i % j == 0:
            flag = False
            # 一旦判斷證明i根本不是質數,所以內層循環根本就沒必要繼續執行
           
        j += 1
    if flag:
        print(i)
        pass
    i += 1

# 獲取程序結束時間
end = time()
# 計算程序執行的時間
print('程序花費了:',end - start,'秒')

第一次優化:(加個break)

10000個數 1.00秒

100000個數 84.6秒

在這裏插入代碼片from time import *
# 獲取程序開始的時間    經驗 性能
start = time()
i= 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i  :
        if i % j == 0:
            flag = False
            # 一旦判斷證明i根本不是質數,所以內層循環根本就沒必要繼續執行
            break
        j += 1
    if flag:
        print(i)
        pass
    i += 1

# 獲取程序結束時間
end = time()
# 計算程序執行的時間
print('程序花費了:',end - start,'秒')

第二次優化:再加個 ( **0.5 )

10000個數: 0.05秒

100000個數: 1.24秒

from time import *
# 獲取程序開始的時間    經驗 性能
start = time()
i= 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i ** 0.5 :
        if i % j == 0:
            flag = False
            # 一旦判斷證明i根本不是質數,所以內層循環根本就沒必要繼續執行
            break
        j += 1
    if flag:
        print(i)
        pass
    i += 1

# 獲取程序結束時間
end = time()
# 計算程序執行的時間
print('程序花費了:',end - start,'秒')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章