【Python基础】实验——Lab 1 Python编程基础

实验项目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()

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值