1. 程式人生 > 其它 >Python學習(一)

Python學習(一)

技術標籤:學習筆記# Pythonpython演算法

python第一次上機練習

7-1 jmu-python-運算子-找錢

買單時,營業員要給使用者找錢。營業員手裡有10元、5元、1元(假設1元為最小單位)幾種面額的鈔票,其希望以儘可能少(張數)的鈔票將錢換給使用者。比如,需要找給使用者17元,那麼其需要給使用者1張10元,1張5元,2張1元。
而不是給使用者17張1元或者3張5元與2張1元。

輸入格式:
輸入n,代表要進行n次測試。
然後輸入n行整數,每行代表要找的錢。

輸出格式:
按照如下格式輸出,x代表要找的錢總數,?代表每種面額所需的數量。

x = ?*10 + ?*5 + ?*1

注意:= 與 +左右均有空格。

輸入樣例:

109
17
10
3
0

輸出樣例:

109 = 10*10 + 1*5 + 4*1
17 = 1*10 + 1*5 + 2*1
10 = 1*10 + 0*5 + 0*1
3 = 0*10 + 0*5 + 3*1
0 = 0*10 + 0*5 + 0*1

程式碼:

def Jmu(a):
    x = 0
    y = 0
    z = 0
    b = a
    while True:
        if a >= 10:
            a -= 10
            x += 1
        elif a >= 5:
            a -= 5
            y += 1
        elif a > 0:
            a -= 1
            z += 1
        else:
            break

    print("%d = %d*10 + %d*5 + %d*1" % (b, x, y, z))
    # print("{} = {}*10 + {}*5 + {}*1".format(b, x, y, z))

n = eval(input())
for i in range(n):
    a = eval(input())
    Jmu(a)

7-2 jmu-python-是否偶數

輸入一個整數,判斷是否偶數

輸入樣例:

7

輸出樣例:

7不是偶數

輸入樣例:

8

輸出樣例:

8是偶數

程式碼:

a =int(input())
if a % 2 == 0:
    print("%d是偶數" % a)
else:
    print("%d不是偶數" % a)

7-3 jmu-python-求三角形面積及周長

輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。假設輸入三角形三邊是合法整形資料。

三角形面積計算公式: ,其中

s=(a+b+c)/2
import math  #匯入math庫
math.sqrt(x)  #呼叫sqrt函式實現開平方運算,x表示要求值的資料
輸入格式:
每行輸入一個數據,表示三角形一條邊。

輸出格式:
area=面積;perimeter=周長,
面積和周長保留2位小數

輸入樣例:

3
4
5

輸出樣例:

area=6.00;perimeter=12.00

程式碼:

import math
a = eval(input())
b = eval(input())
c = eval(input())
s = (a+b+c)/2
area = math.sqrt(s*(s-a)*(s-b)*(s-c))
perimeter = a+b+c
print("area=%.2f;perimeter=%.2f" % (area, perimeter))

7-4 jmu-分段函式l

本題目要求計算以下分段函式的值(x為從鍵盤輸入的一個任意實數):

如果輸入非數字,則輸出“Input Error!”

輸入格式:
在一行中輸入一個實數x。

輸出格式:
在一行中按”y=result”的格式輸出,其中result保留兩位小數。

輸入樣例:

-2

輸出樣例:
在這裡給出相應的輸出。例如:

y=3.00

程式碼:

# 執行錯誤時,主動丟擲異常
def demo1(x):
    if x > 1:
        y = 2 * x + 1
    elif x > -2:
        y = 3
    else:
        y = -2 * x - 1
    print("y={:.2f}".format(y))


try:
    x = eval(input())
    demo1(x)
except Exception as result:
    print("Input Error!")

python第二次上機練習

7-1 jmu-python-迴文數判斷(5位數字)

本題目要求輸入一個5位自然數n,如果n的各位數字反向排列所得的自然數與n相等,則輸出yes,否則輸出no

輸入格式:

13531

輸出格式:

yes

輸入樣例1:

13531

輸出樣例1:

yes

輸入樣例2:

13530

輸出樣例2:

no

程式碼:

