实验项目1
设计一个工作量计算器,基本需求如下:
功能:a)已知项目大小、工作人数、计算出需要多少工时才能完成;
b)或已知项目大小、总工时,计算要在这样的工时内完成,至少需要的人数。
已知信息:标准大小的项目,需要1个人用80个工时完成(既1人工作10天完成)
功能演示:a) 1.5倍标准大小的项目,一共有2个人>>>程序>>>需要60.0个工时。
b) 0.5倍标准大小的项目,需要在20个工时内完成>>>程序>>>需要2.0个人力。
V1.0 需要定义2个函数 estimated_time()计算工时 和 estimated_people()计算人力(需要注意:人力只能是整数,例如,计算出人力是10.1则可以取整为11。提示:可以使用math包里的向上取整函数)
V2.0 合并estimate_time()和estimate_people()函数,程序自动区分“计算工时”和“计算人力”
V3.0 需要给用户提示,例如,在控制台输出如下内容提示用户:
并且采用“子函数+主函数”的形式重新组织你的代码
思路:
首先定义两个函数,estimated_time()计算工时 和 estimated_people()计算人力。返回定义的参数。
在构造主函数,根据要求计算的东西(工时或者人力),调用不同的参数与函数。(我使用的是if…elif…判断语句来实现)。在使用函数的时候,需要实例化函数。
代码:
import math
type = eval(input("请选择计算类型:"))
def estimated_time(size, quantity):
time=size*80/quantity
return ("项目大小为{}个标准项目,使用{}个人力完成,则需要工时数量为" \
":{:.1f}").format(size, quantity,time)
def estimated_people(size,time):
people=time/size*60
return ("项目大小为{}个标准项目,总工时为{},则需要的人力数量为"\
":{:.1f}").format(size,time,math.ceil(people))
def main(type):
if type==1:
size = eval(input("请输入项目大小:"))
time = eval(input("请输入工时数量:"))
a=estimated_people(size,time)
print (a)
elif type==2:
size = eval(input("请输入项目大小:"))
quantity = math.ceil(eval(input("请输入人力数量:")))
b=estimated_time(size, quantity)
print (b)
q=main(type)
print("学号_姓名")
x=input()
阅读一下代码,复习一下类的定义和实例化:
class Chinese:
def __init__(self,hometown,region):
self.hometown = hometown
self.region = region
print('程序持续更新中……')
def born(self):
print('我生在%s。'%(self.hometown))
def live(self):
print('我在%s。'%(self.region))
def citys(self):
self.born()
self.live()
freddy= Chinese('四川', '成都')
freddy.citys()
%---------------------------------------------------------------------------------------------------------%
定义个名字叫Robot的类,让它具备以下功能:
一是会让你给ta 起名,也会问你的名字,然后跟你打招呼(如“你好,老弟。我是AlphaGo。遇见你,真好。”);要求用构造函数实现
二是会让你说一个愿望,然后帮你重复三次(因为 ta 觉得重要)。类方法名为say_wish()
实现效果如下图:
思路:
创建一个类,里面有两个方法(born与say_wish),并且使用构造函数。
我的代码中并没有在每个方法中传参,是因为如果将参数“own”作为born()的参数,那么还存在say_wish()调用born()函数的参数问题,会将问题变复杂,所以,在一开始,将own与name在构造函数的时候实现。
进而实现代码的运行。
代码:
class Robot:
def __init__(self):
self.name=input("我现在刚诞生,还没有名字,帮我起一个吧。")
self.own=input("对了,我该怎样称呼你呢?")
def born(self):
print("你好"+self.own+",我叫"+self.name+"。很开心,遇见你~")
def say_wish(self):
wish=input("告诉我你的一个愿望吧:")
print(self.own+"的愿望是:")
print(wish)
print(wish)
print(wish)
duyusong= Robot()
duyusong.born()
duyusong.say_wish()
print("学号_姓名")
实验项目3:
文件的读写,编码和解码
小练习1:# 1.分别使用gbk和utf-8编码自己的名字,并将其打印出来。 # 2.复制上一步得到的结果,进行解码,打印出你的名字(两次)。3.使用gbk解码:b'\xb4\xf3\xca\xfd\xbe\xdd2018\xbc\xb6\xbf\xba\xb0\xef\xd7\xd3'
小练习2:通过文件读写命令,读取 photo1 里的数据。如下图,可以点击右键另存为photo1。然后,新建名为“photo2”的图片(在同一个文件夹),写入读到的数据,完成了图片的复制。
小练习3:完成文件转移之间的数据处理,让数据发生变化
有一个文件名字叫:‘吃鸡排行.txt’打开之后看到如下:
大数据第一战队_落地成盒 23 35 44 90 70
大数据第二战队_跑毒 60 77 68 88 90
大数据第三战队_神打野 97 99 89 91 99
大数据第四战队_ 鱼塘局 85 90 98 89
先把以上四行存为单独一个txt文件;1. 通过读取txt文件,打印出来每个战队的名字和总分,例如
大数据第一战队_落地成盒262
大数据第二战队_跑毒383
……
……
2把上面4行内容,存为列表并且写入一个名叫winner.txt文件中
3让战队的成绩从高到低排列,然后放到新文档“winner_new.txt”。
提示:对于3,可能要用到re包,字典、sorted()\zip()\map()\re.findall()\re.compile()
思路:
#1:
这个比较简单,套入固定的格式,将要求输出的大小放进去就行了,注意区分encode与decode的区别,我在打代码的时候,一开始出错,就是误将decode依然打成了encode。
#2:
图片的读写与复制,通过一个中间变量,将photo1的内容读取到中间变量,再写入photo2。
#3:
这个实验比较难,涉及到文件的打开,读取,写入,排序等等。是本次实验一当作最难的一个。
涉及到分数相加计算总和,我们想到的是循环列表累加计算和。
将文件计算了和之后的内容写入,是固定的格式,课堂上是讲过的。
最后一个将总分从高到低排序,我们需要借助字典,一个键对应一个值。至于怎样的去名字的区间?分数的区间?就是按照先打印一下“\n”的大小,计算出名字的切片区间,再按照取左不取右(因为最后一个是’\n’)。最后通过文件读取实现。
代码:
#练习1
print("姓名".encode('utf-8'))
print("姓名".encode('gbk'))
print("姓名".encode('utf-8').decode('utf-8')) #根据上面的输出结果放入这里
print("姓名".encode('utf-8').decode('gbk'))
print(b'\xb4\xf3\xca\xfd\xbe\xdd2018\xbc\xb6\xbf\xba\xb0\xef\xd7\xd3'.decode('gbk'))
b=input()
print("学号_姓名")
#练习2
with open('C:/Users/Administrator/Desktop/4th/python课/phpto1.jpg','rb') as photo1:
content = photo1.read()
with open('C:/Users/Administrator/Desktop/4th/python课/photo2.png','wb') as photo2:
photo2.write(content)
print("学号_姓名")
v=input()
# 练习3
# 1
file1 = open('C:/Users/Administrator/Desktop/4th/python课/吃鸡排行榜.txt', 'r', encoding='utf-8')
file_lines = file1.readlines()
file1.close()
final_scores = []
for i in file_lines:
data = i.split()
sum = 0
for score in data[1:]:
sum = sum + int(score)
result = data[0] + str(sum) + '\n'
print(result)
final_scores.append(result)
print(final_scores)
# 2
sum1 = open('C:/Users/Administrator/Desktop/4th/python课/winner.txt', 'w', encoding='utf-8')
sum1.writelines(final_scores)
sum1.close()
# 3
file1 = open('C:/Users/Administrator/Desktop/4th/python课/winner.txt', 'r', encoding='utf-8')
file_lines = file1.readlines()
file1.close()
dscores = {}
lscores = []
fscores = []
for i in file_lines:
name = i[:-4]
score = int(i[-4:-1])
dscores[score] = name
lscores.append(score)
lscores.sort(reverse=True)
for i in lscores:
result = dscores[i] + str(i) + '\n'
fscores.append(result)
print(result)
print(fscores)
winner_new = open('C:/Users/Administrator/Desktop/4th/python课/new_winner.txt', 'w', encoding='utf-8')
winner_new.writelines(fscores)
winner_new.close()
print("学号_姓名")
z = input()