• 研一Python基础课程第五周课后习题分享(含源代码)


    写在前面的话

    这次的作业写的比较快和赶。因为后面几天的安排比较忙,没有充分的时间去考虑代码的美观,所以有问题的同学,欢迎大家批评指正!

    注意:有些之前犯的错误和相关解释放在代码注释里!

    在这里插入图片描述

    一、题目分享

    1. 第一题

    在这里插入图片描述

    2. 第二题

    在这里插入图片描述

    3. 第三题

    在这里插入图片描述

    4. 第四题

    在这里插入图片描述

    5. 第五题

    在这里插入图片描述

    6. 第六题

    在这里插入图片描述

    7. 第七题

    在这里插入图片描述

    8. 第八题

    在这里插入图片描述

    9. 第九题

    在这里插入图片描述

    10. 第十题

    描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    大学排名没有绝对的公正与权威,附件(alumni.txt, soft.txt)中为按照不同评价体系给出的国内大学前100名排行,对比两个排行榜单前m的学校的上榜情况,分析不同排行榜排名的差异。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    根据输入,输出以下内容:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    第一行输入1,第二行输入m,输出在alumni.txt和soft.txt榜单中均在前m个记录的大学,按照学校名称升序。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    第一行输入2,第二行输入m,输出在alumni.txt或者soft.txt榜单中前m个记录的所有大学,按照学校名称升序。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    第一行输入3,第二行输入m,输出出现在榜单alumni.txt中前m个记录但未出现在榜单soft.txt前m个记录中的大学,按照学校名称升序。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    第一行输入4,第二行输入m,输出没有同时出现在榜单alumni.txt前m个记录和榜单soft.txt前m个记录的大学,按照学校名称升序。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

    第一行输入其他数据,则直接输出‘Wrong Option’

    在这里插入图片描述
    在这里插入图片描述

    二、源代码

    def problem_1():
        s = '''
        "Collusion is very real with Russia," Trump quoted conservative commentator Dan Bongino as saying on Trump's favorite Fox News morning show, "but only with Hillary and the Democrats, and we should demand a full investigation."
        '''
        counts = 0
        for i in range(len(s)):
            if s[i] == ' ' or s[i] == ', ' or s[i] == '.':
                counts += 1
        print(counts)
    
    
    def problem_2():
        """
        任意累积
        """
        # 第一次便理解错了输入的含义,以为是输入一个字符串,打错特错的想法!
        """
        def cmul(inp):
            inp = inp.split(',')
            a_0 = int(inp[0])
            for i in range(1, len(inp) - 1):
                a_0 *= int(inp[i])
            a_0 *= int(inp[len(inp) - 1][0])
            return a_0
        print(eval("cmul({})".format(input())))
        """
        def cmul(a,*inp):
            # a从元组的第一个数据开始,比如元组为(1,2,3,4)那么a就是1,如果是(4,3,2,1),那么a就是4
            for i in inp:
                a *= i
            return a
        print(eval("cmul({})".format(input())))
    
    
    def problem_3():
        """
        补充编程模板中代码,完成如下功能:
        以整数 17 为随机数种子,获取用户输入整数N为长度,产生 3 个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
        产生密码采用random.randint()函数
        """
        # 第一次尝试的代码,与输出结果不同,原因在于我是一次选择生成了9个随机整数,此题不通!引以为戒!
        """
        import random
        def genpwd(length):
            pass_world = ''
            for i in range(length):
                s = random.randint(1, 9)
                pass_world += str(s)
            return pass_world
    
        length = eval(input())
        random.seed(17)
        for i in range(3):
            print(genpwd(length))
        """
        import random
        def genpwd(length):
            a = 10 ** (length - 1)
            b = 10 ** length - 1
            final = '{}'.format(random.randint(a, b))
            return final
        length = eval(input())
        random.seed(17)
        for i in range(3):
            print(genpwd(length))
    
    
    def problem_4():
        import time
        timestr = "2020-10-10 10:10:10"
        t = time.strptime(timestr, "%Y-%m-%d %H:%M:%S")
        print(time.strftime("%Y年%m月%d日%H时%M分%S秒", t))
    
    
    def problem_5():
        from datetime import datetime
        import time
        day_1, day_2 = input().split(',')
        day_1 = time.strptime(day_1, "%Y年%m月%d日%H点%M分%S秒")
        day_2 = time.strptime(day_2, "%Y年%m月%d日%H点%M分%S秒")
        # 转换时间日期的结构
        d_1 = datetime(day_1[0], day_1[1], day_1[2], day_1[3], day_1[4], day_1[5])
        d_2 = datetime(day_2[0], day_2[1], day_2[2], day_2[3], day_2[4], day_2[5])
        days = (d_2 - d_1).days
        print(days)
        # 从前往后减的话,需要加abs()函数,并且还要减去1
    
    
    def problem_6():
        """
        阶乘累加求和
        """
        import math 
        sum = 0
        n = eval(input())
        for i in range(1, n + 1):
            sum += math.factorial(i)
        print(sum)
    
    
    def problem_7():
        """
        求斐波纳契(Fibonacci)数列:1, 1, 2, 3, 5, 8... 的前n项值
        """
        # 这里还有很大的优化空间,最后一步的输出中,如果用end = ',',最后一个数据后也有',',所以选择了if语句进行判断
        n = eval(input())
        def f(n):
            if n == 2 or n == 1:
                return 1
            return f(n - 2) + f(n - 1)
        for i in range(1, n + 1):
            if i < n:
                print(f(i), end = ',')
            else:
                print(f(i))
    
    
    def problem_8():
        n = eval(input())
        if n % 2 == 1:
            sum = 0
            for i in range(1, n + 1, 2):
                sum += 1 / i
        elif n % 2 == 0:
            sum = 0
            for i in range(2, n + 1, 2):
                sum += 1 / i
        print('%.2f'%sum)
    
    
    def problem_9():
        """
        猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾又多吃了一个
        第二天将第一天剩下的桃子吃了一半又多吃了一个
        以后每天以这个规律吃下去,到第十天再去吃时发现只剩下一个桃子,问猴子第一天摘了多少个桃子?
        """
    
        def peach(n):
            if n == 10:
                return 1
            elif n < 10:
                return (peach(n + 1) + 1) * 2
    
        for i in range(10, 0, -1):
            print("第{}天有{}只桃子".format(i,peach(i)))
    
    
    def probelm_10():
    
        def read_file(file, m):
            """读文件中的学校名到列表中,返回前m个记录的学校集合"""
            f = open(file, encoding='utf-8')
            lst = []
            for i in range(m):
                line = f.readline().strip("\n")
                lst.append(line.split()[1])
            return lst
    
    
        def either_in_top(alumni, soft):
            """接收两个排行榜前m高校名字集合,
            获得在这两个排行榜中均在前m个记录的学校名,按照学校名称排序,
            返回排序后的列表
            """
            lst = []
            m = len(alumni)
            for i in range(m):
                if alumni[i] in soft: # 如果同时在两个表中都有这个学校
                    lst.append(alumni[i])
            lst.sort()  #升序排序
            return lst
    
    
        def all_in_top(alumni, soft):
            """接收两个排行榜前m高校名字集合,
            获得在两个榜单中名列前m的所有学校名,按照学校名称排序,
            返回排序后的列表
            """
            lst = []
            lst.extend(alumni) # 合并
            lst.extend(soft)
            lst = list(set(lst)) # 去重
            lst.sort()
            return lst
    
    
        def only_alumni(alumni, soft):
            """接收两个排行榜前m高校名字集合,
            获得在alumni榜单中名列前m但soft榜单中未进前m的学校名,
            按照学校名称排序,返回排序后的列表
            """
            lst = []
            m = len(alumni)
            for i in range(m):
                if alumni[i] in soft:
                    continue
                else:
                    lst.append(alumni[i])
            lst.sort()
            return lst
    
    
        def only_once(alumni, soft):
            """接收两个排行榜前m高校名字集合,
            获得在alumni和soft榜单中名列前m,但不同时出现在两个榜单的学校名,
            按照学校名称排序,返回排序后的列表
            """
            lst = []
            m = len(alumni)
            n = len(soft)
            for i in range(m): 
                if alumni[i] in soft:
                    continue
                else:
                    lst.append(alumni[i])
            for i in range(n):
                if soft[i] in alumni:
                    continue
                else:
                    lst.append(soft[i])
            lst.sort()
            return lst
    
    
        def judge(n):
            if n in '1234':
                m=int(input())
                alumni_set = read_file('./24.研一周五六七节Python作业/alumni.txt',m)
                soft_set = read_file('./24.研一周五六七节Python作业/soft.txt',m)
                if n=='1':
                    either_rank = either_in_top(alumni_set, soft_set)
                    print(f'两榜单中均名列前{m}的学校:')
                    print(either_rank)
                elif n=='2':
                    all_rank = all_in_top(alumni_set, soft_set)
                    print(f'两榜单名列前{m}的所有学校:')
                    print(all_rank)
                elif n=='3':
                    only_in_alumni_rank = only_alumni(alumni_set, soft_set)
                    print(f'alumni中名列前{m},soft中未进前{m}的学校:')
                    print(only_in_alumni_rank)
                elif n=='4':
                    alumni_soft_rank = only_once(alumni_set, soft_set)
                    print(f'不同时出现在两个榜单前{m}的学校:')
                    print(alumni_soft_rank)
            else:
                print('Wrong Option')
                
    
        if __name__ == '__main__':
            num = input()
            judge(num)
            
    
    if __name__ == '__main__':
        probelm_10()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
  • 相关阅读:
    小目标检测文章阅读
    宝塔部署nginx遇到的400错误和502错误
    【动态规划刷题 16】最长等差数列 (有难度) && 等差数列划分 II - 子序列
    零基础如何自学C#?
    【分布式id和分布式锁】分布式id实现方案、分布式锁的使用场景、实现方案、注意事项_Redis03
    鸿蒙(API 12 Beta2版)媒体开发【使用OHAudio开发音频播放功能(C/C++)】
    攻防世界-WEB-easyupload
    transformer_01
    vue面试题:说说vue操作真实dom性能瓶颈
    VUE+element可以为空不为空时只能为(正整数和0)的验证
  • 原文地址:https://blog.csdn.net/wzk4869/article/details/127754968