寫在前面的話:
題目來源: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]))