num1 = eval(input())
num = num1
num3 = 0
for i in range(5):
    num2 = num1 % 10
    num1 = (num1 - num2) / 10
    num3 += num2 *(10 ** (4-i))
if num3 == num:
    print("yes")
else:
    print("no")

7-2 jmu-python-凱撒密碼加密演算法

編寫一個凱撒密碼加密程式,接收使用者輸入的文字和金鑰k,對明文中的字母a-z和字母A-Z替換為其後第k個字母。

輸入格式:

接收兩行輸入,第一行為待加密的明文,第二行為金鑰k。

輸出格式:

輸出加密後的密文。

輸入樣例:

在這裡給出一組輸入。例如:

Hello World!
3

輸出樣例:

在這裡給出相應的輸出。例如:

Khoor Zruog!

程式碼:

ch = input()
k = int(input())
a = 'abcdefghijklmnopqrstuvwxyz'
A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in ch:
    if 'a'<= i<= 'z':
        n = a.find(i)
        print(a[(n + k + 26)%26],end='')
    elif 'A'<= i <='Z':
        n = A.find(i)
        print(A[(n + k + 26)%26],end='')
    else:
        print(i,end = '')

7-3 你好

你的程式會讀入一個名字,比如John,然後輸出“Hello John”。

輸入格式:

一行文字。

輸出格式:

一行文字。

輸入樣例:

Mary Johnson

輸出樣例:

Hello Mary Johnson

程式碼:

name1 = input()
print('Hello ' + name1)

7-4 Py的A+B

程式會讀入兩行,每行都是一個數字,輸出這兩個數字的和

輸入格式:

兩行文字,每行都是一個數字

輸出格式:

一行數字

輸入樣例:

18
21

輸出樣例:

39

程式碼:

num1 = eval(input())
num2 = eval(input())
num = num1 + num2
print(num)

7-5 攝氏溫度轉換華氏溫度

溫度刻畫存在不同體系,攝氏度以1標準大氣壓下水的結冰點為0度,沸點為100度,將溫度進行等分刻畫。華氏度以1標準大氣壓下水的結冰點為32度,沸點為212度,將溫度進行等分刻畫。

根據華氏和攝氏溫度定義,轉換公式如下:

  • C = ( F – 32 ) / 1.8
  • F = C * 1.8 + 32

輸入格式:

一個不帶小數點的數字,表示設攝氏溫度。

輸出格式:

一個表示華氏溫度的數字。請直接採用print()輸出計算結果,不需要對輸出格式做處理。

輸入樣例:

36

輸出樣例:

96.8

程式碼:

C = eval(input())  
F = C * 1.8 + 32
print(F)

7-6 從鍵盤輸入三個數到a,b,c中,按公式值輸出

在同一行依次輸入三個值a,b,c,用空格分開,輸出b*b-4*a*c的值

輸入格式:

在一行中輸入三個數。

輸出格式:

在一行中輸出公式值。

輸入樣例:

在這裡給出一組輸入。例如:

3 4 5

輸出樣例:

在這裡給出相應的輸出。例如:

-44

程式碼:

a,b,c = map(int,input().split())
print(b * b - 4 * a * c)

7-7 產生每位數字相同的n位數

讀入2個正整數A和B,1<=A<=9, 1<=B<=10,產生數字AA…A,一共B個A

輸入格式:

在一行中輸入A和B。

輸出格式:

在一行中輸出整數AA…A,一共B個A

輸入樣例1:

在這裡給出一組輸入。例如:

1, 5

輸出樣例1:

在這裡給出相應的輸出。例如:

11111

輸入樣例2:

在這裡給出一組輸入。例如:

3 ,4

輸出樣例2:

在這裡給出相應的輸出。例如:

3333

程式碼:

A,B = map(int,input().split(','))
for i in range(B):
    print("%d" % A,end = '')


python第三次(上機)練習

7-1 jmu-python-匯率兌換

按照1美元=6人民幣的匯率編寫一個美元和人民幣的雙向兌換程式

輸入格式:

輸入人民幣或美元的金額,人民幣格式如:R100,美元格式如:$100

輸出格式:

輸出經過匯率計算的美元或人民幣的金額,格式與輸入一樣,幣種在前,金額在後,結果保留兩位小數

