有不少同學學完Python
后仍然很難將其靈活運用。我整理 37 個Python
入門的小程序。在實踐中應用Python
會有事半功倍的效果。
分享 Github 項目,里面收集了 Python 學習資料 https://github.com/duma-repo/great-programmer
- 例子1:華氏溫度轉換為攝氏溫度
- 例子2:計算圓的周長和面積
- 例子3:實現一元一次函數
- 例子4:實現二元二次函數
- 例子5:分離整數的個位數
- 例子6:實現一個累加器
- 例子7:判斷閏年
- 例子8:判斷奇偶數
- 例子9:猜大小
- 例子10:判斷閏年
- 例子11:攝氏度與華氏度互轉
- 例子12:是否構成三角形
- 例子13:輸出成績等級
- 例子14:計算提成
- 例子15:實現分段函數
- 例子16:1-n求和
- 例子17:累加器 v2.0
- 例子18:猜數游戲
- 例子19:打印乘法口訣表
- 例子20:是否是素數
- 例子21:斐波那契數列
- 例子22:水仙花數
- 例子23:猴子吃桃
- 例子24:打印菱形
- 例子25:計算提成 v2.0
- 例子26:某天是一年中的第幾天
- 例子27:回文字符串
- 例子28:個人信息輸入輸出
- 例子29:個人信息排序
- 例子30:對輸入的內容去重
- 例子31:輸出集合交集
- 例子32:猜拳游戲
- 例子33:字典排序
- 例子34:二元二次函數 v2.0
- 例子35:斐波那契數列 v2.0
- 例子36:階乘
- 例子37:實現 range 函數
例子1:華氏溫度轉換為攝氏溫度
華氏溫度轉攝氏溫度的公式:C = (F - 32) / 1.8
。本例考察Python
的加減乘除運算符。
"""
將華氏溫度轉換為攝氏溫度
"""
f = float(input('輸入華氏溫度: '))
c = (f - 32) / 1.8
print('%.1f 華氏度 = %.1f 攝氏度' % (f, c))
例子2:計算圓的周長和面積
輸入半徑,計算圓的半徑和面積,圓周長公式:2*π*r,面試公式:π*r^2
"""
半徑計算圓的周長和面積
"""
radius = float(input('輸入圓的半徑: '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print('周長: %.2f' % perimeter)
print('面積: %.2f' % area)
例子3:實現一元一次函數
實現數學里的一元一次函數:f(x) = 2x + 1
"""
一元一次函數
"""
x = int(input('輸入x:'))
y = 2 * x + 1
print('f(%d) = %d' % (x, y))
例子4:實現二元二次函數
實現數學里的二元二次函數:f(x, y) = 2x^2 + 3y^2 + 4xy
,需要用到指數運算符**
"""
二元二次函數
"""
x = int(input('輸入x:'))
y = int(input('輸入y:'))
z = 2 * x ** 2 + 3 * y ** 2 + 4 * x * y
print('f(%d, %d) = %d' % (x, y, z))
例子5:分離整數的個位數
將一個正整數的個位數,以及除個位數外的部分分離。需要用到模(取余數)
運算符%
,和整除
運算符//
"""
分離整數個位數
"""
x = int(input('輸入整數:'))
single_dig = x % 10
exp_single_dig = x // 10
print('個位數: %d' % single_dig)
print('除個位數外: %d' % exp_single_dig)
例子6:實現一個累加器
實現一個簡單的累加器,可以接受用戶輸入3個數字,並將其累加。需要用到復合賦值運算符:+=
"""
累加器 v1.0
"""
s = 0
x = int(input('輸入整數:'))
s += x
x = int(input('輸入整數:'))
s += x
x = int(input('輸入整數:'))
s += x
print('總和:%d' % s)
例子7:判斷閏年
輸入年份,判斷是否是閏年。閏年判斷方法:能被4整除,但不能被100整除;或者能被 400 整除。需要用到算術運算符
和邏輯運算符
"""
判斷閏年
"""
year = int(input('輸入年份: '))
is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(is_leap)
例子8:判斷奇偶數
輸入一個數字,判斷基數還是偶數,需要模
運算和if ... else
結構
"""
判斷奇偶數
"""
in_x = int(input('輸入整數:'))
if in_x % 2 == 0:
print('偶數')
else:
print('奇數')
例子9:猜大小
用戶輸入一個 1-6 之間的整數,與程序隨機生成的數字作比較。需要用到if ... elif ... else
結構
"""
猜大小
"""
import random
in_x = int(input('輸入整數:'))
rand_x = random.randint(1, 6)
print('程序隨機數: %d' % rand_x)
if in_x > rand_x:
print('用戶贏')
elif in_x < rand_x:
print('程序贏')
else:
print('打平')
說明:random是Python的隨機數模塊,調用 random.randint 可以生成一個隨機數,類型為 int。randint(1, 6) 表示生成 [1, 6] 之間的隨機數。
例子10:判斷閏年
之前判斷閏年是輸出True
或False
,這次需要輸出文字版閏年
或平年
"""
判斷閏年
"""
year = int(input('輸入年份: '))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print('閏年')
else:
print('平年')
例子11:攝氏度與華氏度互轉
之前做過華氏度轉攝氏度,現在通過分支結構
實現二者互轉。
"""
攝氏度與華氏度互換
"""
trans_type = input('輸入轉攝氏度還是華氏度:')
if trans_type == '攝氏度': # 執行華氏度轉攝氏度的邏輯
f = float(input('輸入華氏溫度:'))
c = (f - 32) / 1.8
print('攝氏溫度為:%.2f' % c)
elif trans_type == '華氏度': # 執行攝氏度轉華氏度的邏輯
c = float(input('輸入攝氏溫度:'))
f = c * 1.8 + 32
print('華氏溫度為:%.2f' % f)
else:
print('請輸入 華氏度 或 攝氏度')
例子12:是否構成三角形
輸入三個邊長度,判斷是否構成三角形。構成三角形的條件:兩邊之和大於第三邊
。
"""
是否構成三角形
"""
a = float(input('輸入三角形三條邊:\n a = '))
b = float(input(' b = '))
c = float(input(' c = '))
if a + b > c and a + c > b and b + c > a:
print('能夠構成三角形')
else:
print('不能構成三角形')
例子13:輸出成績等級
輸入成績分數,輸出分數對應的等級。
>=90分得A,[80, 90) 得B,[70, 80)得C,[60, 70)得D,< 60得E
"""
輸出成績等級
"""
score = float(input('請輸入成績: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('成績等級是:', grade)
例子14:計算提成
某企業的獎金根據銷售利潤按照如下規則計算提成。輸入銷售利潤,計算獎金。
利潤 <= 10萬,獎金可提10%
10萬 < 利潤 <= 20萬,高出10萬的部分提 7.5%
20萬 < 利潤 <= 40萬,高出20萬元的部分提5%
40萬 < 利潤 <= 60萬,高出40萬元的部分提3%
利潤 > 60萬,超過60萬的部分提1%
"""
計算提成 v1.0
"""
profit = float(input('輸入銷售利潤(元): '))
if profit <= 100000:
bonus = profit * 0.1
elif profit <= 200000:
bonus = 100000 * 0.1 + (profit - 100000) * 0.075
elif profit <= 400000:
bonus = 100000 * 0.1 + 200000 * 0.075 + (profit - 200000) * 0.05
elif profit <= 600000:
bonus = 100000 * 0.1 + 200000 * 0.075 + 400000 * 0.05 + (profit - 400000) * 0.03
else:
bonus = 100000 * 0.1 + 200000 * 0.075 + 400000 * 0.05 + 600000 * 0.03 + (profit - 600000) * 0.01
print('獎金:%.2f' % bonus)
例子15:實現分段函數
數學中經常會見到分段函數,用程序實現如下分段函數
"""
分段函數
"""
x = int(input('輸入:'))
if x > 0:
y = 3 * x ** 2 + 4
else:
y = 2 * x + 2
print('f(%d) = %d' % (x, y))
例子16:1-n求和
輸入正整數n,計算 1 + 2 + ... + n的結果。
"""
1-n求和
"""
n = int(input('輸入n:'))
s = 0
while n >= 1:
s += n
n -= 1
print('1-%d 求和結果: %d' % (n, s))
例子17:累加器 v2.0
之前實現的累加器只能支持 3 個數相加,現在需要去掉該限制,可以無限相加。
"""
累加器 v1.0
"""
s = 0
while True:
in_str = input('輸入整數(輸入q,則退出):')
if in_str == 'q':
break
x = int(in_str)
s += x
print('加和:%d' % s)
例子18:猜數游戲
程序隨機生成一個正整數,用戶來猜,程序根據猜的大小給出相應的提示。最后,輸出用戶猜了多少次才猜中。
"""
猜數游戲
"""
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('猜一個數字(1-100): '))
if number < answer:
print('再大一點')
elif number > answer:
print('再小一點')
else:
print('猜對了')
break
print(f'共猜了{counter}次')
例子19:打印乘法口訣表
"""
打印乘法口訣表
"""
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}*{j}={i * j}', end='\t')
例子20:是否是素數
輸入一個正整數,判斷是否是素數。素數定義:大於1的自然數中,只能被1和它本身整除的自然數。如:3、5、7
"""
判斷是否是素數
"""
num = int(input('請輸入一個正整數: '))
end = int(num // 2) + 1 # 只判斷前半部分是否能整除即可,前半部分沒有能整除的因此,后半部分肯定也沒有
is_prime = True
for x in range(2, end):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('素數')
else:
print('不是素數')
range(2, end) 可以生成 2, 3, ... end序列,並依次賦值給 x 執行循環。range還有如下用法
range(10):生成 0, 1, 2, ... 9 序列
range(1, 10, 2):生成 1, 3, 5, ... 9 序列
例子21:斐波那契數列
輸入正整數 n,計算第 n 位的斐波那契數。斐波那契數列當前位置的數字等於前兩個數字之和,1 1 2 3 5 8 ...
"""
斐波那契數列 v1.0
"""
n = int(input('輸入n: '))
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
print(f'第 {n} 位斐波那契數是:{a}')
例子22:水仙花數
水仙花數是一個3位數,該數字每個位上數字的立方和正好等於它本身,例如:
\[153=1^3+5^3+3^3 \]
"""
水仙花數
"""
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
例子23:猴子吃桃
猴子第一天摘了 n 個桃子,當天吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個
以后每天早上都吃了前一天剩下的一半零一個。
到第10天早上想再吃時,剩下一個桃子。求第一天共摘了多少。
反向思考:第 n-1 天的桃子 = (第n天桃子 + 1) * 2,從 第 10 天循環計算道第一天即可
"""
猴子吃桃
"""
peach = 1
for i in range(9):
peach = (peach + 1) * 2
print(peach)
例子24:打印菱形
輸出如下菱形圖案
***
*****
*******
*****
***
"""
輸出菱形
"""
for star_num in range(1, 7, 2):
blank_num = 7 - star_num
for _ in range(blank_num // 2):
print(' ', end='')
for _ in range(star_num):
print('*', end='')
for _ in range(blank_num // 2):
print(' ', end='')
print()
for _ in range(7):
print('*', end='')
print()
for star_num in range(5, 0, -2):
blank_num = 7 - star_num
for _ in range(blank_num // 2):
print(' ', end='')
for _ in range(star_num):
print('*', end='')
for _ in range(blank_num // 2):
print(' ', end='')
print()
例子25:計算提成 v2.0
將 例子14:計算提成
改用列表+循環的方式,代碼更簡潔,並且可以處理更靈活。
"""
計算提成 v2.0
"""
profit = int(input('輸入銷售利潤(元): '))
bonus = 0
thresholds = [100000, 200000, 400000, 600000]
rates = [0.1, 0.075, 0.05, 0.03, 0.01]
for i in range(len(thresholds)):
if profit <= thresholds[i]:
bonus += profit * rates[i]
break
else:
bonus += thresholds[i] * rates[i]
bonus += (profit - thresholds[-1]) * rates[-1]
print('獎金:%.2f' % bonus)
例子26:某天是一年中的第幾天
輸入某個日期,計算當天是一年中的第幾天
"""
計算某天是一年中的第幾天
"""
months = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
res = 0
year = int(input('年份: '))
month = int(input('月份: '))
day = int(input('幾號: '))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: # 閏年二月 29 天
months[2] += 1
for i in range(month):
res += months[i]
print(res+day)
例子27:回文字符串
判斷一個字符串是否是回文串
,回文串是一個正讀和反讀都一樣的字符串,如:level
"""
判斷是否是回文串
"""
s = input('輸入字符串:')
i = 0
j = -1
s_len = len(s)
flag = True
while i != s_len + j:
if s[i] != s[j]:
flag = False
break
i += 1
j += -1
print('是回文串' if flag else '不是回文串')
例子28:個人信息輸入輸出
不定義類的情況下,可以將個人信息保存在元祖中
students = []
while True:
input_s = input('輸入學生信息(學號 姓名 性別),空格分隔(輸入q,則退出):')
if input_s == 'q':
break
input_cols = input_s.split(' ')
students.append((input_cols[0], input_cols[1], input_cols[2]))
print(students)
例子29:個人信息排序
個人信息保存在元組中,並按照學號、姓名或者性別排序。
"""
個人信息排序
"""
students = []
cols_name = ['學號', '姓名', '性別']
while True:
input_s = input('輸入學生信息(學號 姓名 性別),空格分隔(輸入q,則退出):')
if input_s == 'q':
break
input_cols = input_s.split(' ')
students.append((input_cols[0], input_cols[1], input_cols[2]))
sorted_col = input('輸入排序屬性:')
sorted_idx = cols_name.index(sorted_col) # 根據輸入的屬性獲取元組的索引
print(sorted(students, key=lambda x: x[sorted_idx]))
例子30:對輸入的內容去重
對輸入的內容去重,直接用 Python
中 Set
集合實現
"""
去重
"""
input_set = set()
while True:
s = input('輸入內容(輸入q,則退出):')
if s == 'q':
break
input_set.add(s)
print(input_set)
例子31:輸出集合交集
給定Python web工程師
和算法工程師
需要的技能,計算二者交集。
"""
集合交集
"""
python_web_programmer = set()
python_web_programmer.add('python基礎')
python_web_programmer.add('web知識')
ai_programmer = set()
ai_programmer.add('python基礎')
ai_programmer.add('機器學習')
inter_set = python_web_programmer.intersection(ai_programmer)
print('技能交集:', end='')
print(inter_set)
Python set集合除了能計算交集,還可以計算並集、補集
例子32:猜拳游戲
用程序實現石頭剪刀布游戲。
"""
猜拳游戲
"""
# 0代表布,1代表剪刀,2代表石頭
import random
rule = {'布': 0, '剪刀': 1, '石頭': 2}
rand_res = random.randint(0, 2)
input_s = input('輸入石頭、剪刀、布:')
input_res = rule[input_s]
win = True
if abs(rand_res - input_res) == 2: # 相差2說明是布和石頭相遇,出布一方勝
if rand_res == 0:
win = False
elif rand_res > input_res: # 相差1的情況誰大誰贏
win = False
print(f'程序出:{list(rule.keys())[rand_res]},輸入:{input_res}')
if rand_res == input_res:
print('平')
else:
print('贏' if win else '輸')
例子33:字典排序
字典的key是姓名,value是身高,現在需要按照身高對字典重新排序。
"""
字典排序
"""
hs = {'張三': 178, '李四': 185, '王麻子': 175}
print(dict(sorted(hs.items(), key=lambda item: item[1])))
例子34:二元二次函數 v2.0
將二元二次函數封裝在函數中,方便調用
"""
二元二次函數 v2.0
"""
def f(x, y):
return 2 * x ** 2 + 3 * y ** 2 + 4 * x * y
print(f'f(1, 2) = {f(1, 2)}')
例子35:斐波那契數列 v2.0
使用遞歸函數的形式生成斐波那契數列
"""
遞歸版斐波那契數列
"""
def fib(n):
return 1 if n <= 2 else fib(n-1) + fib(n-2)
print(f'第 10 個斐波那契數是:{fib(10)}')
例子36:階乘
定義一個函數,實現階乘。n的階乘定義:n! = 1*2*3* ... n
"""
階乘函數
"""
def fact(n):
return 1 if n == 1 else fact(n-1) * n
print(f'10! = {fact(10)}')
例子37:實現 range 函數
編寫一個類似於 Python
中的 range 功能的函數
"""
range函數
"""
def range_x(start, stop, step):
res = []
while start < stop:
res.append(start)
start += step
return res
歡迎公眾號 「渡碼」,回復關鍵詞 gp 獲取優質編程資料。
