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
12=2 22=4
13=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,'秒')