輸入樣例1:

R60

輸出樣例1:

$10.00

輸入樣例2:

$5

輸出樣例2:

R30.00

程式碼:

money = input()

if money[0] == 'R':
    R_num = int(money[1:])
    M_num = R_num / 6.0
    print("$%.2f" % M_num)
elif money[0] == '$':
    M_num = int(money[1:])
    R_num = M_num * 6.0
    print("R%.2f" % R_num)

7-2 jmu-python-九九乘法表(矩形)

本題目要求輸出如下圖所示的九九乘法表

注:乘積要求做格式控制,佔4個位置的寬度


輸入樣例:

輸出樣例:

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

程式碼:

for x in range(1, 10, 1):
    if x>1:
        print()
    for y in range(1, 10, 1):
        print("%d*%d=%-4d" % (x, y, x * y), end="")

7-3 jmu-python-判斷是否構成三角形

輸入三角形的三邊,判斷是否能構成三角形。若能構成輸出yes,否則輸出no。
輸入格式:

在一行中直接輸入3個整數,3個整數之間各用一個空格間隔,沒有其他任何附加字元。

輸出格式:

直接輸出yesno,沒有其他任何附加字元。

輸入樣例1:

3 4 5

輸出樣例1:

yes

輸入樣例2:

1 2 3

輸出樣例2:

no

程式碼

x, y, z = map(int, input().split(" "))
if (x + y > z) and (x + z > y) and (y + z > x):
    print("yes")
else:
    print("no")

7-4 jmu_python_最大公約數&最小公倍數

本題要求從鍵盤輸入兩個整數(以逗號間隔),程式設計求出這兩個數的最大公約數和最小公倍數

提示: 求最大公約數可用輾轉相除法,最小公倍數用兩數的積除以最大公約數
輸入格式:

在一行中輸入兩個整數,以逗號間隔

輸出格式:

輸出“GCD:a, LCM:b",其中a為求出的最大公約數,b為求出的最小公倍數

注意:在逗號後面有個空格

輸入樣例:

12,14

輸出樣例:

GCD:2, LCM:84

程式碼:

def gcd(a, b):
    while b != 0:
        temp = a % b
        a = b
        b = temp
    return a


a, b = map(int, input().split(","))
print("GCD:%d, LCM:%d" % (gcd(a, b), a * b / gcd(a, b)))

7-5 轉換函式使用

輸入一個整數和進位制,轉換成十進位制輸出

輸入格式:

在一行輸入整數和進位制

輸出格式:

在一行十進位制輸出結果

輸入樣例:

在這裡給出一組輸入。例如:45,8

輸出樣例:

在這裡給出相應的輸出。例如:
37

程式碼:

'''
基數:base
'''
num_str, base = map(str, input().split(","))
num_end = 0  # 記錄最終結果
num_len = len(num_str)
for i in range(0, num_len, 1):
    num_int = int(num_str[num_len - i - 1])
    num_end = num_end + num_int * (int(base) ** i)
print(num_end)

7-6 水仙花數

水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。 例如:153=1×1×1+5×5×5+3×3×3
本題要求編寫程式,計算所有N位水仙花數。

輸入格式:
輸入在一行中給出一個正整數N3≤N≤5

輸出格式:

按遞增順序輸出所有N位水仙花數,每個數字佔一行。

輸入樣例:

在這裡給出一組輸入。例如:

3

輸出樣例:

在這裡給出相應的輸出。例如:

153
370
371
407

程式碼

'''
理解:
以三位數為例,所取數的範圍是[100,1000);
for i in range(100,1000):
    num_str = str(i)
    temp1 = int(num_str[0])
    temp2 = int(num_str[1])
    temp3 = int(num_str[2])
    if temp1 ** 3 + temp2 ** 3 + temp3 ** 3 == i:
        print(i)
輸入N位數字時,就是對三位水仙花數的改進
'''


def p(a, b):
    num = 1
    for i in range(1, b + 1, 1):
        num = num * a
    return num


N = int(input())  # N位正整數
begin = p(10, N - 1)
end = p(10, N)

