Python100道練習題
BIlibili
1、兩數之和
num1 = 20
num2 = 22result = num1 + num2print(result)
2、一百以內的偶數
list1 = []for i in range(1,100):if i % 2 == 0:list1.append(i)
print(list1)
3、一百以內的奇數
# 方法一
list1 = []
for i in range(1,100):if i % 2 != 0:list1.append(i)
print(list1)# 方法二
list2 = [i for i in range(1,100) if i % 2 != 0]
print(list2)# 方法三
list3 = [i for i in range(1,100,2)]
4、判斷素數
編寫程序,判斷某一個數是否為素數。所謂素數指的是指在大于1的自然數中,除了1和它本身以外不再有其他因數的自然數:
a = 37
flag = True
for i in range(2,a): # 注意range 是左閉右開if a % i == 0:flag = Falsebreak # 一旦判斷成功后,后面就沒必要繼續了
if flag:print('a不是素數')
else:print('a是素數')
5、求階乘
編寫程序,求出某個自然數的階乘。一個正整數的階乘是所有小于及等于該數的正整數的積,并且0的階乘為1。自然數n的階乘寫作n!
a = 5# 方法一
if a == 0 or a == 1:print('階乘為: 1')
else:sum = 1for i in range(2,a+1): # 包括本身sum *= iprint('階乘為:',sum)# 方法二 遞歸
def fun(x):if x == 1:return 1else:return x * fun(x - 1)print(fun(a))
# 方法三 math.factorial()
import math
print(math.factorial(a))
6、求圓的周長
程序編寫:輸入半徑,求出圓的周長
圓的周長:2πr
import mathr = float(input('請輸入圓的半徑:'))
girth = 2 * r * math.pi
print('周長是',round(girth,2)) # round 保留兩位小數
7、求圓的面積
程序編寫:輸入半徑,求出圓的面積
圓的周長:πrr
import mathr = float(input('請輸入圓的半徑:'))
girth = r * r * math.pi
print('面積是',round(girth,2)) # round 保留兩位小數
8、求直角三角形斜邊的邊長
編寫程序:輸入兩個直角邊,求出三角形斜邊的長度
勾股定理:a2 + b2 = c2
import matha = 3
b = 4
cfang = math.pow(a,2) + math.pow(b,2)
# 或者 math.pow(cfang,0.5) or cfang ** 0.5
print('三角形斜邊的長度: ',math.sqrt(cfang))
9、比較三個數大小
編寫程序:輸入三個數,從小到大輸出三個數
a = int(input('請輸入第一個數:'))
b = int(input('請輸入第二個數:'))
c = int(input('請輸入第三個數:'))lst = [a,b,c]
# 方法一:list.sort() ,sort(reverse=False) 默認False 升序
lst.sort()
print(lst)# 方法二:sorted(lst)
list1 = sorted([a,b,c])
print(list1)
10、找出區間內的素數
編寫程序,輸入整數a、b表示一個閉區間,找出該區間內的所有素數并打印。
# 判斷素數函數
def prime(x):flag = Truefor i in range(2, x):if x % i == 0:flag = Falsebreak return flag# 閉區間
a = 10 # 左端點
b = 20 # 右端點
num_list = []
for i in range(a,b+1):if prime(i):num_list.append(i)print(num_list)
11、組合數字
有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?
# 方法一
str1 = '1234'
for i in str1:for j in str1:for k in str1:if i == j or i == k or j == k:continueprint(i+j+k)# 方法二
for i in range(1,5):for j in range(1,5):for k in range(1,5):if not(i == j or i == k or j == k):print(f'{i}{j}{k}')
12、打印乘法口訣表
for i in range(1,10):for j in range(1,i+1):print(f'\t{j} * {i} = {i * j}',end=' ')print()
13、水仙花數
水仙花數:是一個三位數,各位數字立方和等于該數字本身。
import math
# 水仙花數:是一個三位數,各位數字立方和等于該數字本身。num_list = []
for i in range(100,1000):hundred = i // 100ten = i // 10 % 10piece = i % 10if (math.pow(hundred,3) + math.pow(ten,3)+ math.pow(piece,3)) == i:num_list.append(i)print(num_list)
14、反向輸出四位數
編寫程序,輸入一個四位整數,反對輸出對應四位數
# 編寫程序,輸入一個四位整數,反對輸出對應四位數st = input('請輸入一個四位數')
st = st[::-1]
print(int(st))
15、判斷字母
編寫程序,輸入字符,判斷是否為字母
# 編寫程序,輸入字符,判斷是否為字母a = input('請輸入字符: ')
result = a.isalpha() # 判斷字母
if result:print(f'{a}是字母')
else:print(f'{a}不是字母')
16、判斷三角形
編寫程序,輸入三組數據,判斷能否構成三角形的三條邊
a, b, c = [4, 5, 6]if a <= 0 or b <= 0 or c <= 0:print('輸入的數據不合法')if a + b < c or a + c < b or b + c < a:print('不構成三角形')
else:print('構成三角形')
17、完數
個數如恰好等于除了它以外的因子之和,這個數就稱為“完數”。編程序找出1000以內的所有完數,(6是一個"完數",它的因子是1,2,3)。
for i in range(1,1000):sum = 0for j in range(1,i):if i % j == 0:sum += jif sum == i:print(i,'是完數')
18、找出質數因子
輸入一個正整數,輸出它的所有質數因子(如180的質數因子為2、2、3、3、5)。
多個素數的乘積
從第一個數開始,也就是說從2開始,整除一下輸入的數
a = int(input('請輸入一個自然數:'))
y = 2list1 = []
while a != y:if a % y == 0:list1.append(y)a /= yelse:y += 1list1.append(int(a)) # 最后剩下的a
print(list1)
19、海倫公式求三角形面積
海倫公式是利用三角形的三條邊的邊長直接求三角形面積的公式
p = ( a + b + c ) / 2 p = (a+b+c)/2 p=(a+b+c)/2
S = p ( p ? a ) ( p ? b ) ( p ? c ) S = \sqrt{p(p-a)(p-b)(p-c)} S=p(p?a)(p?b)(p?c)?
import matha = 10
b = 10
c = 10p = (a+b+c)/2
S = math.sqrt(p * (p-a) * (p-b) * (p-c))
print('三角形的面積是:',round(S,2))
20、判斷某年某天
輸入某年某月某日,判斷這一天是這一年的第幾天
import datetime# map 把年月日都轉成 int類型
year,month, day = map(int, input('請輸入年月日: ').split('-'))# 拿到當年的第一天
yundan = datetime.datetime(year,1,1) #
now = datetime.datetime(year, month, day)print((now - yundan).days + 1)
21、斐波那契數列
# 遞歸
def fib(x):if x == 1 or x == 2:return 1else:return fib(x-1) + fib(x-2)print(fib(6))# 非遞歸
n = 6
fibs = [1,1]
for i in range(2, n):# fibs.append(fibs[-1] + fibs[-2])fibs.append(fibs[i - 1] + fibs[i - 2])
print(fibs[n-1])
22、復制列表
將一個列表中的數據,復制到另一個列表中
import copylist1 = [1,2,3,4]
list2 = copy.copy(list1)
print(list2)list1 = [1,2,3,4]
lsit2 = list1.copy()
print(lsit2)
23、暫停后輸出
暫停一段時間后輸出
import timetime.sleep(1) # 以秒為單位
print("Hello Python! ")
24、成績if語句
利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示
score = int(input('請輸入你的成績: '))flag = ''
if score >= 90:flag = "A"
elif score >= 60:flag = "B"
else:flag = 'C'
print(flag)
25、統計字符
輸入一行字符,分別統計出其中英文字母空格、數字和其它字符的個數。
# 輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。string = input('請輸入一段字符串:')
char,space,number,other = 0,0,0,0# 方法一
for i in string:if 'a' <= i <= 'z' or 'A' <= i <= 'Z':char += 1elif i == ' ':space += 1elif '0' <= i <= '9':number += 1else:other += 1# 方法二:
for i in string:if i.isalpha(): # 判斷字符串char += 1elif i.isdigit(): # 判斷數字number += 1elif i.isspace(): # 判斷空格space += 1else:other += 1
print(f'英文字母有{char}個,數字有{number}個,空格有{space}個,其他字符有{other}個。')
26、落體反彈問題
球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?
n = 100
count = 0
list1 = []# 方法一
while count < 10:if count == 0: # 第一次彈跳,馬上要落下來list1.append(n)n /= 2count += 1else:list1.append(2 * n) # 這是一個 上下的距離n /= 2count += 1
print(sum(list1))# 方法二
# 球的高度
height = 100
# 落地的次數
frequency = 10sum = 0
for i in range(1,frequency):sum += height # 落下height /= 2sum += height # 上來print(f'第{i}次下落,高度為:{height}')
print(sum)
27、猴子吃桃問題
猴子吃桃問題:猴子第一天摘下若干個桃子當即吃了一半,還不癮,又多吃了一個第天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少
# 每天吃了 一半 + 1, 第十天就剩下1個了, 求第一天摘了多少x = 1
for i in range(1, 10):x = (x + 1) * 2print(x)
28、求指數數列的和
有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個數列的前20項之和。
# 方法一
fibs = [1,1]for i in range(20):fibs.append(fibs[-1] + fibs[-2])sum = 0
for i in range(2,22):sum += fibs[i] / fibs[i-1]
print(sum)# 方法二
sum = 0 # 最后的結果
up = 2 # 分子
down = 1 # 分母for i in range(20):sum += up/downup, down = down + up, upprint(sum)
29、求各個階乘的和
求1+2!+3!+…+20!的和.
sum = 1
# 方法一
for i in range(2,21):target = 1for j in range(1,i + 1): # 階乘包括本身target *= jsum += target
print(sum)import math
sum = 0
for i in range(1,21):sum += math.factorial(i)
print(sum)
30、年齡急轉彎
有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?
def func(n):if n == 1:return 10else:return func(n - 1) + 2print(func(5))
31、判斷回文數
輸入一個數,判斷它是不是回文數。12321是回文數,個位與萬位相同,十位與千位相同。
number = '12321'# 方法一
if number[0] == number[-1] and number[1] == number[-2]:print(True)
else:print(False)# 方法二
number = int(number)
w = number // 10000
q = number // 1000 % 10
ten = number % 100 // 10
g = number % 10
if q == ten and w == g:print('是回文數')
else:print('不是回文數')# 方法三
a = '12321'
b = a[::-1] # 字符串反轉
if a == b:print('是回文數')
else:print('不是回文數')
32、判斷星期幾
請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。
星期一 Monday、星期二 Tuesday、星期三Wednesday、星期四Thursday、星期五 Friday 、星期六 Saturday、星期日Sunday.
weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
first_letter = input("請輸入星期幾的第一個字母(大寫):")
matched_days = []
for day in weekdays:if day[0] == first_letter:matched_days.append(day)if len(matched_days) == 1:print("是", matched_days[0])
elif len(matched_days) > 1:second_letter = input("有多個匹配,請輸入第二個字母(小寫):")final_matched = []for m_day in matched_days:if len(m_day) > 1 and m_day[1] == second_letter:final_matched.append(m_day)if len(final_matched) == 1:print("是", final_matched[0])else:print("無法準確判斷,請輸入更詳細信息")
33、相反順序輸出列表
按相反的順序輸出列表的值。
list1 = [1,2,3,4,5,6,7]
list1.reverse() # 對原本的數據進行修改,沒有返回值
# 方法一
print(list1)# 方法二
print(list1[::-1])
34、對十個數進行排序
對十個數進行排序
a = map(int, input('請輸入10個數字').split())
a = list(a)
a.sort()
print(a)
35、求矩陣主對角線元素之和
求一個3*3矩陣主對角線元素之和
a = []
index = 0
sum = 0for i in range(3):a.append([])for j in range(3):index += 1a[i].append(index)# 求對角線元素之和if i == j:sum += a[i][j]
print(a)
print(sum)# 方法二
import numpy as np
arr = np.arange(9).reshape(3,3)
sum_list = np.diagonal(arr) # 把對角線取出來
print(sum(sum_list))
36、有序列表添加數據
有一個已經排好的序列。現輸入一個數,要求按原來的規律將它插入數組中。
list1 = [1,3,8,10,20,50]n = int(input('請輸入數據:'))if list1[0] < list1[-2]:list1.append(n)list1.sort()
else:list1.append(n)list1.sort(reverse=True)print(list1)
37、變量值互換
a = 5
b = 10# 方法一
a,b = b,a# 方法二
temp = a
a = b
b = temp
38、產生隨機數
生成隨機數
import randoma = random.random() # [0,1) float
b = random.randint(1,10) # [1,10] int
c = random.randrange(1,10,3) # 比 randint 多了一個步長
print(a,b,c)
39、lambda表達式
使用lambda來創建匿名函數
fun = lambda x, y: x ** yprint(fun(2, 4))
40、溫度轉換
輸入攝氏度,將其轉為華氏度
輸入華氏度,將其轉為攝氏度。
華氏溫度與攝氏溫度轉換公式為:
華氏溫度=攝氏溫度x1.8+32。
a = input('攝氏度請按1,華氏度請按2: ')if a == '1':b = float(input('請輸入攝氏度: '))result = b * 1.8 + 32print(f'你輸入的是攝氏度{b}, 轉換為華氏度是{result}')
if a == '2':b = float(input('請輸入華氏度: '))result = (b - 32) / 1.8print(f'你輸入的是華氏度{b}, 轉換為攝氏度是{result}')
41、按位與
# 運算規則: 0&0=0 0&1=0 1&0=0 1&1=1'''
3 => 0011
5 => 0101
3 & 5 => 0001 => 14 => 0100
12 => 1100
4 & 12 => 0100 =>4
'''print(3 & 5) # 1
print(4 & 12) # 4
42、按位或
# 運算規則: 0|0=0, 0|1=1, 1|0=1, 1|1=1
'''
3 => 0011
7 => 0111
3|7 => 0111 => 7
'''
print(3 | 7) # 7
43、按位異或
# 相同為0,不同為1
# 0^0=0 0^1=1 1^0=1 1^1=0
'''
3 => 0011
9 => 1001
3^9 => 1010 => 10
'''
print(3 ^ 9) # 10
44、按位取反
# 按位取反運算符(~): 對數據的每個二進制位取反,即把0變成1,把1變成0
# ~x = -(x+1)
'''
9 => 00001001=> 11110110=> 10001001=> 10001010 在這里加1=> -10
'''
print(~9) # -10
print(~10) # -11
print(~(-3)) # 2
# 用十進制計算:正變負,負變正,然后減1
45、計算機字符串的長度
a = input()print(len(a))length = 0
for i in a:length += 1
print(length)
46、楊輝三角
a = [] # 外圍for i in range(10):a.append([])for j in range(10):a[i].append(0)for i in range(10):a[i][0] = 1a[i][i] = 1for i in range(2,10):for j in range(1,i):a[i][j] = a[i-1][j] + a[i-1][j-1]for i in range(10):print()for j in range(i+1):print(a[i][j], end=' ')
47、查找字符串
a = 'Hello World!'
b = 'World'
print(a.find(b))
48、猜數字游戲
import randomtarget = random.randint(0,99)
times = 7
print('猜數字游戲開始,請猜一百以內的整數~')
while times != 0:num = int(input('請輸入你要猜的數字: \n'))times -= 1if num < target:print('猜小了')elif num > target:print('猜大了')else:print(f'恭喜你才對了,答案是{target}')if times == 0:print('很遺憾,機會用完了.')
49、第一個只出現一次的字符
在一個字符串中找到第一個只出現一次的字符,并返回它的位置,如果沒有則返回 -1(需要區分大小寫).(從0開始計數
string = 'Hello World'
a = -1 # 默認為 -1
mp = dict()for i in string:if i in mp:mp[i] += 1else:mp[i] = 1for i in range(len(string)):if mp[string[i]] == 1:a = ibreak
print(a)
50、最大公因數
求最大公因數
def fun1(a, b): # 枚舉if a == b: # 如果兩個數一樣的話,那么就是他們本身return anum = min(a,b) # 記錄最小的while a % num != 0 or b % num != 0:num -= 1return numprint(fun1(12,18))def fun2(a,b):while b != 0: # 除法求余a,b = b,a % breturn a
print(fun2(12,18))