python基礎練習題(按條件對指定序列求和,列印99乘法表、求斐波那契數列、百馬百擔、求水仙花數、求n以內的所有質數(素數)和)、集合的講解、一些公關方法
1.求100(含100)以內所有偶數的和
range(start,end,step)這個序列生成器,和那個切片的語法一樣,含頭不含尾,step是步長,這裡就不需要在對j進行判斷了,對於這些簡單求奇數和、求偶數和,就n的倍數和等等就可以這樣做
for j in range(0,101,2):
s = s + j
print(s) # 2550
1
2
3
2.列印99乘法表
用於理解迴圈的使用
a=0
while a<9:
a+=1
b=0
while b<a:
b+=1
print(b,’’,a,’=’,ab,sep=’’,end=’\t’) #sep是分隔符預設是空格,\t是製表符
print()
for i in range(1,10):
for j in range(1,i+1):
print(f’{j}{i}={ij}’,end=’\t’)
print()
“”"
11=1
12=2 22=4
13=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
16=6 26=12 36=18 46=24 56=30 66=36
17=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81
“”"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3.求第n位斐波那契數
這是求第n位斐波那契數,大家可以嘗試多種方法做,我這就不做多的演示了,要是求n(包含n)位前所有斐波那契數了,建立一個列表儲存一下就好,希望大家可以去做一下,加深對列表方法的使用
斐波那契數列:1,1,2,3,5,8,13,21,34,55…
從第三位開始:後一個數等於前面兩數相加
n = int(input(‘請輸入你要求第幾位斐波那契數:’))
a = 0
b = 1
for i in range(n):
# c = a
# a = b
# b = c + b
# 上裡三式可以簡寫為:
a,b = b,a+b
print(a)
1
2
3
4
5
6
7
8
9
10
11
12
4.百馬百擔
一匹大馬能背3擔貨,一匹中馬能背2擔貨,兩匹小馬能背1擔貨,如果用一百匹馬背一百擔貨,有哪些不同的背法
for i in range(34): # i代表大馬的匹數
for j in range(51): # j代表中馬的匹數
if i3+j2+(100-i-j)/2 == 100:
print(f’大馬={i},中馬={j},小馬={100-i-j}’)
大馬=2,中馬=30,小馬=68
大馬=5,中馬=25,小馬=70
大馬=8,中馬=20,小馬=72
大馬=11,中馬=15,小馬=74
大馬=14,中馬=10,小馬=76
大馬=17,中馬=5,小馬=78
大馬=20,中馬=0,小馬=80
1
2
3
4
5
6
7
8
9
10
11
5.求水仙花數
我這定義了一個函式去求n位數的水仙花數,不過水仙花數就是100-1000內個位十位百位3次方的和等於本身的數,我那只是類推一下,當然也可以不定義函式,直接使用input輸入一個n或者直接給定n的值
def get_Narcissistic(n):
for i in range(pow(10,n-1),pow(10,n)):
s = 0
for j in range(n):
s = s+pow(i//10**j%10,n)
if i==s:
print(i)
get_Narcissistic(3)
153
370
371
407
1
2
3
4
5
6
7
8
9
10
11
12
6.求n以內的所有質數(素數)和
質數:只能被1和自身整除的數
n = int(input(‘請輸入一個大於或等於2的正整數:’))
for i in range(2,n+1):
flag = True # 每次迴圈開始都會重置為True
for j in range(2,int(i**0.5)+1):# 只用迴圈到i的平方根就好減少迴圈次數
if i%j == 0:
flag = False
break # 只要有一個整除就跳出迴圈
if flag: # 只有上面迴圈完,flag還等於True才會列印i
print(i)
上面程式也可以寫成
這裡就涉及到for…else語句的使用:
當for…in迴圈自然結束時,後面有else就會執行else裡的內容,沒有就執行下面的內容
當迴圈因為某種原因(如break)提前退出迴圈,就不會執行else裡的內容
for i in range(2,n+1):
for j in range(2,int(i**0.5)+1):# 只用迴圈到i的平方根就好減少迴圈次數,提高效率
if i%j == 0:
break # 只要有一個整除就跳出迴圈
else: # 只有上面迴圈完,flag還等於True才會列印i
print(i,end=’\t’)# 顯示在一行
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
集合的使用
-集合也是用{}包裹起來的,集合是一個不重複的無序的,所有集合一般用來去重操作的
-注意:空集合使用set()表示,{}表示空字典
persons = {‘zhangsan’, ‘lisi’, ‘jack’, ‘lisi’, ‘jack’, ‘wangwu’, ‘maliu’}
print(persons) # {‘zhangsan’, ‘wangwu’, ‘jack’, ‘maliu’, ‘lisi’}
persons.add(‘李白’) # 新增一個元素,但位置不確定,所有你們執行的答案和我的一樣但是順序不一樣
print(persons)# {‘zhangsan’, ‘wangwu’, ‘jack’, ‘maliu’, ‘lisi’, ‘李白’}
persons.pop()# 隨機刪除一個元素,你們執行的答案應該和我的應該不一樣
print(persons) # {‘wangwu’, ‘zhangsan’, ‘李白’, ‘jack’, ‘maliu’}
persons.remove(‘李白’)# 刪除一個指定的元素,沒有的話會報錯
print(persons) # {‘wangwu’, ‘zhangsan’, ‘jack’, ‘maliu’}
union 將多個集合合併生成一個新的集合
A.update B 將B拼接到A,B要是一個可迭代物件
集合是無序的,所以就不一定是新增在最後
persons.update((‘劉能’,‘趙四’))
print(persons)# {‘劉能’, ‘wangwu’, ‘zhangsan’, ‘趙四’, ‘jack’, ‘maliu’}
persons.clear()#用來清空集合的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
python裡的集合也是有交集並集差集一說的,當然交集並集差集也是可以用字典的方法來表示的,這裡我就不演示了,我感覺直接用符號簡單一點,要了解的話也可以檢視一下幫助文件
sing = {‘王昭君’, ‘貂蟬’, ‘小喬’, ‘大橋’, ‘火舞’, ‘李白’, ‘韓信’}
dance = {‘李元芳’, ‘王昭君’, ‘李白’, ‘韓信’, ‘老虎’, ‘魯班’, ‘後裔’}
print(sing - dance)#A和B的差集 {‘大橋’, ‘火舞’, ‘小喬’, ‘貂蟬’}
print(sing & dance)#A和B的交集 {‘王昭君’, ‘李白’, ‘韓信’}
print(sing | dance)#A和B的並集 {‘李元芳’, ‘王昭君’, ‘後裔’, ‘魯班’, ‘老虎’, ‘火舞’, ‘貂蟬’, ‘李白’, ‘大橋’, ‘小喬’, ‘韓信’}
print(sing ^ dance)#A和B的差集的並集 #{‘李元芳’, ‘魯班’, ‘小喬’, ‘後裔’, ‘火舞’, ‘貂蟬’, ‘老虎’, ‘大橋’}
1
2
3
4
5
6
一些公關方法
+:可以用來拼接,字串,列表,元組
print(‘hello’ + ‘world’)# ‘helloworld’
print([1, 2, 3] + [4, 5, 6])# [1, 2, 3, 4, 5, 6]
print((1, 2, 3) + (4, 5, 6))# (1, 2, 3, 4, 5, 6)
-:只能用於集合,求差集
print({1,2,3}-{3})# {1, 2}
*:可以用於字串元組列表,不能用於字典和集合
print(‘hello’*3)# ‘hellohellohello’
print([1,2,3]*3)# [1, 2, 3, 1, 2, 3, 1, 2, 3]
print((1,2,3)*3)# (1, 2, 3, 1, 2, 3, 1, 2, 3)
in:成員運算子
print('a’in ‘abc’)# True
print(1 in[1,2,3])# True
print(1 in (1,2,3))#True
in用於字典是用來判斷key是否存在的
print('zhangsan’in{‘name’:‘zhangsan’,‘age’:18})# False
print('name’in{‘name’:‘zhangsan’,‘age’:18})# True
相關文章
- fibonacci斐波那契數列詳解 遞迴求Fn非遞迴求Fn求n最近的斐波那契數遞迴
- Java語言非遞迴求第n個斐波那契數Java遞迴
- 斐波那契數列
- 斐波那契數列詳解
- 斐波那契數列(Java)Java
- Python求100以內的素數常用方法!Python
- 斐波那契數
- 斐波那契數列的python實現Python
- 斐波那契數列魔法塔數字量與層數的關係
- 大數斐波那契數列的演算法演算法
- 求陣列內所有偶數的和陣列
- 斐波那契數列 (C#)C#
- PHP 與斐波那契數列PHP
- 面試題9-斐波那契數列面試題
- PHP演算法練習二:求n和指定數的絕對差PHP演算法
- 使用Python實現斐波那契數列Python
- 求素數(質數)演算法演算法
- js實現斐波那契數列JS
- 斐波那契數列js 實現JS
- 斐波那契數列演算法演算法
- 斐波那契數列Ⅳ【矩陣乘法】矩陣
- [譯] 斐波那契數列中的偶數 (Python vs. JavaScript)PythonJavaScript
- 斐波那契數列的分治法計算
- 演算法(1)斐波那契數列演算法
- [C103] 斐波那契數列
- 計算斐波那契數列的演算法演算法
- “斐波那契數列”問題的遞推演算法演算法
- 7-7 求n以內最大的k個素數以及它們的和
- Leedcode-斐波那契數
- 斐波那契數列的第N項(1≤n≤10^18 矩陣快速冪)矩陣
- JavaScript 實現:輸出斐波那契數列JavaScript
- js迭代器實現斐波那契數列JS
- 演算法一:斐波那契阿數列演算法
- 每日一算 -- 斐波那契數列型別題型別
- 【刷演算法】我知道的所有類似斐波那契數列的問題演算法
- 面試:老師講的遞迴解決斐波那契數列真的好嗎面試遞迴
- HDU 1588 斐波那契數列數列變形和矩陣連乘矩陣
- 斐波那契數列的通項公式及證明公式