|
Python 程序设计基础 |
实验指导书 |
|
|
本指导手册依照计算机本科专业教学大纲,根据清华大学出版社的《Python程序设计基础(第2版)》(董付国 编著)编写而成。
本指导手册共计有编有6个实验,其中标有★为必做实验,标有※为选做实验。
1、做好上机实验的准备工作:应考者对每个实验需要进行预习,了解相关内容和具体要求,熟悉上机操作步骤,学会相关系统软件的使用。
2、编写源程序:按照实验题目的要求,在实验前完成程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。
3、完成实验报告:做完上机实验,应考者要严格按照实验报告的格式要求写出实验报告。实验报告的内容为:实验名称、实验的目的、实验的内容和要求、实验步骤、实验结果并附上源程序清单。
目录
实验目的:
1、熟练掌握 Python 解释器安装与基本用法。
2、熟练掌握使用 pip 命令安装 Python 扩展库。
3、熟悉离线安装轮子文件的方法。
实验内容:
1、安装 Python 解释器。
2、安装 Python 扩展库。
实验步骤:
1、打开 Python 官方网站 http://www.python.org。
2、下载 Python 3.5.x 或 Python 3.6.x 或 Python 3.7.x 的最新版,至少安装其中两个。
3、在开始菜单中找到成功安装的 IDLE,输入下面的代码,确保 IDLE 运行正常。
4、在资源管理器中进入 Python 安装目录的 scripts 子目录,然后按下 Shift 键,在空白处单击鼠标右键,在弹出来的菜单中选择“在此处打开命令窗口”进入命令提示符环境。如图所示:
5、使用 pip 命令在线安装 Python 扩展库 numpy、pandas、scipy、matplotlib、jieba、openpyxl、pillow。安装 openpyxl 的命令如图所示:
6、如果遇到安装不成功的扩展库,使用浏览器打开下面的网址下载 whl 文件进行离线安装:https://www.lfd.uci.edu/~gohlke/pythonlibs/
7、在 IDLE 中使用 import 导入安装好的扩展库,验证是否安装成功。
实验目的:
1、熟练运用 Python 运算符。
2、熟练 Python 变量。
实验内容:
1、温度换算器(华氏度,摄氏度,开氏度)
摄氏度 = (华氏度 - 32) / 1.8
华氏度 = 摄氏度*1.8 + 32
开氏度 = 摄氏度 + 273.15
-- 在控制台中获取华氏度,计算摄氏度
-- 在控制台中获取摄氏度,计算华氏度
-- 在控制台中获取摄氏度,计算开氏度
2、在控制台中获取圆形的半径
计算面积(3.14 * r 的平方)与周长(2 * 3.14 * r)
3、在控制台中获取一个商品单价 10
在获取一个商品数量 3
在获取一个金额 50
计算:应该找回多少钱 20
4、闰年判断:
条件1: 年份能被4整除,但是不能被100整除.
条件2: 年份能被400整除
在控制台中获取年份
判断是否为闰年,如果是显示true,否则显示false
5、在控制台中获取一个4位整数1234
计算每位相加和 1+2+3+4 --> 10
参考代码:
1、
# fahrenheit = float(input("请输入华氏度:"))
# centigrade = (fahrenheit - 32) / 1.8
# print("摄氏度是:"+str(centigrade))
# centigrade = float(input("请输入摄氏度:"))
# fahrenheit =centigrade *1.8 + 32
# print("华氏度是:"+str(fahrenheit))
centigrade = float(input("请输入摄氏度:"))
kelvin =centigrade + 273.15
print("开氏度是:"+str(kelvin))
2、
radius = float(input("请输入半径"))
area = 3.14 * radius ** 2
# length = 2 * 3.14 * radius# 31.400000000000002
# round()函数可以四舍五入
length = round(2 * 3.14 * radius, 3)
print("面积是:" + str(area) + ",周5长是:" + str(length))
3、
str_unit_price = input("请输入商品单价:")
int_unit_price = float(str_unit_price)
amount = int(input("请输入商品数量:"))
money = float(input("请输入金额:"))
result = money - int_unit_price * amount
print("应找回:"+str(result))
如果金额不足,提示还差多少钱,如果金额够,提示应找回多少钱.
-- 尝试:如果总价到达100元,打八折.
str_unit_price = input("请输入商品单价:")
int_unit_price = float(str_unit_price)
amount = int(input("请输入商品数量:"))
money = float(input("请输入金额:"))
# 总金额
total_price = int_unit_price * amount
# 满足条件打折
if total_price >= 100:
total_price /= 0
# 如果钱够
if money > total_price:
result = money - total_price
print("应找回:"+str(result))
else:
print("还差"+str(total_price - money)+"钱")
4、
year = int(input("请输入年份:"))
result = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(result)
5、
int_number = int(input("请输入4位整数:"))
#1234
# unit01 = int_number % 10
# unit02 = int_number // 10 % 10 # 1234 --> 123 --> 3
# unit03 = int_number // 100 % 10 # 1234 --> 12 --> 2
# unit04 = int_number // 1000
# result = unit01 + unit02 + unit03 + unit04
# print(result)
result = int_number % 10
result += int_number // 10 % 10 # 1234 --> 123 --> 3
result += int_number // 100 % 10 # 1234 --> 12 --> 2
result += int_number // 1000
print(result)
实验目的:
1、掌握Python中的列表和元组字典、集合以及其他常见数据结构的使用方法。
2、利用列表元组字典解决实际问题。
3、理解列表切片操作,理解序列解包工作原理。
实验内容:
1、在控制台中录入学生成绩,计算总分,最高分,最低分。
# “请输入学生总数:”
# “请输入第1个学生成绩:”
stu_count = int(input("请输入学生总数:"))
list01 = []
for i in range(stu_count):
score = int(input("请输入第%d个学生成绩:"%(i+1)))
list01.append(score)
print("总分:%d."%(sum(list01)))
print("最高分:%d."%(max(list01)))
print("最低分:%d."%(min(list01)))
2、在控制台中录入学生姓名。
# 要求:姓名不能重复
# 如果录入esc,则停止录入,打印每个学生姓名.17:05
list_names = []
while True:
name = input("请输入第%d个学生姓名:" % (len(list_names) + 1))
if name == "esc":
break
# 如果姓名不存在:
if name not in list_names:
list_names.append(name)
for item in list_names:
print(item)
3、在控制台中,获取一个字符串.
#1. 打印第一字符
#2. 打印最后一个字符
#3. 如果是奇数,打印中间的字符串(len(字符串))
#4. 打印倒数3个字符
#5. 倒叙打印字符串
# str_input = input("请输入字符串:")
str_input = "abcde"
#1. 打印第一字符
print(str_input[0])
# print(str_input[-len(str_input)])
#2. 打印最后一个字符
print(str_input[-1])
# print(str_input[len(str_input) - 1])
#3. 如果是奇数,打印中间的字符串(len(字符串))
if len(str_input) % 2 == 1:
print(str_input[len(str_input) // 2])
#4. 打印倒数3个字符
print(str_input[-3:])
#5. 倒叙打印字符串
print(str_input[::-1])
4、 在控制台中循环录入字符串,输入q时退出.
然后显示一个新的字符串.
# str_result = ""
list_result = []
while True:
str_input = input("请输入:")
if str_input =="q":
break
# str_result = str_result + str_input
# (1)使用列表拼接
list_result.append(str_input)
#(2) 使用join合并
str_result = "".join(list_result)
print(str_result)
# 字符串 --> 列表
list01 = list("abc")
list01 = "a-b-c".split("-")
print(list01)
5、 判断字符串是否是回文:
上海自来水来自海上
奶牛产牛奶
提示:字符串翻转
str01 = "上海自来水来自海上"
if str01 == str01[::-1]:
print("是回文")
else:
print("不是回文")
6、 一注彩票7个球
前六个是红球:1 -- 33 之间的数字,且不能重复.
最后一个是蓝球:1 -- 16 之间的数字
(1) 在控制台中购买彩票
(2) 随机产生一注彩票
import random
number = random.randint(1,16)
ticket = []
# 前六个红球:
while len(ticket) < 6:
number = int(input("请输入第%d个红球号码:"%(len(ticket) + 1)))
if number <1 or number > 33:
print("不再范围内")
elif number in ticket:
print("该号码已经存在")
else:
ticket.append(number)
# 蓝球:
while True:
number = int(input("请输入蓝球号码:"))
if 1<= number <= 16:
ticket.append(number)
break # 退出循环
else:
print("不再范围内")
print(ticket) # 只是将列表转换为字符串 再显示
# 获取每个元素
# for item in ticket:
# print(item)
# 一注彩票7个球
# 前六个是红球:1 -- 33 之间的数字,且不能重复.
# 最后一个是蓝球:1 -- 16 之间的数字
# (2) 随机产生一注彩票
import random
ticket = []
while len(ticket) < 6:
number = random.randint(1,33)
if number not in ticket:
ticket.append(number)
# 排序
# ticket.sort()
# number = random.randint(1,16)
# ticket.append(number)
ticket.append(random.randint(1,16))
# 需求:对列表执行范围的元素进行排序
# (1)通过切片返回新列表
temp = ticket[:6]
# (2)对新列表进行排序
temp.sort()
# (3)将新列表赋值给原列表
ticket[:6] = temp
print(ticket)
7、 获取最大/最下值
list01 = [34, 5, 6, 78, 9, 0, 5, 8, 88, 4]
# # 假设第一个元素就是最大值
# max = list01[0]
# # 依次与后面(从第二个开始)元素进行比较
# for i in range(1,len(list01)):
# # 发现更大的,则替换假设的.
# if max < list01[i]:
# max = list01[i]
# # 最后假设的就是真的最大值.
# print(max)
# 练习2:查找最小元素
# 假设第一个元素就是最大值
min = list01[0]
# 依次与后面(从第二个开始)元素进行比较
for i in range(1, len(list01)):
# 发现更大的,则替换假设的.
if min > list01[i]:
min = list01[i]
# 最后假设的就是真的最大值.
print(min)
8、使用range生成1--10之间的数字,存入列表list01中.
# 使用列表推导式,将list01中所有奇数存入list02
# 将list01中所有偶数存入list03
# 将list01中元素大于3的存储list04
# list01 = []
# for item in range(1,11):
# list01.append(item)
list01 = [item for item in range(1,11)]
list02 = [item for item in list01 if item % 2 ==1]
list03 = [item for item in list01 if item % 2 ==0]
list04 = [item for item in list01 if item > 3]
9、在控制台中输入月,日.
# 计算这是一年的第几天.
# 例如:3月5日
# 累加1月,2月总天数,再累加3月的5天.
# 例如:5月10日
# 累加1月,2月,3月,4月总天数,再累加5月的10天.
# month = int(input("请输入月份:"))
# day = int(input("请输入天:"))
# day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
# result = 0
# # 累加前几个月
# for i in range(month - 1):
# result += day_of_month[i]
# # 累加当月
# result += day
# print(result)
month = int(input("请输入月份:"))
day = int(input("请输入天:"))
day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
# 累加前几个月
result = sum(day_of_month[:month - 1])
# 累加当月
result += day
print(result)
10、在控制台中录入一个字符串
# 打印这个字符串中的字符以及出现的次数.
# abcdbcdb
# a字符1次
# b 3
# c 2
# d 2
str_input = "abcdbcdb"
# key: 字符 value:次数
result = {}
# (1)逐一判断字符,出现的次数.
for item in str_input:
# (2)如果没有统计过该字符串
if item not in result:
result[item] = 1
else:
# (3)否则,次数增加
# result[item] = result[item] + 1
result[item] += 1
print(result)
字典,集合
11、列表变成字典
["张三丰","无忌","赵敏"] --> {"张三丰":3,"无忌":2,"赵敏",2}
list01 = ["张三丰", "无忌", "赵敏"]
dict01 = {}
for item in list01:
dict01[item] = len(item)
dic02 = { item:len(item) for item in list01}
print(dic02)
12、
# ["张三丰", "无忌", "赵敏"]
# [101, 102, 103]
# (1) 根据两个列表形成一个字典:key姓名,value房间号
# (2) 将字典的键与值进行翻转.即:key房间号,value姓名
list01 = ["张三丰", "无忌", "赵敏"]
list02 = [101, 102, 102]
# dict01 = {}
# for i in range(len(list01)):
# dict01[list01[i]] = list02[i]
dic02 = {list01[i]: list02[i] for i in range(len(list01))}
print(dic02)
# dic03 = {}
# for key,value in dic02.items():
# dic03[value] = key
# {101: '张三丰', 102: '赵敏'} 张无忌与赵敏同居,导致key重复,无忌被覆盖.
dic03 = {value: key for key, value in dic02.items()}
print(dic03)
#[(102, '无忌'), (101, '张三丰'), (102, '赵敏')]
list03 = [(value,key) for key, value in dic02.items()]
print(list03)
13、猜拳
规则:系统随机出拳,在控制台中循环猜测.
提示:(1)将胜利的策略存入容器
(
("石头","剪刀"),
("剪刀","布"),
("布","石头")
)
(2) 将用户猜的拳与系统出拳形成一个元组
import random
# 胜利策略
wins = (
("石头", "剪刀"),
("剪刀", "布"),
("布", "石头")
)
# 将用户猜的拳与系统出拳形成一个元组
user_input_index = int(input("请输入整数(0表示石头,1表示剪刀,2表示布):"))
items = ("石头","剪刀","布")
user_input_item = items[user_input_index]
sys_input_index = random.randint(0,2)
sys_input_item = items[sys_input_index]
# 逻辑处理
if user_input_item == sys_input_item:
print("平局")
elif (user_input_item,sys_input_item) in wins:
print("赢啦")
else:
print("输啦")
# 作业:实现三局两胜.
实验目的:
1、掌握选择和循环两种主要程序结构在Python中的实现方法
2、了解 random 模块中常用函数。
3、理解带 else 子句的循环结构执行流程。
4、理解循环语句中的 break 语句的作用。
实验内容:
1、# 在控制台中输入一个整数
# 如果是奇数 则显示奇数 否则显示偶数
number = int(input("请输入整数:"))
if number % 2 != 0:
print("是奇数")
else:
print("是偶数")
2、# 在控制台中输入一个年份
# 如果是闰年 则显示闰年 否则显示平年
year = int(input("请输入年份:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("闰年")
else:
print("平年")
3、 在控制台中获取一个月份
打印季节(春1--3 夏4--6 秋7--9 冬10--12)
"""
month = int(input("请输入月份:"))
# if 1 <= month <= 3:
# print("春天")
# elif 4 <= month <= 6:
# print("夏天")
# elif 7 <= month <= 9:
# print("秋天")
# elif 10 <= month <= 12:
# print("冬天")
# if 1 <= month <= 3:
# print("春天")
# elif 4 <= month <= 6:
# print("夏天")
# elif 7 <= month <= 9:
# print("秋天")
# elif 10 <= month <= 12:
# print("冬天")
# else:
# print("输入有误")
if month < 1 or month > 12:
print("输入有误")
elif month <= 3:
print("春天")
elif month <= 6:
print("夏天")
elif month <= 9:
print("秋天")
else:
print("冬天")
4、在控制台中输入一个月份,11:30
# 返回该月份的天数
# 1 3 5 7 8 10 12 ---> 31 天
# 4 6 9 11 ---> 30 天
# 2 ---> 28 天
month = int(input("请输入月份:"))
if month < 1 or month > 12:
print("输入有误")
elif month == 2:
print("28天")
elif month == 4 or month == 6 or month == 9 or month == 11:
print("30天")
else:
print("31天")
5题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
2.程序源代码:
'''
bonus1 = 100000 * 0.1
bonus2 = bonus1 + 100000 * 0.500075
bonus4 = bonus2 + 200000 * 0.5
bonus6 = bonus4 + 200000 * 0.3
bonus10 = bonus6 + 400000 * 0.15
i = int(raw_input('input gain:\n'))
if i <= 100000:
bonus = i * 0.1
elif i <= 200000:
bonus = bonus1 + (i - 100000) * 0.075
elif i <= 400000:
bonus = bonus2 + (i - 200000) * 0.05
elif i <= 600000:
bonus = bonus4 + (i - 400000) * 0.03
elif i <= 1000000:
bonus = bonus6 + (i - 600000) * 0.015
else:
bonus = bonus10 + (i - 1000000) * 0.01
print 'bonus = ',bonus
'''
循环结构
"""
累加1 -- 100 之间 能被3 整除的整数和
"""
# sum = 0
# for item in range(1,100):
# # 如果满足条件 则 累加
# if item % 3 == 0:
# sum += item
# print(sum)
sum = 0
for item in range(1,100):
# 如果不满足条件 则 跳过
if item % 3 != 0:
continue# 跳过
sum += item
print(sum)
2. 一个球从100m的高度落下,每次弹回原高度的一半.
总共弹起多少次?(假定:最小弹起高度是0.01m)
总共走了多少米.
hight = 100 # 当前高度
count = 0 # 计时器
distance = hight # 移动的距离
# hight / 2 弹起来高度 > 0.01
while hight / 2 >= 0.01:
# 弹起来
hight /= 2 # 高度减半
count += 1
print("第" + str(count) + "次弹起高度是:" + str(hight))
distance += hight * 2 # *2 累加上下距离
print(count)
print(round(distance, 2))
3. (扩展)在控制台中录入一个整数,判断是否为素数.
只能被1和自身整除的数字
例如:9
判断9能否被 2 --- 8 之间的数字整除
如果能,说明不是素数.3
如果都不能,说明是素数.
7
判断7能否被 2 --- 6 之间的数字整除
如果能,说明不是素数
如果都不能,说明是素数.
提示:循环出2到该数字-1之间的整数
在判断能否被整数
if 数字 % 之间的整数 == 0:
不是素数
number = int(input("请输入整数:")) # 9 2 --- 8
if number < 2:
print("不是素数")
else:
for i in range(2, number):
if number % i == 0:
print("不是素数")
break # 如果有结论了,就不需要在和后面的数字比较了
else:
print("是素数")
4、在控制台中循环输入编码值,显示字符.直到输入负数时,退出.
while True:
number = int(input("请输入编码值:"))
if number < 0:
break
print(chr(number))
5、在控制台中显示120秒倒计时
#02:00 01:59 ....... 00:00
for second in range(120,-1,-1):
print("%02d:%02d"%(second // 60,second % 60))
6、在控制台中输入一个整数,根据整数打印一个矩形
""" 4
****
* *
* *
****
"""
number = int(input("请输入:"))
# 头
print("*" * number)
# 中间
for i in range(number -2):
print("*" + " "*(number - 2) +"*")
# 尾
print("*" * number)
实验目的:
1、掌握Python中函数设计的方法,尤其是参数类型中的有关特性使用。
2、理解函数默认值参数、递归函数工作原理。
实验内容:
1、统计一个方法的调用次数.
count = 0
def fun01():
global count
count += 1
fun01()
fun01()
fun01()
print(count)
2、 变量作用域:
变量起作用的范围.
练习:exercise02
"""
# 全局变量:当前.py文件内部都可访问
g01 = 100
def fun01():
# 方法内部可以读取全局变量
# print(g01)
# 局部变量:在方法内部创建的变量,只能在方法内部使用.
l01 = 200
# 在方法内部创建了局部变量g01,没有修改全局变量g01.
# g01 = 300
# print(g01)# 300
# 如果需要在方法内部,修改全局变量.
global g01
g01 = 300
# 在局部作用域中,创建全局变量
global g02
g02 = 500
fun01()
print(g01) # 300
print(g02) # 500
"""
3、 实参传递方式
位置传参
-- 序列传参:可以运行时,根据某些逻辑决定传入的数据(列表).
关键字传参
-- 字典传参:可以运行时,根据某些逻辑决定传入的数据(字典).
形参传递方式
默认(缺省)参数:让调用者可以有选择性的传递需要的信息.
练习:exercise03
"""
def fun01(a, b, c):
print(a)
print(b)
print(c)
# 位置传参:实参与形参的位置依次对应
fun01(1, 2, 3)
# 序列传参:用*将序列拆分后与形参的位置依次对应
fun01(*[4, 5, 6])
# 关键字传参:实参根据形参的名称进行对应
fun01(b=2, a=1, c=3)
# 字典传参:用**将字典拆分后与形参的名字进行对应.
fun01(**{"b":20,"c":"cc","a":1.5})
# 默认参数
def fun02(a = 0, b = 0, c = 0):
print(a)
print(b)
print(c)
# 不写参数,使用默认值.
fun02()
fun02(1)
fun02(*[2,3])
# 关键字传参 与 默认传参相结合,可以让调用者只传递自己需要的信息.
fun02(b = 20)
fun02(**{"c":"cc"})
"""
4、 形参传递方式
默认形参
位置形参
-- 星号元组形参:位置实参数量无限
命名关键字形参:要求必须使用关键字实参
-- 双星号字典形参:关键字实参数量无限
学习目标:会调用其他人写的函数.
练习:exercise04
"""
# 位置形参
def fun01(a, b, c):
pass
# 星号元组形参
def fun02(*args):
# 对于方法内部而言,就是元组
# 对于调用者而言,可以传递数量无限的位置实参.
print(args)
# fun02()
# fun02(1)
# fun02(1,2,3,4)
# 命名关键字形参:强制实参使用关键字传递.
# a,b 是命名关键字形参
def fun03(*, a, b):
print(a)
print(b)
# b 是命名关键字形参
def fun04(*args, b):
print(args)
print(b)
# fun03(a = 1,b = 2)
fun04(3, 44, 3, b =22)
# 双星号字典形参
def fun05(**kwargs):
# 对于方法内部而言,就是字典,
# 对于调用者而言,可以传递数量无限的关键字实参.
print(kwargs)
fun05(a=1, b=2)
# 调用
def fun06(*args, **kwargs):
print(args)
print(kwargs)
# 数量无限的位置实参,数量无限的关键字实参
fun06(1, 2, 3, 4, 5, a="a", b=1.5)
def fun07(a, b, *args, c, d, **kwargs):
print(a)
print(b)
print(args)
print(c)
print(d)
print(kwargs)
fun07(1, 2, 3, 4, 5, d="d", c="c")
fun07(1, 2, 3, 4, 5, d="d", c="c", e="ee")
fun07(1, 2, d="d", c="c")
print(1,2,3,4,5) # 1 2 3 4 5
print(1,2,3,4,5,"#") # 1#2#3#4#5
购物车程序
"""
重构练习
"""
dict_commodity_info = {
101: {"name": "屠龙刀", "price": 10000},
102: {"name": "倚天剑", "price": 10000},
103: {"name": "九阴白骨爪", "price": 8000},
104: {"name": "九阳神功", "price": 9000},
105: {"name": "降龙十八掌", "price": 8000},
106: {"name": "乾坤大挪移", "price": 10000}
}
list_order = []
def select_menu():
"""
菜单选择
"""
while True:
item = input("1键购买,2键结算。")
if item == "1":
buying()
elif item == "2":
settlement()
def settlement():
"""
结算
:return:
"""
print_order()
total_price = get_total_price()
pay(total_price)
def pay(total_price):
"""
支付
:param total_price: 需要支付的价格
:return:
"""
while True:
money = float(input("总价%d元,请输入金额:" % total_price))
if money >= total_price:
print("购买成功,找回:%d元。" % (money - total_price))
list_order.clear()
break
else:
print("金额不足.")
def print_order():
"""
打印订单
:return:
"""
for item in list_order:
commodity = dict_commodity_info[item["cid"]]
print("商品:%s,单价:%d,数量:%d." % (commodity["name"], commodity["price"], item["count"]))
def get_total_price():
"""
计算总价
:return:
"""
total_price = 0
for item in list_order:
commodity = dict_commodity_info[item["cid"]]
total_price += commodity["price"] * item["count"]
return total_price
def buying():
"""
购买
:return:
"""
print_commodity()
order = create_order()
list_order.append(order)
print("添加到购物车。")
def create_order():
"""
创建订单
:return:
"""
while True:
cid = int(input("请输入商品编号:"))
if cid in dict_commodity_info:
break
else:
print("该商品不存在")
count = int(input("请输入购买数量:"))
return {"cid": cid, "count": count}
def print_commodity():
"""
打印商品
:return:
"""
for key, value in dict_commodity_info.items():
print("编号:%d,名称:%s,单价:%d。" % (key, value["name"], value["price"]))
# 程序入口
select_menu()
实验目的:
1、掌握Python中面向对象程序设计的基本方法,包括类的定义与使用、类的属性、类中的特殊方法了解如何定义一个类。
2、了解如何定义类的私有数据成员和成员,如何使用自定义类实例化对象
实验内容:
1.按以下要求定义类
小明体重75公斤
小明每次跑步会减肥0.5公斤
小明每次吃东西体重增加1公斤
2.按以下要求定义类
房子有户型,总面积和家具名称列表
新房子没有任何家具
家具有名称和占地面积,其中bed占地4平米,chest占地2平米,table占地1.5平米
将以上3件家具添加到房子中
打印房子时,要求输出:户型,总面积,剩余面积和家具名称列表
class HouseItem:
def __init__(self, name, area):
self.name = name
self.area = area
def __str__(self):
return "[%s]占地面积 %.2f" % (self.name, self.area)
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)
class House:
def __init__(self, house_type, area):
self.house_type = house_type
self.area = area
self.free_area = area
self.item_list = []
def __str__(self):
return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
%(self.house_type,self.area,self.free_area,self.item_list))
def add_item(self,item):
print("要添加%s" %item)
if item.area > self.free_area:
print("%s 的面积太大,不能添加到房子中" % item.name)
return
self.item_list.append(item.name)
self.free_area -= item.area
my_home = House("两室一厅", 60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)
3.按以下要求定义类
士兵许三多有一把AK47
士兵可以开火
枪可以发射子弹
枪可以填装子弹
class Gun:
def __init__(self,model):
self.model = model
self.bullet_count = 0
def add_bullet(self,count):
self.bullet_count += count
def shoot(self):
if self.bullet_count <= 0:
print("没有子弹")
return
self.bullet_count -= 1
print("%s 发射子弹[%d]..." % (self.model,self.bullet_count))
ak47 = Gun("ak47")
class Soldier:
def __init__(self,name):
self.name = name
self.gun = None
def fire(self):
if self.gun is None:
print("[%s]还没有枪" % self.name)
return
self.gun.add_bullet(50)
self.gun.shoot()
实验目的:
1、掌握文件的打开和关闭。
2、掌握文件的不同操作,如读写、重命名、删除。
实验内容:
1. 打开D盘的txt文件,统计该文件中每一段的字符个数,并输出,段落之间以两个回车键分隔。
import os
f = open(r"d:\wa.txt",'r')
#r保存结果
r = {}
paper = (f.read()).split('\n\n')
num = 1
for i in paper:
r[num] = len(i)
num = num + 1
f.close()
#range(1,num)是不包含num的
for key in range(1,num):
print("第%s自然段:共有%d个字\n"%(key,r[key]))
2.假如E盘中有一个多级目录,统计出每层目录下的文件个数。
dir_count = 0
file_count = 0
for root, dirs, filenames in os.walk(file_path):
for dir in dirs:
dir_count += 1
for file in filenames:
file_count += 1
print ('dir_count ', dir_count)
print ('file_count ', file_count)
1.读入“身份证号.txt”,然后打印出来。注意:是否多打了一行,为什么?
2.读入“身份证号.txt”,然后存储到“身份证号_backup.txt”。注意:行尾要加"\n"。
3.读入“身份证号.txt”,处理每一行,将把一行中的每个元素用逗号(,)连接并存成“身份证号.csv”,然后使用Excel打开。注意:行尾有没有加"\n"。
基本要求:将文件“身份证.txt”读出,然后写到“身份证.csv”。该csv文件第一行各列要分别设置列名。最后使用Excel打开该文件。
要求1:使用程序在文件的最后1行写入数据,共8列,如下所示
"人数 x 平均年龄 y 男数量 a 女数量 b"
要求2:使用程序统计出每个省的人数,按人数降序排列,并写入csv文件。每行一个省份信息。
要求3:观察"身份证.txt",发现里面每个人的年龄与实际年龄不符合(当年日期-出生日期)。将年龄更正,并写入csv文件。
彭子昂 330226196605054190 男 48 浙江省 宁波市 宁海县
乔传军 34080019810819327X 男 33 安徽省 安庆市 安庆市
单传军 320111197112301539 男 43 江苏省 南京市 浦口区
雍猛飞 451321197502217475 男 39 广西壮族自治区
陈好 653222196603062607 女 48 新疆维吾尔自治区 和田地区 墨玉县
柏念雁 210323197908197408 女 35 辽宁省 鞍山市 岫岩满族自治县
凤振 450600196406138776 男 50 广西壮族自治区 防城港市 防城港市
井若薇 340401196401108586 女 50 安徽省 淮南市 市辖区
奚靖 410602197509213572 男 39 河南省 鹤壁市 鹤山区
平仁霞 410425198309308225 女 31 河南省 平顶山市 郏县
丰功成 320203197206115011 男 42 江苏省 无锡市 南长区
明涵蕾 431227196108033146 女 53 湖南省 怀化市 新晃侗族自治县
云民 411424197611226597 男 38 河南省 商丘市 柘城县
欧奕 360801198906130337 男 25 江西省
蓝山兰 360801199006130337 女 24 福建省
刘碧蓉 430621196204141262 女 52 湖南省 岳阳市 岳阳县
刁贞国 511526198805274593 男 26 四川省 宜宾市 珙县
储昕雁 341204197212137963 女 42 安徽省 阜阳市 颍泉区
雍寒 130302198711220208 女 27 河北省 秦皇岛市 海港区
骆谷槐 130637198510292148 女 29 河北省 保定市 博野县
管红娜 620524198911181149 女 25 甘肃省 天水市 武山县
闻隆 450321196807270837 男 46 广西壮族自治区 桂林市 阳朔县
雷晴 35012119701015939X 男 44 福建省 福州市 闽侯县
鲍晓乐 540121196811295392 男 46 西藏自治区 拉萨市 林周县
魏翻瑶 350212198012254503 女 34 福建省 厦门市 同安区
怀曼青 440982198109120367 女 33 广东省 茂名市 化州市
裘政宇 350000199001164690 男 24 福建省 福建省 福建省
贺星嘉 350000198701164690 男 27 云南省 玉溪市 华宁县
穆佳一 420104196901025747 女 45 湖北省 武汉市 乔口区
管营泽 440781197206258171 男 42 广东省 江门市 台山市