前言
一個(gè)學(xué)妹問我的11道python題,我就順手拿來做了下,發(fā)現(xiàn)有些題目還是很有意思的。
1
隨機(jī)生成一個(gè)在[5,10]區(qū)間內(nèi)的整數(shù)n,分別輸出如下圖所示的n行有規(guī)律字符圖。
【提示】
(I)隨機(jī)數(shù)生成需要導(dǎo)入random庫后調(diào)用randint(a,b)函數(shù);
(2)利用序列range()函數(shù),獲得字母編碼值,調(diào)用chr()函數(shù)將字母編碼值轉(zhuǎn)換成字母。
import random
n = random.randint(5, 10) # 隨機(jī)生成5到10之間的整數(shù)n
for i in range(1, n+1):
num_of_chars = 2 * i - 1 # 第i行有2i-1個(gè)字符
if i % 2 == 0: # 判斷當(dāng)前行數(shù)i是否為偶數(shù)
char = chr(97+i-1) # 偶數(shù)行字符為小寫字母i的大寫字母
else:
char = chr(97+i-1) # 奇數(shù)行字符為小寫字母i本身
line = char * num_of_chars # 構(gòu)造第i行的字符
print(line.center(n*2-1)) # 將第i行字符居中排列,并輸出
運(yùn)行結(jié)果
2
隨機(jī)生成一個(gè)在[5,10]區(qū)間內(nèi)的整數(shù)n,分別輸出如下圖所示的n行有規(guī)律字符圖。
【提示】
(1)隨機(jī)數(shù)生成需要導(dǎo)入random庫后調(diào)用randint(a,b)函數(shù);
(2)利用序列range()函數(shù),獲得字母編碼值,調(diào)用chr(0函數(shù)將字母編碼值轉(zhuǎn)換成字母。
(3)若n是奇數(shù),輸出如左圖所示的圖形;若n是偶數(shù),輸出如右圖所示的圖形。
import random
# 生成[5,10]范圍內(nèi)的隨機(jī)整數(shù)n
n = random.randint(5, 10)
# 根據(jù)n的奇偶性,選擇輸出A、B字母的范圍
if n % 2 == 0:
letter_range = range(65, 74) # A~I字母的編碼值
else:
letter_range = range(65, 73) # A~H字母的編碼值
# 輸出圖形
for i in range(n):
letter = chr(letter_range[i % len(letter_range)]) # 獲取當(dāng)前行應(yīng)輸出的字母
spaces = n - i - 1 # 計(jì)算當(dāng)前行前面應(yīng)輸出的空格數(shù)
print(' ' * spaces + letter * (2 * i + 1)) # 輸出當(dāng)前行
for i in range(n - 2, -1, -1):
letter = chr(letter_range[i % len(letter_range)]) # 獲取當(dāng)前行應(yīng)輸出的字母
spaces = n - i - 1 # 計(jì)算當(dāng)前行前面應(yīng)輸出的空格數(shù)
print(' ' * spaces + letter * (2 * i + 1)) # 輸出當(dāng)前行
運(yùn)行結(jié)果
3
輸入一個(gè)算術(shù)表達(dá)式,檢查其中的圓括號配對情況,輸出的信息如下圖所示。
輸入表達(dá)式:(3+4)*5-(6=
左括號多于右括號
提示:利用for語句遍歷整個(gè)表達(dá)式,分別統(tǒng)計(jì)左、右括號的數(shù)量。
def check_parentheses(expression):
# 創(chuàng)建一個(gè)空棧
stack = []
# 遍歷表達(dá)式中的每個(gè)字符
for char in expression:
# 如果是左括號,就壓入棧中
if char == "(":
stack.append(char)
# 如果是右括號,就和棧頂?shù)淖罄ㄌ柶ヅ洳棾?/span>
elif char == ")":
# 如果棧為空,說明右括號多于左括號
if not stack:
return "右括號多于左括號"
else:
stack.pop()
# 如果最后棧不為空,說明左括號多于右括號
if stack:
return "左括號多于右括號"
else:
return "圓括號是平衡的"
# 輸入一個(gè)算術(shù)表達(dá)式
expression = input("輸入表達(dá)式:")
# 調(diào)用函數(shù)檢查圓括號配對情況,并輸出結(jié)果
result = check_parentheses(expression)
print("輸出結(jié)果:", result)
運(yùn)行結(jié)果
4 和 5
輸入一個(gè)英文句子,各單詞間空格分隔,輸出最長的單詞及其長度。
提示:利用字符串的split方法,將單詞分離到列表中;然后遍歷列表時(shí)用len0函數(shù)求出最長的單
詞。
輸入任意位的正整數(shù),利用while語句將輸入的數(shù)按逆序顯示。例如,輸入15356輸出65351。
提示:將一個(gè)十進(jìn)制數(shù)x不斷地除以十取余數(shù),并將余數(shù)連接,直到x為0。
4
def find_longest_word(sentence):
# 將句子分割成單詞列表
words = sentence.split()
# 使用max函數(shù),以len為關(guān)鍵字參數(shù),找出最長的單詞
longest = max(words, key=len)
# 返回最長的單詞及其長度
return longest, len(longest)
# 輸入一個(gè)英文句子
sentence = input("輸入一個(gè)英文句子:")
# 調(diào)用函數(shù)找出最長的單詞及其長度,并輸出結(jié)果
word, length = find_longest_word(sentence)
print("輸出結(jié)果:")
print("最長的單詞是:", word)
print("它的長度是:", length)
運(yùn)行結(jié)果,這個(gè)有一個(gè)小問題就是句子中如果有標(biāo)點(diǎn)符號 也會算進(jìn)單詞里
5
num = int(input("請輸入一個(gè)正整數(shù):"))
reverse = 0 # 存儲翻轉(zhuǎn)后的數(shù)
while num > 0:
reverse = reverse * 10 + num % 10 # 將余數(shù)連接到reverse末尾
num //= 10 # 整除10,將num的最后一位刪除
print("逆序顯示的數(shù)為:", reverse)
運(yùn)行結(jié)果
6 和 7
計(jì)算下列級數(shù)的值,直到第項(xiàng)的值小于10的負(fù)4次方時(shí)結(jié)束。
計(jì)算P的近似值,計(jì)算公式為:
求n=1000時(shí)的值,并與數(shù)學(xué)庫提供的常數(shù)pi進(jìn)行驗(yàn)證。
6
# 定義遞推函數(shù)
def t(n):
# 如果n為0,返回1
if n == 0:
return 1
# 否則返回前一項(xiàng)加上n
else:
return t(n-1) + n
# 定義級數(shù)函數(shù)
def s():
# 初始化一個(gè)空列表
values = []
# 初始化i為0
i = 0
# 循環(huán)計(jì)算每一項(xiàng)的值,直到小于10的負(fù)4次方為止
while True:
# 計(jì)算第i項(xiàng)的值,并取倒數(shù)
value = 1 / t(i)
# 如果值小于10的負(fù)4次方,跳出循環(huán)
if value < 10 ** -4:
break
# 否則將值添加到列表中,并增加i的值
else:
values.append(value)
i += 1
# 返回滿足條件的項(xiàng)數(shù)和級數(shù)和(用sum函數(shù)求和)
return len(values), sum(values)
# 調(diào)用級數(shù)函數(shù)并打印結(jié)果
print(s())
運(yùn)行結(jié)果
我不確定對不對,結(jié)果是個(gè)141位小數(shù)
7
# 導(dǎo)入math模塊
import math
# 定義計(jì)算PI的函數(shù)
def pi(n):
# 初始化結(jié)果為2
result = 2
# 循環(huán)n次,計(jì)算每一項(xiàng)并累乘
for i in range(1, n + 1):
# 計(jì)算分子和分母
numerator = (2 * i) ** 2
denominator = (2 * i - 1) * (2 * i + 1)
# 計(jì)算每一項(xiàng)并累乘到結(jié)果中
result *= numerator / denominator
# 返回結(jié)果
return result
# 調(diào)用函數(shù),計(jì)算n=1000時(shí)的值,并打印出來
print(pi(1000))
# 打印math模塊提供的常數(shù)pi,并比較兩者是否相等(用round函數(shù)四舍五入到小數(shù)點(diǎn)后6位)
print(math.pi)
print(round(pi(1000), 6) == round(math.pi, 6))
運(yùn)行結(jié)果
8
編一程序,找出所有的水仙花數(shù)。所謂水仙花數(shù),是指一個(gè)3位數(shù),其名位數(shù)字的立方和等于該數(shù)
字本身。例如,153是水仙花數(shù),因?yàn)?53=13+53+33。
提示:解該題的方法有兩種:
(1)利用三重循環(huán),將三個(gè)一位數(shù)連接成一個(gè)3位數(shù)進(jìn)行判斷。
(2)利用單循環(huán)將一個(gè)3位數(shù)逐位分離后進(jìn)行判斷。
for num in range(100, 1000):
i = num // 100
j = (num // 10) % 10
k = num % 10
if num == i**3 + j**3 + k**3:
print(num)
運(yùn)行結(jié)果
9
求S_n=a+aa+aaa+aaa+.aa.aaa(n個(gè)a),其中a為1到9,n為5到10,通過鍵盤輸入。
例如:當(dāng)輸入a=2,n=7時(shí),
顯示:S_n=2+22+222+2222+22222+222222+2222222
提示:
(1)為了得到不斷重復(fù)a的n位的數(shù)Temp,可用如下程序段實(shí)現(xiàn):
temp=0
for i in range(1,n+1):
temp=temp*10+a
(2)不僅要顯示計(jì)算結(jié)果,還要輸出表達(dá)式,即輸出如下形式的式子:
s=2+22+222+2222+22222+222222+2222222=2469134
# 定義求S_n的函數(shù)
def s_n(a, n):
# 初始化結(jié)果為0
result = 0
# 初始化每一項(xiàng)為0
temp = 0
# 初始化表達(dá)式為空字符串
expression = ""
# 循環(huán)n次,計(jì)算每一項(xiàng)并累加到結(jié)果中
for i in range(1, n + 1):
# 計(jì)算每一項(xiàng),即不斷重復(fù)a的n位數(shù)
temp = temp * 10 + a
# 累加到結(jié)果中
result += temp
# 將每一項(xiàng)轉(zhuǎn)換為字符串,并添加到表達(dá)式中,用"+"號分隔
expression += str(temp) + "+"
# 去掉表達(dá)式最后多余的"+"號,并添加"="號和結(jié)果值
expression = expression[:-1] + "=" + str(result)
# 返回表達(dá)式和結(jié)果值(元組形式)
return (expression, result)
# 獲取鍵盤輸入的a和n的值,并轉(zhuǎn)換為整數(shù)類型(注意異常處理)
try:
a = int(input("請輸入a(1~9):"))
n = int(input("請輸入n(5~10):"))
except ValueError:
print("輸入錯(cuò)誤,請輸入整數(shù)")
else:
# 檢查a和n是否在合理的范圍內(nèi)(注意條件判斷)
if 1 <= a <= 9 and 5 <= n <= 10:
# 調(diào)用函數(shù),求S_n的值,并打印出來(注意解包元組)
result = 's=' + s_n(a, n)[0]
print(result)
運(yùn)行結(jié)果
10
利用枚舉法安排期末考試。期末考試在周一到周六的6天時(shí)間內(nèi)要考×、y、Z三門課程,考試課程順
序先考x,后考y,最后考z,規(guī)定一天只能考一門,且z課程最早安排在周五考。編寫程序列出滿足
條件的所有考試安排方案。
提示:利用枚舉法通過三重循環(huán)來解決。
for i in range(1, 7): # 枚舉周一到周六
for j in range(1, 7):
for k in range(1, 7):
if i != j and i != k and j != k: # 保證三門課程不在同一天考
if k == 5: # Z課程最早安排在周五考
print("X課程在周{}考,Y課程在周{}考,Z課程在周{}考".format(i, j, k))
運(yùn)行結(jié)果
11
猜數(shù)游戲。計(jì)算加隨機(jī)產(chǎn)生一個(gè)1~100之間的整數(shù),由用戶去猜,猜中即勝;猜不中,顯示提示信
息,繼續(xù)猜,直至猜中,顯示相關(guān)信息和次數(shù),如下圖所示。
輸入猜測的數(shù):50
50小
輸入猜測的數(shù):75
75大了
輸入猜測的數(shù):62
62小了
輸入猜測的數(shù):68
68小了
輸入猜測的數(shù):71
71大了
輸入猜測的數(shù):69
69小了
輸入猜測的數(shù):70
70恭喜你猜對了!你猜了7次文章來源:http://www.zghlxwxcb.cn/news/detail-722779.html
import random
num = random.randint(1, 100) # 隨機(jī)生成一個(gè)1~100之間的整數(shù)
count = 0 # 記錄猜測次數(shù)
while True:
guess = int(input("輸入猜測的數(shù):"))
count += 1
if guess < num:
print("{}小了".format(guess))
elif guess > num:
print("{}大了".format(guess))
else:
print("{}恭喜你猜對了!你猜了{(lán)}次".format(guess, count))
break
運(yùn)行結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-722779.html
到了這里,關(guān)于Python初學(xué)者必會的11道測試題,含代碼?。〉奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!