for i in range(begin, end, 1):
    num_str = str(i)
    add = 0
    for j in range(0, N, 1):
        temp = int(num_str[j])
        add = add + temp ** N
    if add == i:
        print(i)
        continue  # 可以省略

7-7 jmu-python-成績轉換

本題要求編寫程式將一個百分制成績轉換為五分製成績。轉換規則:

大於等於90分為A; 小於90且大於等於80為B; 小於80且大於等於70為C; 小於70且大於等於60為D; 小於60為E。

輸入樣例:

98

輸出樣例:

A

程式碼:

# 省事版
grade = int(input())
if grade >= 90:
    print("A")
elif grade >= 80:
    print("B")
elif grade >= 70:
    print("C")
elif grade >= 60:
    print("D")
else:
    print("E")

7-8 jmu-python-韓信點兵

在中國數學史上,廣泛流傳著一個“韓信點兵”的故事:韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數:

按從1至5報數,記下最末一個士兵報的數為1; 再按從1至6報數,記下最末一個士兵報的數為5; 再按從1至7報數,記下最末一個士兵報的數為4; 最後按從1至11報數,最末一個士兵報的數為10; 請編寫程式計算韓信至少有多少兵。

輸入格式:

無輸入

輸出格式:

輸出韓信至少擁有的士兵人數。

輸入樣例:

無輸入

輸出樣例:

輸出人數

程式碼:

tool = True
i = 11
while (tool):
    i = i + 1
    if (i % 5 == 1) and (i % 6 == 5) and (i % 7 == 4) and (i % 11 == 10):
        print(i)
        tool = False
'''
# 無腦版
"""
假設韓信最多有4千兵將
"""
for i in range(11, 4000, 1):
    if (i % 5 == 1) and (i % 6 == 5) and (i % 7 == 4) and (i % 11 == 10):
        print(i)

'''

7-9 求誤差小於輸入值的e的近似值

自然常數e可以用級數1+1/1!+1/2!+⋯+1/n!來近似計算。ei代表前i項求和。輸入誤差範圍error,當

,則表示e的近似值滿足誤差範圍。

輸入格式:

在一行輸入誤差範圍。

輸出格式:

在一行輸出e的近似值(保留6位小數)。

輸入樣例1:

在這裡給出一組輸入。例如:

0.01

輸出樣例1:

在這裡給出相應的輸出。例如:

2.716667

輸入樣例2:

在這裡給出一組輸入。例如:

0.000000001

輸出樣例2:

在這裡給出相應的輸出。例如:

2.718282

程式碼:

'''
分母:Denominator
階乘:Factorial
自然常數e可以用級數1+1/1!+1/2!+⋯+1/n!來近似計算。ei代表前i項求和。輸入誤差範圍error,當
ei+1-ei<error,則表示e的近似值滿足誤差範圍。
'''


def Fact(a):
    deno = 1
    for i in range(1, a + 1, 1):
        deno = deno * i
    return deno


error = eval(input())
tool = True
num = 0
ei = 1  # 記錄 ei+1
while (tool):
    e = ei # 記錄 ei
    num = num + 1
    ei = ei + 1 / Fact(num)
    if ei - e < error:  # 判斷是否滿足誤差範圍
        tool = False
print("%.6f" % ei)

7-10 jmu-python-區間數之和

輸入一個區間,計算裡面能被3整除或被5整除的數和。

輸入格式:

每行輸入一個數據,代表區間左界和右界。資料必須是整數。

輸出格式:

滿足條件數和。

輸入樣例:

2
10

輸出樣例:

33

程式碼:

'''
能被三,或被5整除數之和
'''

begin = int(input())
end = int(input())
nums = 0
for i in range(begin, end + 1, 1):
    if i % 5 == 0 or i % 3 == 0:
        nums += i

print(nums)

7-11 企業根據利潤提成發放獎金問題

企業根據利潤提成發放獎金問題。利潤低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%; 20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;

60萬到100萬之間時,高於60萬元的部分,可提成1.5%;

高於100萬元時,超過100萬元的部分按1%提成。從鍵盤輸入當月利潤,求應發放獎金總數?

輸入格式:

