升級作業: 程式: 三級菜單 要求: ...
# Python基礎數據類型考試題 # 考試時間:兩個半小時 滿分100分(80分以上包含80分及格) # 一,基礎題。 # 1, 簡述變數命名規範(3分) # 1、變數由字母、數字、下劃線任意組成 # 2、不能以數字開頭 # 3、不能使用python關鍵字 # 4、變數要具有可描述性 # 5、變數不能是中文 # 5、官網推薦駱峰體和下劃線,這裡推薦下劃線 # 2,位元組和位的關係。(2分) # 1位元組 = 8位 # 3,’太白’使用utf-8編碼時,占的位數和位元組數,是多少?使用gbk編碼時,占的位數 # 和位元組數,是多少。(2分) # 太白 utf-8 位數:48 位元組:6 # gbk 位數:32 位元組:4 # 4,默寫字元串的十二個功能,並描述其作用。(12分) # 1、capitalize() 首字母大寫 # 2、upper() 字元串全部大寫 # 3、lower() 字元串全部小寫 # 4、format() 格式化輸出 # 5、strip() 去字元串左右空格,tab,換行符 # 6、replace() 字元串替換 # 7、lstrip() 去字元串左邊空格,tab,換行符 # 8、rstrip() 去字元串右邊邊空格,tab,換行符 # 9、startswith() 檢測字元串是否是相同的開頭,結果是True,False # 10、endswith() 檢測字元串是否是相同的結尾,結果是True,False # 11、swapcase() 字元串大小寫翻轉 # 12、title() 字元串每個由非字母隔開的單詞首字母大寫 # 13、isdigit() 是否全部是數字 # 14、isalpha() 是否全部是字母 # 15、isalnum() 是否數字字母組成 # 16、count() 個數 # 17、center() 居中,可以填寫填充物 # 5,數字,字元串,列表,元祖,字典對應的布爾值的False分別是什麼?(5分) # 數字:0 # 字元串:空字元串 # 列表:空列表 # 元組:空元組 # 字典:空字典 # 6,書寫Python2與python3中的三個不同。(3分) # python2:代碼混亂、冗餘 ASCII 交互:raw_input() # python3:代碼簡明、優美 UTF-8 交互:input() # 7,寫代碼,有如下列表,利用切片實現每一個功能(每題一分,共計4分) # li = [1,3,2,’a’,4,’b’,5,’c’] # 1)通過對li列表的切片形成新的列表l3,l3 = [’1,2,4,5] # 2)通過對li列表的切片形成新的列表l4,l4 = [3,’a’,’b’] # 3)通過對li列表的切片形成新的列表l5,l5 = [‘c’] # 4)通過對li列表的切片形成新的列表l6,l6 = [‘b’,’a’,3] # 1 # l3 = li[::2] # 2 # l4 = li[1:-2:2] # 3 # l5 = li[-1:] # 4 # l6 = li[-3::-2] # 8,組合嵌套題。 # a,寫代碼,有如下列表,按照要求實現每一個功能(每題3分,寫出一種方法得1分,寫出兩種方法的3分。此題共9分) # (每個都是一行代碼實現) # lis = [[‘k’,[‘qwe’,20,{‘k1’:[‘tt’,3,’1’]},89],’ab’]] # 1)將列表lis中的’tt’變成大寫(用兩種方式)。 # 2)將列表中的數字3變成字元串’100’(用兩種方式)。 # 3)將列表中的字元串’1’變成數字101(用兩種方式)。 # 1 # lis[0][1][2]['k1'][0] = lis[0][1][2]['k1'][0].upper() # lis[0][1][2]['k1'][0] = 'TT' # 2 # lis[0][1][2]['k1'][1] = str(lis[0][1][2]['k1'][1] + 97) # lis[0][1][2]['k1'][1] = '100' # 3 # lis[0][1][2]['k1'][2] = 101 # lis[0][1][2]['k1'][2] = int( '10' + lis[0][1][2]['k1'][2]) # b,寫代碼,有如下字典,按照要求實現每一個功能(5分) # dic = {‘k1’:’v1’,’k2’:[‘alex’,’sb’],(1,2,3,4,5):{‘k3’:[‘2’,100,’wer’]}} # 1)將’k2’對應的值的最後面添加一個元素’23’。 # 2)將’k2’對應的值的第一個位置插入一個元素’a’。 # 3)將(1,2,3,4,5)對應的值添加一個鍵值對’k4’,’v4’。 # 4)將(1,2,3,4,5)對應的值添加一個鍵值對(1,2,3),’ok’。 # 5)將’k3’對應的值的’wer’更改為’qq’。 # # 1 # dic = {'k1':'v1','k2':['alex','sb'],(1,2,3,4,5):{'k3':['2',100,'wer']}} # dic['k2'].append('23') # # 2 # dic['k2'].insert(0,'a') # # 3 # dic[(1,2,3,4,5)]['k4'] = 'v4' # # 4 # dic[(1,2,3,4,5)][(1,2,3)] = 'ok' # # 5 # dic[(1,2,3,4,5)]['k3'][2] = 'qq' # 9,轉化題(4分)。 # # Int與str之間如何轉化,轉換的結果是什麼?有沒有條件? #int加''變成str str必須是數字才能轉化為int # Int 與 bool之間如何轉化,轉換的結果是什麼?有沒有條件? # False---->int 0 True---->int 1 # 非0即為真,0為假 # str 與 bool之間如何轉化,轉換的結果是什麼?有沒有條件? #空字元串轉化為bool值為False 其他為True # str 與 list 能否轉化?如何轉化? #能轉化,用split # 10,實現下列結果(5分)。 # 1)有列表li = [‘alex’,’wusir’,’rain’]通過操作該列表構造一個字元串s=’alexwusirrain’ # 2)有列表li = [‘alex’,’wusir’,’rain’]通過操作該列表構造一個字元串s=’alex*wusir*rain’ # 3)有字元串s = ‘alexwusirlex’,通過操作該字元串構造一個列表li = [‘a’,’exwusirlex’] # 4)有字元串s = ‘alex wusir’,通過操作該字元串構造一個列表li = [‘alex’,’wusir’] # 5)有字元串s = ‘alex’通過操作該字元串構造一個字元串s1 = ‘a_l_e_x’ li = ['alex','wusir','rain'] # 1 s = li[0]+li[1]+li[2] # 2 s = '*'.join(li) # 3 li = s.split("l",1) # 4 li = s.split(' ') # 5 s1 = '_'.join(s) # 11,分別使用while迴圈,和for迴圈列印1-2+3-4+5.......+99的結果。(10分) # 第一種 i = 1 summ = 0 while i < 100: if i % 2 == 0: summ -= i else: summ += i i += 1 print(summ) # 第二種 summ = 0 for i in range(1,100): if i % 2 == 0: summ -= i else: summ += i print(summ) # 12,使用range列印100,99,98,....1,0(2分) # for i in range(100,-1,-1): # print(i) # 13,計算用戶輸入內容中索引為奇數並且對應的元素為數字的個數(沒有則個數為零)(6分) count =0 num_input = input('請輸入內容:') for i,v in enumerate(num_input): if i % 2 == 1 and v.isdigit(): count += 1 print(count) # 14,補充代碼(從已有的代碼下麵繼續寫):(6分) # 有如下值li= [11,22,33,44,55,77,88,99,90],將所有大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。 # li = [11,22,33,44,55,77,88,99,90] # result = {} # for row in li: # ...... li = [11,22,33,44,55,77,88,99,90] result = {} for row in li: result.setdefault('k1',[]) result.setdefault('k2',[]) if row > 66: result['k1'].append(row) elif row < 66: result['k2'].append(row) print(result) # 15,查找列表li中的元素,移除每個元素的空格,並找出以’A’或者’a’開頭,並以’c’結尾的所有元素,並添加到一個新列表中,最後迴圈列印這個新列表。(3分) # li = [‘taibai ’,’alexC’,’AbC ’,’egon’,’ Ritian’,’ Wusir’,’ aqc’] li = ['taibai ','alexC','AbC ','egon',' Ritian',' Wusir',' aqc'] l1 = [] for i in li: i = i.strip() if i.upper().startswith('A') and i.endswith('c'): l1.append(i) print(l1) # 16,實現一個整數加法計算器:(3分) # 如:content = input(‘請輸入內容:’) # 如用戶輸入:5+8+7....(最少輸入兩個數相加),然後進行分割再進行計算,將最後的計算結果添加到此字典中(替換None): # dic={‘最終計算結果’:None}。 content = input('請輸入內容:') dic = {'最終計算結果':None} sum = 0 str = content.split('+') for i in str: sum = sum + int(i) dic['最終計算結果'] = sum print(dic) # 17,按要求完成下列轉化(如果按照索引去做,只能得4分)。(6分) # list3 = [ # {"name": "alex", "hobby": "抽煙"}, # {"name": "alex", "hobby": "喝酒"}, # {"name": "alex", "hobby": "燙頭"}, # {"name": "alex", "hobby": "Massage"}, # {"name": "wusir", "hobby": "喊麥"}, # {"name": "wusir", "hobby": "街舞"}, # ] # # 如何把上面的列表轉換成下方的列表? # list4 = [ # {"name": "alex", "hobby_list": ["抽煙", "喝酒", "燙頭", "Massage"]}, # {"name": "wusir", "hobby_list": ["喊麥", "街舞"]}, # ] list3 = [ {"name": "alex", "hobby": "抽煙"}, {"name": "alex", "hobby": "喝酒"}, {"name": "alex", "hobby": "燙頭"}, {"name": "alex", "hobby": "Massage"}, {"name": "wusir", "hobby": "喊麥"}, {"name": "wusir", "hobby": "街舞"}, ] list4 = [] list4.append({}) list4.append({}) list5 = [] list6 = [] dic = {} for i in list3: if i["name"] == "alex": for j in i.values(): if j != 'alex': list5.append(j) elif i["name"] == "wusir": for k in i.values(): if k != 'wusir': list6.append(k) list4[0].setdefault("name","alex") list4[0].setdefault("hobby_list",list5) list4[1].setdefault("name","wusir") list4[1].setdefault("hobby_list",list6) print(list4) # 18,寫程式:模擬公司hr錄入員工賬號密碼的程式。(10分) # 1),員工的賬號密碼存儲在這種數據類型中: # user_list = [ # {'username':'barry','password':'1234'}, # {'username':'alex','password':'asdf'}, # ......... # ] # 2)非法字元模板:board = ['張三','李小四','王二麻子'] # 3)Hr輸入用戶名,密碼(可持續輸入,如果想終止程式,那就在輸入用戶名時輸入Q或者q退出程式),在Hr輸入用戶名時,檢測此用戶名是否有board裡面的非法字元,如果有非法字元,則將非法字元替換成同數量的*(如王二麻子替換成****),然後添加到user_list中,如果沒有非法字元,則直接添加到user_list中,每次添加成功後,列印出剛添加的用戶名,密碼。 user_list = [] t = 0 board = ['張三','李小四','王二麻子'] flag = True while flag: name = input("請輸入姓名:退出請按Q/q").strip() if name.upper() == 'Q': flag = False else: passwd = input("請輸入密碼") for i in board: if i in name: name = name.replace(i,len(i)*'*') print(name,passwd) user_list.append({}) user_list[t]['username'] = name user_list[t]['password'] = passwd t += 1 print(user_list)
周末作業。
寫一個購物車,寫完了的寫三級菜單。
購物車
功能要求:
要求用戶輸入總資產,例如:2000
顯示商品列表,讓用戶根據序號選擇商品,加入購物車
購買,如果商品總額大於總資產,提示賬戶餘額不足,否則,購買成功。
goods = [{"name": "電腦", "price": 1999},
{"name": "滑鼠", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
while True: money = input("請輸入總資產:").strip() if money.isdigit(): break else:print("\033[1;31;43m總資產輸入錯誤,請重新輸入\033[0m") money = int(money) money1 =money buy = [] goods = [{"name": "電腦", "price": 1999}, {"name": "滑鼠", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ] pr = "price" na = "name" while True: print("請選擇如下商品".center(50,"*")) for i,j in enumerate(goods,1): print("編號{}\t\t商品名稱:{}\t\t商品價格{}".format(i,j[na],j[pr])) print("*"*55) number = input("請輸入要買商品的編號(充值請按\033[0;31mC/c\033[0m,刪除請按\033[0;31mD/d\033[0m,退出請按\033[0;31mQ/q\033[0m):").strip() if number.isdigit(): number = int(number) if number <= len(goods): if goods[number-1][pr] <= money: buy.append(goods[number-1]) money -= goods[number-1][pr] print("已經添加購物車 \033[0;31m%s\033[0m ,剩餘總資產 \033[0;31m%d\033[0m" % (goods[number-1][na],money)) else:print("\033[1;31;43m賬戶餘額不足\033[0m") else:print("\033[1;31;43m編號超出範圍\033[0m") elif number.upper() == "Q": if buy: print("您購買的商品有:") for k in buy: print(k[na]) print("總消費 \033[0;31m%d\033[0m" % (money1-money)) else: print("\033[1;31;43m您購物車為空\033[0m") break elif number.upper() == "C": while True: money2 = input("請輸入充值金額:") if money2.isdigit(): money2 = int(money2) money += money2 print("充值成功,剩餘總資產 \033[0;31m%d\033[0m" % money) break else:print("\033[1;31;43m充值金額不合法\033[0m") elif number.upper() == "D": if buy: print("購物車商品".center(50, "*")) for l,m in enumerate(buy,1): print("編號{}\t\t商品名稱:{}\t\t商品價格{}".format(l,m[na],m[pr])) print("*"*55) delate = input("請輸出要刪除商品的編號").strip() if delate.isdigit(): delate = int(delate) if delate <= len(buy): del buy[delate-1] print("\033[1;31;43m已刪除成功\033[0m") else:print("\033[1;31;43m輸出的編號超出範圍\033[0m") else:print("\033[1;31;43m輸出的編號不合法\033[0m") else:print("\033[1;31;43m購物車為空\033[0m") else:print("\033[1;31;43m輸出的參數錯誤\033[0m")
升級作業:
程式: 三級菜單
要求:
- 列印省、市、縣三級菜單
- 可返回上一級
- 可隨時退出程式
menu = {"河北省":{"石家莊":["新華區","橋西區橋東區","長安區"], "唐山市":["路北區","路南區","古冶區"], "秦皇島市":["海港區","山海關區","盧龍縣"]}, "江蘇":{"南京市":["玄武區","下關區","六合區","溧水縣"], "無錫市":["崇安區","北塘區","南長區","錫山區"] } } flag = True menu_list1 = list(menu.keys()) address_list = [] while flag: for i,j in enumerate(menu_list1,1): print(i,j) address_input = input("請輸入要查詢的編號,退出請按Q/q").strip() if address_input.isdigit(): address_input = int(address_input) if address_input <= len(menu_list1): while flag: addree_number1 = menu_list1[address_input-1] menu_list2 = list(menu[addree_number1].keys()) for k,l in enumerate(menu_list2,1): print(k,l) address2_input = input("請輸入要查詢的編號,返回請按B/b,退出請按Q/q").strip() if address2_input.isdigit(): address2_input = int(address2_input) if address2_input <= len(menu_list2): while flag: addree_number2 = menu_list2[address2_input-1] for m,n in enumerate(menu[addree_number1][addree_number2],1): print(m,n) addree3_input = input("返回請按B/b,退出請按Q/q") if addree3_input.upper() == 'B': break elif addree3_input.upper() == 'Q': flag = False else:print("輸入不合法") else:print("輸入編號超出範圍") elif address2_input.upper() == 'B': break elif address2_input.upper() == 'Q': flag = False else:print("輸入不合法") else:print("輸入編號超出範圍") elif address_input.upper() == 'Q': break else:print("輸入不合法")