ucass2021期末編程模擬題


寫在前面的話:

題目來源:python123(選了一部分放上來)

雖然過了系統評測,但因為評測平台的評測數據過弱,不可保證代碼邏輯完美

盡力使得代碼算法最優,但由於題目設置的模糊性(不得不吐槽這些題目太爛了),為了保證代碼盡可能涵蓋最多可能性,使得算法未必針對數據最優(希望講清楚了)

說白了就是代碼可以優化

1.正整數的位數和逆序數

1)編寫代碼,輸入一個正整數,輸出該正整數的位數和逆序數。

1 a = input()
2 b = a
3 while a[-1]=='0':
4     a = a[:-1]
5 print("{}是{}位數,其逆序數為{}.".format(b,len(b),a[::-1]))
(a[::-1]好像是一種蠻高級的顛倒字符串的方法)

2.藏頭露尾詩

1)編寫代碼,分次輸入 4 句詩的每一句,每句字數相等,分別輸出每行頭字符串和尾字符串。

1 a = ''
2 b = ''
3 for i in range(4):
4     c = input()
5     a += c[0]
6     b += c[-2]
7 print(a)
8 print(b)

10.字符判定

1)編寫代碼,輸入單個字符,並根據以下規則進行處理:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果輸入的是一個數字字符,判定該數字的奇偶性;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果輸入的是一個小寫字母,輸出該字母對應的大寫字母;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果輸入的是一個大寫字母,輸出該字母對應的小寫字母;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果輸入的是其它字符,則輸出“輸入有誤”。

 1 a = input()
 2 if "0"<=a<="9":
 3     b = ord(a)-48
 4     if b%2==0:
 5         print("偶數")
 6     else:
 7         print("奇數")
 8 elif "a"<=a<="z":
 9     print(chr(ord(a)-32))
10 elif "A"<=a<="Z":
11     print(chr(ord(a)+32))
12 else:
13     print("輸入有誤")

11.起名器

1)編寫代碼,輸入名字長度(3或2),使用 random 模塊隨機生成一個姓名,隨機數種子為 0,姓名第一個字從 surname 中選擇,第二個字從 second 中選擇,第三個字從 third 中選擇。

 1 import random
 2 a = input()
 3 surname = '趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許'
 4 second = '中萬斯近元偉麗利國士文連百宏可立成海'
 5 third = '隆智渝順樂天傑夫煜兵思霆煒祺亮剴炫翔維瑞韜嘉林慶瑋'
 6 random.seed(0)
 7 if a == "3":
 8     print(random.choice(surname)+random.choice(second)+random.choice(third))
 9 else:
10     print(random.choice(surname)+random.choice(third))

16.判斷火車票座位

1)編寫代碼,輸入一個數字和一個字母組成的座位號,根據字母判斷位置是窗口、中間還是過道。目前中國高鐵窗口位置的字母是 'A' 和 'F',過道位置是 'C' 和  'D',中間位置是 'B'。每個車廂座位排數是1-17,輸入時不區分字母大小寫。根據輸入判定座位的位置,當輸入的數據不是一個合法的座位號時,輸出“座位號不存在”。

 1 a = input()
 2 
 3 if len(a)==3:
 4     b = (ord(a[0])-48)*10+ord(a[1])-48
 5     if b>17 :
 6         print("座位號不存在")
 7     else:
 8         if a[-1]=="a" or a[-1]=="A" or a[-1]=="f" or a[-1]=="F":
 9             print("窗口")
10         elif a[-1]=="c" or a[-1]=="C" or a[-1]=="D" or a[-1]=="d":
11             print("過道")
12         elif a[-1]=="b" or  a[-1]=="B":
13             print("中間")
14         else:
15             print("座位號不存")
16 elif len(a)==2:
17     if ord(a[0])-48==0:
18         print("座位號不存在")
19     else:
20         if a[-1]=="a" or a[-1]=="A" or a[-1]=="f" or a[-1]=="F":
21             print("窗口")
22         elif a[-1]=="c" or a[-1]=="C" or a[-1]=="D" or a[-1]=="d":
23             print("過道")
24         elif a[-1]=="b" or  a[-1]=="B":
25             print("中間")
26         else:
27             print("座位號不存")
28 else:
29     print("座位號不存在")

