首页 >> 实验教学 >> 实验项目 >> 详细内容
实验教学
 
实验项目 >> 正文
Python 程序设计基础
日期:2021-12-09 17:12:11  发布人:nclgjsj  浏览量:768

 

Python 程序设计基础

实验指导书

 

 

    本指导手册依照计算机本科专业教学大纲,根据清华大学出版社的Python程序设计基础(第2版)》(董付国 编著)编写而成。

本指导手册共计有编有6个实验,其中标有★为必做实验,标有※为选做实验。

1、做好上机实验的准备工作应考者对每个实验需要进行预习了解相关内容和具体要求熟悉上机操作步骤学会相关系统软件的使用。

2、编写源程序:按照实验题目的要求在实验前完成程序的编写工作,并对源程序进行认真的静态检查,减少错误的发生。

3、完成实验报告做完上机实验应考者要严格按照实验报告的格式要求写出实验报告实验报告的内容为实验名称实验的目的实验的内容和要求、实验步骤、实验结果并附上源程序清单。

 

目录

 

实验准备  Python 安装与开发环境搭建

实验1  Python 基础知识

实验2  Python数据结构列表,元组,字典

实验3  选择与循环结构

实验4  Python中的函数的设计

实验5  Python中面向对象程序设计

实验6  文件操作

 

 

 

 

 

实验准备  Python 安装与开发环境搭建

实验目的:

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 基础知识

实验目的:

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)

 

实验2  Python数据结构列表,元组,字典

实验目的:

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("输啦")

 

# 作业:实现三局两胜.

 

实验3  选择与循环结构

实验目的:

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)

 

 

实验4  Python中的函数的设计

实验目的:

1、掌握Python中函数设计的方法,尤其是参数类型中的有关特性使用。

2、理解函数默认值参数、递归函数工作原理。

实验内容:

统计一个方法的调用次数.

 

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()

 

 

 

 

 

实验5  Python中面向对象程序设计

实验目的:

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()

 

 

 

 

 

 

 

 

 

实验6  文件操作

实验目的:

1、掌握文件的打开和关闭。

2、掌握文件的不同操作,如读写、重命名、删除。

实验内容:

1. 打开D盘的txt文件,统计该文件中每一段的字符个数,并输出,段落之间以两个回车键分隔。

import os

= open(r"d:\wa.txt",'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 广东省 江门市 台山市

 

核发:nclgjsj 点击数:768收藏本页