輸入一個利潤整數。例如:輸入120000

輸出格式:

輸出一個實數。例如:11500.0

輸入樣例:

在這裡給出一組輸入。例如:

120000

輸出樣例:

在這裡給出相應的輸出。例如:

11500.0

程式碼

'''
prifit:利潤
bonus:獎金
注意:利潤小於0時,獎金應為0
'''
profit = eval(input())
bonus_1 = 100000 * 0.1  # 10萬元時
bonus_2 = (200000 - 100000) * 0.075 + bonus_1  # 20萬元時
bonus_3 = (400000 - 200000) * 0.05 + bonus_2  # 40萬時
bonus_4 = (600000 - 400000) * 0.03 + bonus_3  # 60萬元時
bonus_5 = (1000000 - 600000) * 0.015 + bonus_4  # 100萬元時
# bonus_6 = (profit - 1000000) * 0.01 + bonus_5  # 高於一百萬時
if profit < 0:
    print("0")
elif profit <= 100000:
    bonus = profit * 0.1
    print("%.1f" % bonus)
elif profit <= 200000:
    bonus = (profit - 100000) * 0.075 + bonus_1
    print("%.1f" % bonus)
elif profit <= 400000:
    bonus = (profit - 200000) * 0.05 + bonus_2
    print("%.1f" % bonus)
elif profit <= 600000:
    bonus = (profit - 400000) * 0.03 + bonus_3
    print("%.1f" % bonus)
elif profit <= 1000000:
    bonus = (profit - 600000) * 0.015 + bonus_4
    print("%.1f" % bonus)

else:
    bonus = (profit - 1000000) * 0.01 + bonus_5
    print("%.1f" % bonus)

7-12 求前n項的階乘之和

從鍵盤輸入一個整數n,求前n項的階乘之和,1+2!+3!+...+n!的和

輸入格式:

輸入一個大於1的整數。例如:輸入20

輸出格式:

輸出一個整數。例如:2561327494111820313

輸入樣例:

在這裡給出一組輸入。例如:

20

輸出樣例:

在這裡給出相應的輸出。例如:

2561327494111820313

程式碼:

'''
階乘:Factorial
'''


def fact(a):
    num = 1
    for i in range(1, a + 1, 1):
        num = num * i
    return num


n = eval(input())
add = 0
for j in range(1, n + 1, 1):
    add = add + fact(j)
print(add)

7-13 計算逆序的四位數

輸入一個四位數,得到一個新的四位數。新數的千位數字、百位數字、十位數字和個位數字分別是原數的個位數、十位數、百位數和千位數。

輸入格式:

輸入一個四位數(假設輸入必定是四位數,並且最後一位不為0)。

輸出格式:

輸出一個四位數。

輸入樣例:

在這裡給出一組輸入。例如:
1234

輸出樣例:

在這裡給出相應的輸出。例如:

4321

程式碼:

n1 = str(input())  # 輸入原數字
n2 = ''
for i in range(0, 4, 1):  # 可以拓展為n位數,利用len()函式
    # print(type(n1[i]))
    n2 = n2 + n1[3 - i]
print(n2)

期中測驗

7-2 *號金字塔

輸入金字塔層數,輸出*號金字塔

輸入格式:

輸入一個正整數。

輸出格式:

輸出*號金字塔

輸入樣例:

在這裡給出一組輸入。例如:

3

輸出樣例:

在這裡給出相應的輸出。例如:

  *
 ***
*****

程式碼:

# *號金字塔
n = int(input())
for i in range(1,n+1,1):
    for j in range(n,i,-1):
        print(" ",end="")
    for k in range(1,2*i,1):
        print("*",end ="")
    print("")
    

7-3 計算兩個日期間隔天數

輸入兩組同年的年月日,計算之間相隔天數。

其中,預設第二組輸入日期比第一組輸入日期大。例如,輸入2018-3-12018-7-18,輸出間隔天數140。提示輸入的字串轉換為整數需要用到split()函式以及map()函式"2018-3-1".split("-")的含義是將字串按-切分,返回["2018","3","1"]列表。map(int,list)含義是將int函式依次應用於list中的每一個元素。

  • 閏年的定義為被4整除且不能被100整除或被400整除的年份。