17.計算

1)編寫代碼,輸入一個正整數 n,輸出 1-1/2+1/3-1/4+1/5+……+1/n 的和,結果保留兩位小數,如果輸入的不是正整數則給出相應提示。

 1 n = eval(input())
 2 if n <= 0 or type(n) != int:
 3     print("請輸入正整數")
 4 else:
 5     sum = 0
 6     for i in range(n):
 7         j = i+1
 8         if j%2 != 0:
 9             sum += 1/j
10         else:
11             sum -= 1/j
12     print("表達式的和為{:.2f}".format(sum))

18.組合(排列)

1)編寫代碼,輸入一個正整數 N,輸出集合 1~N 的所有 3 個元素的排列。

 1 n = eval(input())
 2 num = 0
 3 for x in range(1,n+1):
 4     for y in range(1,n+1):
 5         if y == x:
 6             continue
 7         for z in range(1,n+1):
 8             if z == x or z == y:
 9                 continue
10             num += 1
11             print("{}:{},{},{}".format(num,x,y,z))
12 print("共有{}種排列".format(num))

21.棋子回位

1)假定一枚棋子在棋盤上的移動方向用’東南西北’來表示,每次移動的距離相等。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

現在輸入一個字符串,保存有該棋子的移動順序,判斷該棋子在執行完該步驟序列后能夠回到起點。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

字符串只有‘東‘’南‘’西‘’北’四種字符組成‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬,輸出‘是’ 或者‘否’,分別代表是否回到起點。

 1 x = 0
 2 y = 0
 3 a = input()
 4 for i in a:
 5     if i == "":
 6         x += 1
 7     elif i == "":
 8         y -= 1
 9     elif i == "西":
10         x -= 1
11     else:
12         y += 1
13 if x==0 and y==0:
14     print("")
15 else:
16     print("")

22.數列求和

1)編寫代碼,輸入一個小於 10 的整數 n,計算形如 1 + 12 + 123 + 1234 + …… 算式的前 n 項的和。

 1 import math
 2 n = eval(input())
 3 sum = 0
 4 for i in range(1,n+1):
 5     m = 0
 6     for j in range(1,i+1):
 7         
 8         m += j*math.pow(10,i-j)
 9         
10     sum += m
11 print(int(sum))

25.大小寫轉換

1)編寫代碼,輸入一個字符串,將其中大寫字母轉為小寫,小寫字母轉為大寫,其他字符保持原樣,輸出轉換后的字符串。

 1 a = input()
 2 b = ""
 3 for i in range(len(a)):
 4     if "a"<a[i]<"z":
 5         b += chr(ord(a[i])-32)
 6     elif "A"<a[i]<"Z":
 7         b += chr(ord(a[i])+32)
 8     else:
 9         b +=a[i]
10 print(b)

26.從 1 到 n 整數中 1 的個數

1)編寫代碼,輸入一個正整數 n ,求出 1~n 的整數中 1 出現的次數。

1 sum = 0
2 n = eval(input())
3 for i in range(1,n+1):
4     a = str(i)
5     for j in a:
6         if j == "1":
7             sum += 1
8 print(sum)

28.刪除列表元素

