Part 1 習題
1、簡述編譯型與解釋型語言的區別,且分別列出你知道的哪些語言屬於編譯型,哪些屬於解釋型 2、執行 Python 腳本的兩種方式是什么 3、Pyhton 單行注釋和多行注釋分別用什么? 4、布爾值分別有什么? 5、聲明變量注意事項有那些? 6、如何查看變量在內存中的地址? 7、寫代碼 (1) 實現用戶輸入用戶名和密碼,當用戶名為 seven 且 密碼為 123 時,顯示登陸成功,否則登陸失敗! (2)實現用戶輸入用戶名和密碼,當用戶名為 seven 且 密碼為 123 時,顯示登陸成功,否則登陸失敗,失敗時允許重復輸入三次 (3)實現用戶輸入用戶名和密碼,當用戶名為 seven 或 alex 且 密碼為 123 時,顯示登陸成功,否則登陸失敗,失敗時允許重復輸入三次 8、寫代碼 a. 使用while循環實現輸出2-3+4-5+6...+100 的和 b. 使用 while 循環實現輸出 1,2,3,4,5, 7,8,9, 11,12 c. 使用while 循環輸出100-50,從大到小,如100,99,98...,到50時再從0循環輸出到50,然后結束 d. 使用 while 循環實現輸出 1-100 內的所有奇數 e. 使用 while 循環實現輸出 1-100 內的所有偶數 9、現有如下兩個變量,請簡述 n1 和 n2 是什么關系? n1 = 123456 n2 = n1 10、制作趣味模板程序(編程題) 需求:等待用戶輸入名字、地點、愛好,根據用戶的名字和愛好進行任意顯示 如:敬愛可愛的xxx,最喜歡在xxx地方干xxx 11、輸入一年份,判斷該年份是否是閏年並輸出結果。(編程題) 注:凡符合下面兩個條件之一的年份是閏年。 (1) 能被4整除但不能被100整除。 (2) 能被400整除。 12、假設一年期定期利率為3.25%,計算一下需要過多少年,一萬元的一年定期存款連本帶息能翻番?(編程題) 13、使用while,完成以下圖形的輸出 *
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
14、路飛決定根據銷售額給員工發提成,提成為階梯制,假設一個銷售人員基本工資為3000元, 每月業績低於5萬元,無提成,5萬至10萬,提成3%,10萬至15萬提成5%,15萬-25萬提成8%,25萬至35萬提成10%,35萬以上,提成15%。 從鍵盤獲取用戶當月業績,計算其工資+提成的總額。 15、北京地鐵交通價格調整為:6公里(含)內3元;6公里至12公里(含)4元;12公里至22公里(含)5元;22公里至32公里(含)6元;32公里以上部分, 每增加1元可乘坐20公里。使用市政交通一卡通刷卡乘坐軌道交通,每自然月內每張卡支出累計滿100元以后的乘次價格給予8折優惠;滿150元以后的乘次給予5折優惠,假設每個月,小明都需要上20天班,每次上班需要來回1次,即每天需要乘坐2次同樣路線的地鐵,編寫程序,從鍵盤獲取距離,幫小明計算每月的總花費。 16、一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高? 綜合作業: 編寫登陸接口 基礎需求: 讓用戶輸入用戶名密碼 認證成功后顯示歡迎信息 輸錯三次后退出程序
升級需求: 可以支持多個用戶登錄 (提示,通過列表存多個賬戶信息) 用戶3次認證失敗后,退出程序,再次啟動程序嘗試登錄時,還是鎖定狀態(提示:需把用戶鎖定的狀態存到文件里)
Part2 習題一參考答案
1:

編譯型語言:
使用專門的編譯器,針對特定的平台,將高級語言源代碼一次性的編譯成可被該平台硬件執行的機器碼,並包裝成該平台所能識別的可執行性程序的格式。
特點:
在編譯型語言寫的程序執行之前,需要一個專門的編譯過程,把源代碼編譯成機器語言的文件。
執行方式:
源代碼 --> 編譯(一次)--> 目標代碼 --> 執行(多次)-->輸出
解釋型語言:
使用專門的解釋器對源程序逐行解釋成特定平台的機器碼並立即執行。
特點:
解釋型語言不需要事先編譯,其直接將源代碼解釋成機器碼並立即執行,所以只要某一平台提供了相應的解釋器即可運行該程序。
執行方式:
源代碼 --> 解釋器(每次執行都需要解釋)--> 輸出
編譯型:C、C++、C#
解釋型:Python、PHP、Rudy、Java
2:

方式一:
./hello.py.shell shell直接調用python腳本,shell把hello.py當成一般的腳本看待,不把它當成Python腳本。
示例:
#!/usr/bin/env python #指出代碼的執行程序,同時為了防止操作系統用戶沒有將python裝在默認的/usr/bin路徑里 ,此時首先會到env設置里查找python的安裝路徑,再調用對應路徑下的解釋器程序完成操作。
#-*- coding:utf-8 -*- #聲明編碼
print("Hello world!\n") # 輸出:Hello world!
方式二:
python hello.py 調用Python解釋器來調用Python腳本
示例:
#! /usr/bin/env python #此時可不需要
# -*- coding:utf-8 -*-
print("Hello world!\n")
3:

單行注釋:#
多行注釋:''' ''' 或 """ """
4:

布爾值:True 和 False
布爾值為False的有:[] 、()、{}、0、False等
5:

模塊名,包名:小寫字母,單詞之間用“_”分割
類名:首字母大寫
全局變量:大寫字母, 單詞之間用“_”分割
普通變量:小寫字母,單詞之間用“_”分割
函數:小寫字母,單詞之間用“_”分割
實例變量:以"_"開頭,其他和普通變量一樣
私有實例變量(外部訪問會報錯):以“__”(2個下划線),其余和普通變量一樣
專有變量:“__”(2個下划線)開頭,“__”(2個下划線)結尾,一般為Python的自有變量(不要使用)
6:

使用 id() 方法查看內存地址
#-*- coding:utf-8 -*-
n = 10
print(id(n)) # 打印變量 n 在內存中的地址
7:

# -*- coding:utf-8 -*- user1 = "seven" user2 = "alex" pwd = "123" count = 0 while count < 3: if count == 3: print("You have try too much times...") break else: user = input("Please input your name:") password = input("password:") if user == user1 or user2 and password == pwd: print("Welcome !\n") else: print("Sorry,your name or password is wrong...\n") count += 1
8(1)

# -*- coding:utf-8 -*- a = 2 sum = 0 while a < 101: if a%2 == 0: sum += a else: sum -= a a += 1 print("2-3+4-5+6...+100的和:%d\n"%sum)
(2)

# -*- coding:utf-8 -*- a = 0 while a<12: a += 1 if a==6 or a==10: continue print("%d "%a)
(3)

# -*- coding:utf-8 -*- n = 100 while n>50: print("從大到小:%d"%n) n -= 1 if n==50: print("從大到小停止:%d"%n) n = 0 while n<=50: print("從小到大:%d"%n) n += 1 break
(4)

# -*- coding:utf-8 -*- n = 1 while n<101: if n%2!=0: print(">>>:%d"%n) n += 1
(5)

# -*- coding:utf-8 -*- n = 1 while n<101: if n%2==0: print(">>>:%d"%n) n += 1
9:

關系:
變量n1指向了123456的內存地址,變量n2不是指向了n1地址,而是指向了123456內存地址。
10:

# -*- coding:utf-8 -*-
name = input("姓名:")
address = input("地點:")
hobby = input("愛好:")
print("%s最喜歡在%s%s"%(name,address,hobby))
11:

#-*- coding:utf-8 -*- year = int(input("請輸入任意年份:")) if (year%4==0 and year%100!=0) or year%400==0: print(">>>> %d為閏年!<<<<\n"%year) else: print(">>>> %d為平年。<<<<\n"%year)
12:

# -*- coding:utf-8 -*- rate = 0.0325 # 一年利率 sum = 10000 # 總和 n = 1 # 年限 while sum<20000: sum += sum*rate n += 1 print("需要經過%d年"%n)
13:

# -*- coding:utf-8 -*- n = 1 j = 4 while n <= 9: if n <= 5: print("*"*n) else: print("*"*j) j -= 1 n += 1
14:

# -*- coding:itf-8 -*- salary = 3000 # 基本工資 sales = int(input("請輸入你的當月業績:")) sum = 0 # 工資總額 if sales < 50000: sum = salary elif sales < 100000: sum = salary+sales*0.03 elif sales < 150000: sum = salary+sales*0.05 elif sales < 250000: sum = salary+sales*0.08 elif sales < 350000: sum = salary+sales*0.1 else: sum = salary+sales*0.15 print("你的月工資總計:%d"%sum)
15:

# -*- coding:utf-8 -*- distance = int(input("乘坐距離:")) if distance == 0: print("你還在原地!") exit() cost = 0 # 費用 price = 0 # 價格 n = 0 # 乘車次數 while n<=40: rate = 0 # 優惠率 if cost>=100 and cost<=150: rate = 0.8 elif cost>=150 and cost<=400: rate = 0.5 else: rate = 1.0 if distance <= 6: cost +=(3*rate) elif distance <= 12: cost +=(4*rate) elif distance <= 22: cost +=(5*rate) elif distance <= 32: cost +=(6*rate) else: if (distance-32)%20==0: # cost += (6+(distance-32)/20)*rate else: cost += (6+(distance-32)/20+1)*rate n += 1 print("你當月乘車的花費是:%d"%cost)
16:

# -*- coding:utf-8 -*- height = 100 # 下落高度 meter = 0 # 球總共經過的路程 n = 0 # 下落次數 while n<10: meter += height # 下落高度 height /= 2 # 每次落下彈起后的高度 meter += height # 彈起高度 n += 1 print(meter,height)
綜合作業
編寫登陸接口:
首先我們先創建一個名為 Login的文件,包括“ create_user.py” 和 "login.py"兩個文件,內容分別如下:
create_user.py (首先運行,且只運行一次)

#-*-coding:utf-8-*- # 創建用戶文件 with open("Login/user_info.txt","w") as f: f.write("Jack|123|0\n") f.write("Rose|456|0\n") f.write("Frank|789|0\n") # 創建被鎖用戶文件 with open("Login/lock_user.txt","w") as f1: f1.write("sample\n")
login.py

# -*- coding:utf-8 -*- # 第一步:讀取用戶信息 user = {} # 定義一個儲存用戶信息的字典 with open("Login/user_info.txt","r") as f2: for line in f2: user_info = line.strip().split("|") # print(user_info) user[user_info[0]]={"username":user_info[0], "password":user_info[1], "try_times":user_info[2]} # print(user) # 第二步:讀取被鎖用戶信息 with open("Login/lock_user.txt","r") as f3: locked_user = [] for line in f3: locked_user.append(line.strip()) # print(locked_user) # 第三步:判斷用戶是否注冊或被鎖 while True: username = input("用戶名:").strip() password = input("密碼:").strip() # 若用戶已被鎖定 if username in locked_user: print("抱歉,該賬戶已被鎖定,請解鎖后再登陸!") break #直接退出 # 若用戶已注冊,且未被鎖定 elif username in user: count = int(user[username]["try_times"]) if count<3 and(password==user[username]["password"]): print("歡迎登陸,%s!"%username) user[username]["try_times"] = 0 # 將修改的信息寫入用戶信息 with open("Login/user_info.txt","w") as f4: for i in user: f4.write(i+"|"+user[i]["password"]+"|"+str(user[i]["try_times"])+"\n") break else: count += 1 print("用戶名或密碼錯誤!") user[username]["try_times"] = count # 將修改信息寫入用戶信息 with open("Login/user_info.txt","w") as f5: for i in user: f5.write(i+"|"+user[i]["password"]+"|"+str(user[i]["try_times"])+"\n") if count==3: locked_user.append(username) print("登陸錯誤次數過多,你的賬號已被鎖定!") # 將修改信息寫入鎖定信息表中 with open("lock_user.txt","w") as f6: for i in locked_user: f6.write(i+"\n") break else: print("你尚未注冊...") break
綜合作業一:
一、三級菜單: 數據結構: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '網易':{}, 'google':{} }, '中關村':{ '愛奇藝':{}, '汽車之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龍觀':{}, }, '朝陽':{}, '東城':{}, }, '上海':{ '閔行':{ "人民廣場":{ '炸雞店':{} } }, '閘北':{ '火車站':{ '攜程':{} } }, '浦東':{}, }, '山東':{}, } 需求: 可依次選擇進入各子菜單 可從任意一層往回退到上一層 可從任意一層退出程序 所需新知識點:列表、字典
綜合作業二:
二、購物車程序: 數據結構: goods = [ {"name": "電腦", "price": 1999}, {"name": "鼠標", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ...... ] 功能要求: 1、啟動程序后,輸入用戶名密碼后,讓用戶輸入工資,然后打印商品列表 2、允許用戶根據商品編號購買商品 3、用戶選擇商品后,檢測余額是否夠,夠就直接扣款,不夠就提醒 4、可隨時退出,退出時,打印已購買商品和余額 5、在用戶使用過程中, 關鍵輸出,如余額,商品已加入購物車等消息,需高亮顯示 擴展需求: 1、用戶下一次登錄后,輸入用戶名密碼,直接回到上次的狀態,即上次消費的余額什么的還是那些,再次登錄可繼續購買 2、允許查詢之前的消費記錄