輸入格式:

輸入第一組年月日:2018-3-1

輸入第二組年月日:2018-5-25

輸出格式:

輸出天數。

輸入樣例:

在這裡給出一組輸入。例如:

2018-3-1
2018-5-25

輸出樣例:

在這裡給出相應的輸出。例如:

86

程式碼:

# 計算兩個日期間隔

def rn(year):
    tool = 0
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        tool = 1
    return tool


year1,month1,day1 = map(int,input().split("-"))  # 日期1
year2,month2,day2 = map(int,input().split("-"))  # 日期2

days = [0,31,28,31,30,31,30,31,31,30,31,30,31]

runnian = rn(year1)
adds1 = 0
adds2 = 0 
if runnian == 0:
    for i in range(1,month1,1):
        adds1 = adds1 + days[i]
    adds1 = adds1 + day1
    for i in range(1,month2,1):
        adds2 = adds2 + days[i]
    adds2 = adds2 + day2
    print(adds2 - adds1 + 1)
    
elif runnian == 1:
    days[2] = 29
    for i in range(1,month1,1):
        adds1 = adds1 + days[i]
    adds1 = adds1 + day1
    for i in range(1,month2,1):
        adds2 = adds2 + days[i]
    adds2 = adds2 + day2
    print(adds2 - adds1 + 1)

  • 分析:
    • 不足之處:
      • 無法將計算不同年份之間的間隔日期;
      • 日期的輸入順序無法顛倒

7-3 計算兩個日期間隔天數PLUS

本題是對上一題的優化,彌補了上一題的不足之處

  • 優點:
    • 1.可以計算兩個不同年份之間的日期
    • 2.輸入兩個年份時,可以不按順序輸入
    • 3.增加了判斷年份相同時,而月份或日期不同時,可以不按順序輸入的判斷
  • 缺點:
    • 1.程式碼量太繁瑣
    • 2.日期的交換以及計算等,應使用def定義函式模組來解決,可以增加程式碼的適配性

程式碼:

# 計算兩個不同年份日期的天數

def rn(year):
    tool = 0
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        tool = 1
    return tool


year1, month1, day1 = map(int, input().split("-"))  # 日期1
year2, month2, day2 = map(int, input().split("-"))  # 日期2

days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 假如第一次輸入的年份大於第二次輸入的年份,將二者的資料進行交換
if (year1 > year2) or (year1 == year2 and month1 > month2) or (year1 == year2 and month1 == month2 and day1 > day2):
    year_1 = year2
    year_2 = year1
    month_1 = month2
    month_2 = month1
    day_1 = day2
    day_2 = day1
else:
    year_1 = year1
    year_2 = year2
    month_1 = month1
    month_2 = month2
    day_1 = day1
    day_2 = day2

# 判斷是否是閏年
runnian_1 = rn(year_1)
runnian_2 = rn(year_2)

adds_1 = 0  # 記錄year_1本年的日期數
adds_2 = 0  # 記錄year_2本年的日期數

# 記錄year_1本年的日期數
if runnian_1 == 0:
    for i in range(1, month_1, 1):
        adds_1 = adds_1 + days[i]
    adds_1 = adds_1 + day_1

elif runnian_1 == 1:
    days[2] = 29
    for i in range(1, month_1, 1):
        adds_1 = adds_1 + days[i]
    adds_1 = adds_1 + day_1

# 記錄year_2本年的日期數
if runnian_2 == 0:
    for i in range(1, month_2, 1):
        adds_2 = adds_2 + days[i]
    adds_2 = adds_2 + day_2

elif runnian_2 == 1:
    days[2] = 29
    for i in range(1, month_2, 1):
        adds_2 = adds_2 + days[i]
    adds_2 = adds_2 + day_2
adds_3 = 0

# 記錄year_1與year_2年份之間相差天數
for i in range(year_1, year_2, 1):
    if rn(i) == 0:
        adds_3 = adds_3 + 365
    else:
        adds_3 = adds_3 + 366
print(adds_2 - adds_1 + adds_3 + 1)

7-4 企業根據利潤提成發放獎金問題