1)編寫代碼,輸入位置,刪除給定列表 [('a',3,5),('b',1,6),('c',0,3),('d',9,2),('e',5,1),('f',0,7),('g',6,8)] 中的指定位置元素,如果位置不存在,則輸出“沒有該元素”,然后對列表按每個元素中最后一項降序排序。

 1 ls = [('a',3,5),('b',1,6),('c',0,3),('d',9,2),('e',5,1),('f',0,7),('g',6,8)]
 2 #哈哈哈這個做法好惡心但是我好喜歡哈哈哈
 3 lt = [('g',6,8),('f',0,7),('b',1,6),('a',3,5),('c',0,3),('d',9,2),('e',5,1)]
 4 
 5 n = eval(input())
 6 if n > 6:
 7     print("沒有該元素")
 8 else:
 9     m=ls.pop(n-1)
10     print("刪除后的列表為{}".format(ls))
11     lt.remove(m)
12 print("排序后的列表為{}".format(lt))

29.操作表達式(操作算式)

1)編寫代碼,輸入形如 "3+5+2+16+8+2" 的算式,輸出形如 "16.8.5.3.2.2" 的結果,結果里的數字是輸入算式里數字的逆序。

 1 a = input()
 2 ls = []
 3 
 4 n = ""
 5 for i in a:
 6     if i == "+":
 7         ls.append(int(n))
 8         n = ""
 9     else:
10         n += i
11 ls.append(int(n))
12 
13 ls.sort(reverse=True)
14 for i in range(len(ls)-1):
15     print(ls[i],end=".")
16 print(ls[-1])

30.查找數列中重復數字

1)編寫代碼,輸入以逗號分隔的若干整數,以列表形式從小到大輸出其中的重復數字

 1 a = input()
 2 ls = []
 3 l = []
 4 n = ""
 5 for i in a:
 6     if i == ",":
 7         ls.append(int(n))
 8         n = ""
 9     else:
10         n += i
11 ls.append(int(n))
12 
13 ls.sort()
14 lt = set(ls)
15 for i in lt:
16     if ls.count(i) >=2 :
17         l.append(i)
18 print(l)

31.人員信息處理

1)編寫代碼,從鍵盤輸入以空格分隔的一組人員的姓名、性別、年齡信息,每人一行,空行結束輸入,分性別以列表形式輸出人員信息(缺失性別不輸出)。

 1 lb = [] 
 2 lg = []
 3 a = input()#輸入一行
 4 while(a != ""):
 5     l = []
 6     m = ""
 7     for i in a:
 8         if i == " ":
 9             l.append(m)
10             m = ""
11         else:
12             m += i
13     l.append(m)
14     
15     if l[1]=="":
16         lb.append(l)
17     elif l[1]=="":
18         lg.append(l)
19     else:
20         continue
21     
22     a = input() 
23 if lb != []:
24     print(lb)    
25 if lg != []:
26     print(lg)

32.密碼驗證

1)編寫代碼,從鍵盤輸入列表形式的密碼,根據下列規則對密碼進行驗證,輸出符合規則的密碼。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         * 至少包含1個大寫字母
         * 至少包含1個數字
         * 至少包含 $#@* 的一個字符
         * 密碼長度最短為8位

 1 a = eval(input())
 2 for i in a:
 3     if len(i) < 8:
 4         continue
 5     x = 0
 6     y = 0
 7     z = 0
 8     for j in i:
 9         if "A"<=j<="Z":
10             x = 1
11         elif "1"<=j<="9":
12             y = 1
13         elif j == '$' or j == '#' or j == '@' or j == '*':
14             z = 1
15         else :
16             continue
17     if x*y*z != 0:
18         print(i)

34.求不重復元素的列表

1)編寫程序,從鍵盤輸入一個的列表,輸出去重(只保留第一次出現的元素)后的列表和重復的元素的個數。

 1 a = eval(input())
 2 b = a.copy()
 3 c = [] 
 4 num = 1
 5 for i in b:
 6     if a.count(i) > 1:
 7         num+=1
 8         c.append(i)
 9         while(a.count(i) >= 1):
10             a.remove(i)
11     elif a.count(i) == 1:
12         c.append(i)
13 print(c)
14 print("重復元素有{}個".format(num))

