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!
") # 输出:Hello world!
方式二:
python hello.py 调用Python解释器来调用Python脚本
示例:
#! /usr/bin/env python #此时可不需要
# -*- coding:utf-8 -*-
print("Hello world!
")
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 ! ") else: print("Sorry,your name or password is wrong... ") 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 "%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为闰年!<<<< "%year) else: print(">>>> %d为平年。<<<< "%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 ") f.write("Rose|456|0 ") f.write("Frank|789|0 ") # 创建被锁用户文件 with open("Login/lock_user.txt","w") as f1: f1.write("sample ")
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"])+" ") 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"])+" ") if count==3: locked_user.append(username) print("登陆错误次数过多,你的账号已被锁定!") # 将修改信息写入锁定信息表中 with open("lock_user.txt","w") as f6: for i in locked_user: f6.write(i+" ") 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、允许查询之前的消费记录