Python小作业

Python014

Python小作业,第1张

做一个FTP客户端吧,这个更实际点,还能用得上。需要做到:

1、连接服务器 (socket知识)

2、列出服务器上的文件

3、下载服务器上的文件

4、上传文件到服务器

5、同时上传或者下载多个文件(多线程知识)

6、退出服务器

功能不多,但是实现起来也是需要点代码的 :-)

2 题,输出四位数

from functools import reduce

a = 7501

# 提取每个数字

a_list = [i for i in str(a)]

print(', '.join(a_list))

# 求和

sum = reduce(lambda x, y: int(x) + int(y), a_list)

print('每个数字的和为: {}'.format(sum))

3 题,闰年问题

list = []

print('闰年年份有: ', end=' ')

for i in range(2019, 2120):

    if i % 4 is 0:

        if i % 100 is 0:

            if i % 400 is 0:

                list.append(i)

                print(i, end=', ')

        else:

            list.append(i)

            print(i, end=', ')

print('\n2019-2119之间有 {} 个闰年'.format(len(list)))

# Python3.6

# 导入random模块

import random

# 定义一个人椅的类

class ManAndBench:

    def __init__(self, n_bench):

        self.bench_num = n_bench

        # 依次已经被占用的座位号

        self.break_point = []

    def print_bench(self):

        # 定义全0数组作为长椅

        pt_str = [0 for _ in range(self.bench_num)]

        # 按照占用的作为号,重写长椅数字

        for i, item in enumerate(self.break_point):

            # 长椅的第[作为号]赋值为第i+1个人

            pt_str[item] = i+1

        brk_num = len(self.break_point)

        if brk_num == 0:

            print("长椅为空:", pt_str)

        else:

            print("{:2d}号男人: {}".format(brk_num, pt_str))

    def next_man(self):

        # 如果是第一个人,使用随机占座

        if len(self.break_point) == 0:

            fst = random.randint(0, self.bench_num - 1)

            self.break_point.append(fst)

        else:

            brk_num = len(self.break_point)

            # 产生已经被占座的个数+1的全零数组,用于空的位置长度计数

            block_size = [0 for _ in range(brk_num + 1)]

            # 统计每个空位置的长度

            tmp = 0

            for i in range(self.bench_num):

                # 如果第i个作为没有被占用,则第tmp个数组加1

                if i not in self.break_point:

                    block_size[tmp] += 1

                # 否则,tmp加1,统计下一个间隔段的长度

                else:

                    tmp += 1

            # 找出最大长度,计算最大长度块的序号

            max_block = max(block_size)

            max_index = block_size.index(max_block)

            # 计算最大长度块在整个长椅中的分割点

            start = 0

            for i in range(max_index):

                start += block_size[i]+1

            self.break_point.append(start + max_block // 2)

 

            

c = int(input("请输入椅子的数量:"))

while True:

    m = int(input("请输入人的数量:"))

    if m <= c:

        break

    else:

        print("人数量大于椅子数量,请重新输入!")

# 引用定义的类

mab = ManAndBench(c)

# 打印长椅

mab.print_bench()

# 每次坐一个人,打印一次

for _ in range(m):

    mab.next_man()

    mab.print_bench()