35.求兩個列表的向量積

1)編寫程序,從鍵盤輸入一個整數 n 作為向量的長度,然后輸入 n 個整數,以逗號隔開,夠成一個向量 x;再輸入 n 個整數,以逗號隔開,構成另一個向量 y,計算向量 x 和 y 的內積。如果輸入的向量長度和向量不匹配時,給出錯誤提示。向量的內積為兩個向量的對應元素的乘積的和,計算公式如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 1 def ls(a,lx):
 2     t = ""
 3     for i in a:
 4         if i == ",":
 5             lx.append(int(t))
 6             t = ""
 7         else:
 8             t += i
 9     lx.append(int(t))
10     
11 n = eval(input())
12 a = input()
13 b = input()
14 lx = []
15 ly = []
16 ls(a,lx)
17 ls(b,ly)
18 if len(lx) != n or len(ly) != n:
19     print("錯誤,向量對應元素數量不等於n。")
20 else:
21     sum = 0
22     for i in range(n):
23         sum += lx[i]*ly[i]
24     print("x和y的內積是: {}".format(sum))

 

36.職位津貼計算

1)編寫代碼,輸入員工編號,並根據給定的映射關系計算津貼總額,如果輸入為空,則輸出“請輸入數據,例如:A01,B02”。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

d1 = {'經理': 1000, '主管': 800, '職員': 500} d2 = {'經理': ['A01'], '主管': ['B01', 'B02'], '職員': ['C01', 'C02', 'C03']}
 1 d1 = {'經理': 1000, '主管': 800, '職員': 500}
 2 d2 = {'經理': ['A01'], '主管': ['B01', 'B02'], '職員': ['C01', 'C02', 'C03']}
 3 a = input()
 4 if a == "":
 5     print("請輸入數據,例如:A01,B02")
 6 else:
 7     lx = []
 8     t = ""
 9     for i in a:
10         if i == ",":
11             lx.append(t)
12             t = ""
13         else:
14             t += i
15     lx.append(t)
16     sum = 0 
17     for i in lx:
18         for j in d2:
19             if i in d2[j]:
20                 sum += d1[j]
21     print("津貼總額為{}元".format(sum))

 

37.字頻降序‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

1)編寫代碼,輸入一個句子,對句子中字符的出現次數進行統計,然后將句子中的字符按頻次降序進行輸出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

2)運行結果如下圖所示。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

 1 a = input()
 2 c = {}
 3 #get()方法語法:
 4 #dict.get(key, default=None)
 5 #key -- 字典中要查找的鍵。
 6 #default -- 如果指定鍵的值不存在時,返回該默認值。
 7 for i in a:
 8     c[i] = c.get(i,0) + 1
 9 d = list(c.items())
10 # 將字典d按value的值進行排序    key=lambda x: x[1]  實現
11 d.sort(key=lambda x:x[1],reverse=True)
12 ls = []
13 for i in d:
14     ls.append(i[0])
15 print(" - ".join(ls))

補充:" ".join(x) :將列表轉為字符串," "中參數確定間隔符

 

39.水果統計

 

1)編寫代碼,輸入一行以空格分隔的水果名稱,統計各類型水果的數量並按照數量從多到少進行輸出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

2)運行結果如下圖所示。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

 

 1 a = input()
 2 b = a.split(" ")
 3 c = {}
 4 #get()方法語法:
 5 #dict.get(key, default=None)
 6 #key -- 字典中要查找的鍵。
 7 #default -- 如果指定鍵的值不存在時,返回該默認值。
 8 for i in b:
 9     c[i] = c.get(i,0) + 1
10 d = list(c.items())
11 # 將字典d按value的值進行排序    key=lambda x: x[1]  實現
12 d.sort(key=lambda x:x[1],reverse=True)
13 
14 for i in d:
15     print("{}:{}".format(i[0],i[1]))

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM