阿爾法python 第四章 程序的控制結構

年齡換算

狗是人類的好朋友,一隻狗大約可以生存 15 至 20 年,狗狗在 2 歲時,已經成年。爲了對狗的年齡有個直觀認識,有一個簡單的換算辦法能將狗的年齡換算爲人類的年齡:

狗狗 1 歲時,相當於人類 15 歲,2 歲時相當於人類 24 歲,此後,狗狗每長 1 歲,都相當於人長 4 歲。

用表格羅列一下,像這樣:

狗的年齡 人類的年齡
1 15
2 24
3 28
4 32
5 36

請用程序實現

輸入狗狗的年齡,計算並輸出對應的人類的年齡。

示例 1

輸入 輸出
3 28

示例 2

輸入 輸出
6 40
# 請使用 input() 輸入狗狗的年齡
year = eval(input())
# 請計算相對人的歲數,並將結果輸出
if year == 1:
    print(15)
elif year ==2:
    print(24)
elif year > 2:
    year = 24 + 4*(year-2)
    print(year)
else :
    print("輸入錯誤")

平閏年

如果一個年份可以被 4 整除且不能被 100 整除,或者可以被 400 整除,那麼這個年份就是閏年。

請用程序實現

輸入一個年份year,判斷它是「平年」還是「閏年」。如果是平年,輸出common year;如果是閏年,輸出leap year

示例 1

輸入 輸出
2000 leap year

示例 2

輸入 輸出
1990 common year
# 請使用 input() 輸入一個年份 year
year = int(input())

# 請判斷這個年份是否爲閏年
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print("leap year")
else:
    print("common year")
   
   

考試評級

請用程序實現
輸入一個表示考試成績score的整數,判斷該成績屬於哪個級別,並將判斷結果輸出。

以下爲成績級別劃分:

分數段 級別
0 - 59 E
60 - 69 D
70 - 79 C
80 - 89 B
90 - 100 A

示例 1

輸入 輸出
94 A

示例 2

輸入 輸出
56 E
# 請使用 input() 輸入考試成績 score
score = int(input('請輸入考試成績: '))

# 請判斷成績屬於哪個級別
if 100 >=score >= 90:
    print("A")
elif 89 >= score >=80:
    print("B")
elif 79 >= score >=70:
    print("C")
elif 69 >= score >=60:
    print("D")
elif 59 >= score >=0:
    print("E")
else:
    print("輸入錯誤")
    

大小寫轉換

a、b、c、d這樣的52個字母(包括大寫)在計算機中存儲時也要使用二進制數來表示。
標準ASCII碼使用7位二進制數(剩下的1位二進制爲0)來表示所有的大寫和小寫字母,如下圖所示,可以看出字母對應大小寫的差值爲32。

在這裏插入圖片描述來進行大小寫轉換吧。

注意:python 中,使用 ord() 函數將 字符 轉換成其對應的 ASCII 碼;使用chr() 函數將 ASCII 碼轉換成其對應的 字符。

如:ord('A') 得到結果 65chr(65) 得到結果'A'
請用程序實現

輸入一個英文字母char,判斷它是「大寫字母」還是「小寫字母」。如果是大寫字母,將其轉換爲「對應的小寫字母」;如果是小寫字母,將其轉換爲「對應的大寫字母」;並將轉換後的結果輸出。
示例 1

輸入 輸出
A a

示例 2

輸入 輸出
R r
# 請使用 input() 輸入一個英文字母 char
char = input()
# 請實現英文字母的大小寫轉化
a = ord(char)
if 96 > a > 64:
    a += 32
    print(chr(a))
elif 130 > a >96:
    a -= 32
    print(chr(a))
else:
    print("輸入錯誤")

判斷位數並打印各位的值

請用程序實現
輸入一個不多於五位的正整數num,求出它是幾位數,將結果輸出,並將每一位的數字都打印出來。

注意: 位數和每位的數字分兩行打印。

示例 1

輸入 輸出(使用空格分隔同行的多數據輸出)
12345
1 2 3 4 5

示例 2

輸入 輸出(使用空格分隔同行的多數據輸出)
567
5 6 7
# 請使用 input() 輸入一個不多於五位的正整數 num
num = int(input())
# 請計算這個正整數的位數,並將每一位的數字都打印出來。
w = len(str(num))
a = ['一','二','三','四','五']
print(a[w-1])
for i in range(w):
    print(str(num)[i],end=" ")
# 請使用 input() 輸入一個不多於五位的正整數 num
num=int(input())
# 請計算這個正整數的位數,並將每一位的數字都打印出來。
num1=str(num)
num_list=list(num1)
n=len(num1)
if n==1:
    print("一")
    print(num)
elif n==2:
    print("二")
    for i in range(n):
        print(num_list[i],end=" ")
elif n==3:
    print("三")
    for i in range(n):
        print(num_list[i],end=" ")
elif n==4:
    print("四")
    for i in range(n):
        print(num_list[i],end=" ")
          
elif n==5:
    print("五")
    for i in range(n):
        print(num_list[i],end=" ")


迴文數

請用程序實現
輸入一個五位數,判斷它是否是迴文數。如果是,輸出yes;如果不是,輸出no。

注意: 迴文數的個位與萬位相同,十位與千位相同。
示例 1

輸入 輸出
12321 yes

示例 2

輸入 輸出
12345 no
num = str(input())
newnum = num[::-1]
if num == newnum:
    print("yes")
else:
    print("no")


地鐵車票

購買地鐵車票的規定如下:

乘 1~4 站,3 元/位;
乘 5~9 站,4 元/位;
乘 9 站以上,5 元/位。

請用程序實現

輸入乘坐人數(per_num)和乘坐站數(sta_num),計算購買地鐵車票需要的總金額,並將計算結果輸出。

注意: 如果「乘坐人數」和「乘坐站數」爲0或負數,輸出error。
示例 1

輸入(使用換行分隔多數據輸入) 輸出
0
1
error

示例 2

輸入(使用換行分隔多數據輸入) 輸出
1
0
error

示例 3

輸入(使用換行分隔多數據輸入) 輸出
2
4
6
# 請使用 input() 輸入乘坐的人數 per_num 和站數 sta_num
per_num=int(input())
sta_num=int(input())

# 請判斷輸入的人數和站數是否正確,計算購買車票的總金額,並將計算結果輸出
if (per_num  <= 0 or sta_num <= 0):
    print("error")
else:
    if 1 <= sta_num <= 4:
        pm = 3
    if 5 <= sta_num <= 9:
        pm = 4
    if sta_num > 9:
        pm = 5
    print(pm * per_num)


判斷星期

每個星期對應的英語單詞都不同,星期一到星期天的單詞分別爲:monday、tuesday、wednesday、thursday、friday、saturday、sunday。

請用程序實現
輸入單詞的前兩個字符,判斷輸入的單詞是星期幾,並輸出對應的單詞;如果輸入的字符不匹配,則輸出error。

示例 1

輸入 輸出
tu tuesday

示例 2

輸入 輸出
mm error
# 請使用 input() 輸入單詞的前兩個字母 chars
chars = input()

# 請判斷輸入的是星期幾,並輸出對應的單詞
if chars=="mo":
    print("monday")
elif chars=="tu":
    print("tuesday")
elif chars=="we":
    print("wednesday")
elif chars=="th":
    print("thursday")
elif chars=="fr":
    print("friday")
elif chars=="sa": 
    print("saturday")
elif chars=="su":
    print("sunday")
else:
    print("error")
      


身體質量指數BMI

BMI :Body Mass Index 國際上常用的衡量人體肥胖和健康程度重要標準,主要用於統計分析‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬。BMI 的計算公式爲 BMI = 體重(kg) / (身高(m) * 身高(m))。
請用程序實現
獲取用戶輸入的體重和身高值,計算並給出國際和國內的 BMI 分類。

BMI值

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
(1) 混合計算並給出國際和國內的 BMI 分類;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
(2) 使用input()獲得測試用例輸入時,不要增加提示字符串。

示例 1

輸入 輸出
1.68
41
BMI數值爲:14.53
BMI指標爲:國際’偏瘦’, 國內’偏瘦’

示例 2

輸入 輸出
1.72
80
BMI數值爲:27.04
BMI指標爲:國際’偏胖’, 國內’偏胖’
height = eval(input())
weight = eval(input())
bmi = weight / height**2
print("BMI數值爲:{:.2f}".format(bmi))
if bmi < 18.5:
    print("BMI指標爲:國際'偏瘦',國內'偏瘦'")
elif bmi < 24:
    print("BMI指標爲:國際'正常',國內'正常'")
elif bmi < 25:
    print("BMI指標爲:國際'正常',國內'偏胖'")
elif bmi < 28:
    print("BMI指標爲:國際'偏胖',國內'偏胖'")
elif bmi <30:
    print("BMI指標爲:國際'偏胖',國內'肥胖'")
else:
    print("BBMI指標爲:國際'肥胖',國內'肥胖'")

height = eval(input())
weight = eval(input())
bmi = weight / pow(height, 2)
print("BMI數值爲:{:.2f}".format(bmi))
who, nat = "", ""
if bmi < 18.5:
    who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
    who, nat = "正常", "正常"
elif 24 <= bmi < 25:
    who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
    who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
    who, nat = "偏胖", "肥胖"
else:
    who, nat = "肥胖", "肥胖"
print("BMI指標爲:國際'{0}',國內'{1}'".format(who, nat))

乞丐

丐幫幫主去天橋乞討,並把每天乞討的錢都存起來。設幫主存款初始爲 0,且不使用這筆錢。
第一天乞討了 1 塊錢;第二天乞討了 2 塊錢;第三天乞討了 4 塊錢;第四天乞討了 8 塊錢;以此類推。

請用程序實現
輸入一個天數day,輸出幫主每天的存款餘額。

示例 1

輸入 輸出
3 1
3
7

示例 2

輸入 輸出
5 1
3
7
15
31
# 請使用 input() 輸入一個天數 day
day = int(input("請輸入一個天數: "))
 
# 計算幫主這些天的總收入,並將每天的總收入輸出
for i in range(1,day+1):
    s = 2**i - 1
    print(s)

水仙花數

"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如 153 = 1³ + 5³ + 3³,所以 153 是一個水仙花數。

請用程序實現
輸入一個三位數,找出100~num(含)中的所有水仙花數,並將找出的水仙花數從小到大輸出,每行輸出1個數

示例 1

輸入 輸出
200 153

示例 2

輸入 輸出
400 153
370
371
num = eval(input())
for i in range(100,num+1):
    a = str(i)
    if (pow(eval(a[0]),3) + pow(eval(a[1]),3) + pow(eval(a[-1]),3) == i):
        print(a)
# 請使用 input() 輸入一個三位數 num
num = int(input())

# 請找出 100 - num(含) 中的所有水仙花數,並將找出的水仙花數輸出
for i in range(100,num+1,1):
    a=i%10
    b=i%100//10
    c=i//100
    n=a*a*a+b*b*b+c*c*c
    if i==n:
        print(i)
   

籃球彈跳

籃球從一定高度向下掉落,每一次彈起的高度,都是前一次高度的一半。一次掉落和一次彈起極爲一次彈跳。假設籃球初始高度爲10米。

請用程序實現
輸入籃球彈跳的次數num,計算num次後籃球所在的高度,並將計算結果輸出。

示例 1

輸入 輸出
5 0.3125

示例 2

輸入 輸出
3 1.25
# 請使用 input() 輸入彈跳的次數 num
num = eval(input('請輸入彈跳的次數: '))
height = 10
# 請計算彈跳 num 次後的籃球高度,並將結果輸出
for i in range(num):
    height /=  2
print(height)


階乘

請用程序實現
輸入一個正整數num,計算這個正整數的階乘,並將計算結果輸出。

示例 1

輸入 輸出
5 120

示例 2

輸入 輸出
10 3628800
# 請使用 input() 輸入一個正整數 num
num = int(input())
count = 1
# 請計算這個正整數的階乘,並將計算結果輸出
for i in range(1,num+1):
    count *= i
print(count)



猴子摘桃

一隻猴子摘桃子, 第一天摘了兩個桃, 以後每天摘的是前一天的兩倍還多一個.

請用程序實現
輸入一個天數day,計算第day天它摘的個數,並將結果輸出。

示例 1

輸入 輸出
2 5

示例 2

輸入 輸出
9 767
# 請使用 input() 輸入一個天數 day
day = int(input('請輸入一個天數: '))
n = 2
# 請計算第 day 天猴子摘的桃子個數,並將結果輸出
for i in range(2,day+1):
    n = 2*n + 1
print(n)


冰雹猜想

請用程序實現
輸入一個大於1的正整數num; 如果num爲偶數, 就將它變爲num / 2; 如果num爲奇數, 就將它變爲3 * num + 1; 直到num爲1時停止。並將每一次運算的結果輸出。

示例 1

輸入 輸出
12 6
3
10
5
16
8
4
2
1

示例 2

輸入 輸出
8 4
2
1
# 請使用 input() 輸入一個整數 num
num = int(input("請輸入一個整數: "))

# 編寫程序驗證冰雹
while num != 1:
    if num % 2 == 0:
        num /= 2
        print(int(num))
    else:
        num = num * 3 + 1
        print(int(num))



忽略倍數

請用程序實現
輸入一個整數num,循環打印1(含)~num(含)中的整數,如果是3的倍數或5的倍數,則忽略。

示例 1

輸入 輸出
6 1
2
4

示例 2

輸入 輸出
11 1
2
4
7
8
11
# 請使用 input() 輸入一個整數 num
num = int(input('請輸入一個整數: '))
a = 1
# 請打印 1(含) - num(含) 中的整數,如果是 3 的倍數或 5 的倍數,則忽略
for i in range(1, num+1):
    if i % 3 == 0 or i % 5 == 0:
        print(end="")
    else:
        print(i)

素數

「質數」又稱素數,有無限個。素數定義爲在大於 1 的自然數中,除了 1 和它本身以外不再有其他因數的數稱爲素數。
例如17就是素數,因爲它不能被2 - 16的任一整數整除。

請用程序實現: 輸入一個大於 1 的整數num,輸出1~num(含)中的所有的素數(每行輸出1個素數,從小到大排列)。

示例 1

輸入 輸出
7 2
3
5
7

示例 2

輸入 輸出
20 2
3
5
7
11
13
17
19
# 請使用 input() 輸入一個整數 num
num = int(input('請輸入一個整數: '))
# 輸出 1 - num(含) 中的所有的素數
for i in range(2,num+1):
    fg=0
    for j in range(2,i-1):
        if i % j == 0:
            fg = 1
            break
    if fg == 0:
        print(i)


輸出九九乘法表

大家小時候都背過乘法表,乘法表是有規律的:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9

在這裏,你需要在循環裏面嵌套一個循環:外面的循環控制行數,裏面的循環控制每一行算式的個數。

想讓算式在同一行輸出,可以在 print 指令中加一個參數:

print(1, end=’ ')
print(2)

這樣,1 和 2 就打印在同一行上面了:

1 2

使用 print 輸出多個數字,輸出的內容之間會有空格:

print(1, 2, 3)

它將輸出:

1 2 3

如果不想讓輸出的內容之間有空格,可以使用格式化輸出:

print(’%sx%s’%(1, 1))

它將輸出:

1x1

它在字符串中使用 %s佔位,然後在字符串後面跟着 %(),在 () 中填寫需要的內容。

那麼接下來,我們就開始吧!
使用小寫的英文字母 x 表示數學中的 乘號。(也可以使用 * 表示乘號)
單個等式內部沒有空格,等式與等式之間空一個空格。

最終效果如下:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9

# 請在此處編寫你的程序
# 打印九九乘法表
 
for i in range(1, 10):
    for j in range(1, i+1):
        print('{}x{}={}\t'.format(j, i, i*j), end='')
    print()

隨機密碼生成

補充編程模板中代碼,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬
以整數 17 爲隨機數種子,獲取用戶輸入整數 N 爲長度,產生 3 個長度爲 N 位的密碼,密碼的每位是一個數字。每個密碼單獨一行輸出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

注意: 產生密碼採用random.randint()函數。

示例

輸入 輸出
3 634
524
926
#請在...補充代碼
import random
def genpwd(length):
    return random.randint(10**(length-1),10**length-1)
length = eval(input())
random.seed(17)
for i in range(3):
    print(genpwd(length))


猜數字

.random() 方法返回隨機生成的一個實數,它在 [0,1) 範圍內。這個實數是大於等於 0,小於 1 的,也就是說不會隨機生成 1。

我們如何使用它呢?看下面的代碼:

import random
 #生成一個[0,1)的隨機數 
 randomNum = random.random()

那麼我們想生成一個在 [0,100) 範圍內的隨機數呢?當然也是可以的,我們只需要將 random.random() 生成的隨機數擴大 100 倍就行了:

import random
# 生成一個[0,100)的隨機數
randomNum = random.random() * 100

注意: .random()是不能直接訪問的,需要導入 random 模塊,然後通過 random 靜態對象調用該方法。
同樣,random 模塊還有很多的方法,如:random.randint(1, 10) 將返回 1 - 10 之間的整數。
使用 python 實現猜數字遊戲,即系統隨機生成一個整數,通過input()函數,輸入整數,根據系統給出的提示猜數字。

要求:
1.隨機生成一個 1 - 100 之間的整數。
2.7 次猜數字的機會,如果沒有猜正確,遊戲結束。
3.輸入字母 q,則退出遊戲。

注意: 這不是自動評閱題目,僅用於練習,沒有評閱。

運行你的程序,執行效果如下所示:

您只有7次猜數字的機會哦!
這是第1次猜數字
請輸入數字:1
您輸入的數字太小了,您還有6次機會,請重新輸入!
這是第2次猜數字
請輸入數字:n
輸入的內容必須爲整數,請重新輸入!
這是第3次猜數字
請輸入數字:q
退出遊戲!

進一步改進程序

7 次可能太少,改成 10 次的話,如何調整程序?
0 - 100 的數太小了,如果要改爲 0 - 1000 怎麼調整代碼?

# 導入random模塊
import random

# 生成隨機數,並賦值給num變量
num = random.randint(1, 101)
# 定義 guess_chances 變量,初始化猜的次數
guess_chances = 7
print('您只有7次猜數字的機會哦!')
# 循環輸入的次數
for i in range(1, guess_chances + 1):
    print('這是第' + str(i) + '次猜數字')
    str1=input()
    if str1 == "q":
        print("退出遊戲!")
        break
    else:
        
        num1=int(str1)
        if num == num1:
            print("您猜對了")
            break
        if num < num1:
            print("您輸入的數字太大了,您還有%d次機會,請重新輸入!"%(7-i))
        if num > num1:
            print("您輸入的數字太小了,您還有%d次機會,請重新輸入!"%(7-i))
    
    # 實現對輸入數字的判斷



圓周率的計算

求解圓周率可以採用蒙特卡羅方法,在一個正方形中撒點,根據在 1/4 圓內點的數量佔總撒點數的比例計算圓周率值。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬圓周率
請用程序實現
請以 123 作爲隨機數種子,獲得用戶輸入的撒點數量,編寫程序輸出圓周率的值,保留小數點後 6 位。

示例

輸入 輸出
1024 3.218750
from random import random, seed
DARTS = eval(input())
seed(123)
hits = 0.0
for i in range(DARTS):
    x, y = random(), random()
    dist = pow(x ** 2 + y ** 2, 0.5)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits/DARTS)
print("{:.6f}".format(pi))

求pi的近似值

輸入精度 e,使用格雷戈裏公式求 π 的近似值,精確到最後一項的絕對值小於 e.

格雷戈裏公式如下:

π/4​ = 1 − 1/3 + 1/5 - 1/7 + 1/9 + ··· + 1/(2 * n - 1)

注意: n從 1 開始.

輸入格式:
輸入在一行中給出精度 e

輸出格式:
對於給定的輸入,在一行中輸出π的近似值。

示例 1

輸入 輸出
1 2.666666666666667

注意:1 的絕對值不小於 1,1/3 的絕對值小於 1,所以π = 4 * (1 - 1/3) = 2.666666666666667

示例 2

輸入 輸出
0.0001 3.1417926135957908
e = float(input())

# 請根據 e 計算 pi 的近似值
sum=0
n=1
sign=-1
sum = sum + sign / (2*n-1)
while abs(sign/(2*n-1))>=e:
    n=n+1
    sign=-sign
    sum=sum+sign/(2*n-1)
count=4*sum
print(count)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章