2022年《一生一系统作业》python练习题

1-1 用python代码实现使用列表推导式,要求生成包含10个数字6的列表。

def t1_1():
    print('1-1: list = ', [6 for i in range(10)])

1-2 用python代码实现列表a_list中每隔4个元素取2个,并将提取到的元素组成新列表b_list。

def t1_2(a_list=None):
    if a_list is None:
        a_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    b_list = [a_list[i:i + 2] for i in range(4, len(a_list), 6)]  # 先从a_list中每隔4个元素提取出2各元素组成一个二维列表
    b_list = [i for j in b_list for i in j]  # 把二维列表转换成一维列表
    print('1-2: b_list = ', b_list)

1-3 编写程序,将列表num=[1,2,3,4,5,6,7,8,9]中的偶数变成它的平方,奇数保持不变。

def t1_3():
    num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    for i in range(len(num)):
        if num[i] % 2 == 0:
            num[i] = num[i] * num[i]
    print('1-3: num = ', num)

1-4 编写程序,有一列表num=[11,22,33,44,55,66,77,88,99,90],将其中所有大于66的数保存至字典的第一个键k1所对应的值中,将小于66的数保存至第二个键k2的值中。

def t1_4():
    num = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    dic = {}
    list_1 = []  # 大于66的数
    list_2 = []  # 小于66的数
    for i in num:
        if i > 66:
            list_1.append(i)
        elif i < 66:
            list_2.append(i)
    dic.setdefault('k1', list_1)
    dic.setdefault('k2', list_2)
    print('1-4: dic = ', dic)

1-5 编写程序,设计一个字典,将用户输入内容作为“键”,输出字典中对应的“值”,如果用户输入的“键”不存在,则提示“您输入的键不存在!”。

def t1_5():
    d = {1: '一', 2: '二', 3: '三'}
    a = int(input("请输入要查询的键: "))
    if a not in list(d.keys()):
        print('用户的键不存在')
    else:
        print(f'字典中{a}键对应的值为{d.get(a)}')

1-6 输入两个集合A和B,分别输出它们的交集、并集和差集。

def t1_6():
    A = set(input('请输入集合A: '))
    B = set(input('请输入集合B: '))
    b = A | B  # 并集
    j = A & B  # 交集
    c = A - B  # A - B 差集
    cc = B - A  # B - A 差集
    print('1-6: ', '\n交集: ', j, '\n并集: ', b, '\nA - B 差集: ', c, '\nB - A 差集: ', cc)

1-7 编写程序,实现删除列表重复元素的功能。

def t1_7(a=None):
    if a is None:
        a = [1, 1, 1, 2, 2, 2, 3, 3, 3]
    a = set(a)  # 强制类型转换成集合
    a = list(a)  # 强制类型转换成列表
    print('1-7: ', a)

1-8 编写程序,统计字符串中每个字母的出现次数(字母忽略大小写),并输出成一个字典。例如{‘a’:4,‘b’:2}。

def t1_8():
    d = str(input("请输入有由英文字母组成的字符串:")).lower()  # 输入一串字符串,并全部转换成小写字母的形式
    c = dict(zip([i for i in d], [0 for i in range(len(d))]))  # 创建一个原来字符串中含有字母的字典,初始次数都是0。
    for st_r in d:
        c[st_r] += 1
    print(c)

1-9 已知字符串 a = “aAsmr3idd4bgs7Dlsf9eAF”,要求如下

  • (1)将a字符串的数字取出,并输出成一个新的字符串。
  • (2)去除a字符串多次出现的字母,仅留最先出现的一个。例’abcabb’,经过去除后,输出 ‘abc’。
  • (3)将a字符串反转并输出。例:‘abc’的反转是’cba’。
  • (4)输出a字符串出现频率最高的字母。
def t1_9():
    a = "aAsmr3idd4bgs7Dlsf9eAF"
    # (1)将a字符串的数字取出,并输出成一个新的字符串。
    def fun1():
        new_str = ""
        for i in a:
            if i.isdecimal():  # 判断单个字符是否为数字。
                new_str += i
        print('t1_9: (1) ', new_str)

# (2)去除a字符串多次出现的字母,仅留最先出现的一个。例'abcabb',经过去除后,输出 'abc'。
    def fun2():
        a_list = list(a)
        set_list = list(set(a_list))
        set_list.sort(key=a_list.index)  # 根据原来的列表的索引进行排序。
        print('t1_9: (2) ', ''.join(set_list))  # 把去重后的列表进行拼接成新的字符串

# (3)将a字符串反转并输出。例:'abc'的反转是'cba'。
    def fun3():
        print('t1_9: (3) ', a[::-1])  # 使用字符串的切片操作把,步长设置为-1就可以,使字符串倒数输出

# (4)输出a字符串出现频率最高的字母。
    def fun4():
        p = ([(x, a.count(x)) for x in set(a)])  # 作为列表形式统计每个字符出现次数,列表中的元素都是以元组的形式存储着。
        p.sort(key=lambda k: k[1], reverse=True)  # 使用匿名函数lambda使,列表中,都以元组中的第二个值来进行排序。
        print('t1_9: (4) ', p[0][0])

    fun1()
    fun2()
    fun3()
    fun4()

2-1 编写程序,计算分段函数:f(x)={2x+1 x≥1 4x⁄(x-1) x<1)}

def t2_1(x):
    if x >= 1:
        return 2 * x + 1
    else:
        return 4 * x / (x - 1)

2-2 众所周知,闰年的条件是能被4整除但不能被100整除,或者能被400整除,请编程判断某一年是否为闰年。

def t2_2(year):
    if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
        print("这是闰年!")
    else:
        print("这不是闰年!")

2-3 编写程序,分别用while循环和for循环计算整数1至100的和。

def t2_3():
    # while循环
    i = 0
    sum = 0
    while i < 100:
        i = i + 1
        sum = sum + i
    print('t2_3 : while循环的值', sum)
    # for循环
    j = 0
    for i in range(1, 101):
        j = j + i
    print('t2_3 : for循环的值', j)

2-4 编写程序,通过输入某个整数n(n>0),分别用while循环和for循环计算n!。

def t2_4():
    n = int(input("请输入一个整数:"))
    sum = 1
    for i in range(1, n + 1):
        sum *= i
    print("t2-4: for循环的阶乘:", sum)
    sum = 1
    i = 1
    while (i <= n):
        sum *= i
        i = i + 1
    print("t2-4: while循环的阶乘:", sum)

2-5 编写程序,计算Sn=2-4+6-8+10-12+…。

def t2_5():
    s = 0
    for i in range(1, 51):
        if i % 2 == 0:
            s = s - 2 * i
        else:
            s = s + 2 * i
    print('t2-5: Sn = ', s)

2-6 编写程序,通过输入a,b,c三个系数的值,计算一元二次方程ax^2+bx+c=0的解。

def t2_6():
    import math
    a = int(input('请输入a的值: '))
    b = int(input('请输入b的值: '))
    c = int(input('请输入c的值: '))
    delta = b * b - 4 * a * c  # 求delta
    if delta >= 0:
        x1 = (-b + math.sqrt(delta)) / (2 * a)
        x2 = (-b - math.sqrt(delta)) / (2 * a)
        if x1 == x2:
            print(f"t2_6: 该方程的解为: x1 = x2 = {x1}")
        else:
            print(f"t2_6: 该方程的解为: x1 = {x1} x2 = {x2}")
    else:
        print("t2_6: 该方程的无解!")

2-7 编写程序,通过输入一行字符,分别统计出其中的数字、英文字母、空格和其他字符的个数。

def t2_7():
    import re
    put_in = input('请输入一行字符串: ')
    str_list = re.findall('[a-zA-z]', put_in)  # 用正则表达式来对字符串查找内容,返回为列表。
    num_list = re.findall('[0-9]', put_in)
    space_list = re.findall(' ', put_in)
    other_list = re.findall('[^a-zA-z 0-9]', put_in)
    print(f't2-7: \n英文字母的个数为: {len(str_list)}\n空格的个数为: {len(space_list)}\n其它字符个数为: {len(other_list)}\n数字的个数为: {len(num_list)}')

2-8 “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个:“水仙花数”,1^3 + 5^3 + 3^3 = 153。请编写程序输出3位水仙花数。(可使用math模块中的pow()方法)

def t2_8():
    i = int(input('请输入一个三位数: '))
    b = i // 100  # 百位数字
    s = i // 10 % 10  # 十位数字
    g = i % 10  # 个位数字
    if b * b * b + s * s * s + g * g * g== i:
        print('t2_8: 这是水仙花数!')
    else:
        print('t2_8: 这不是水仙花数!')

2-9 编写程序计算鸡兔同笼问题,设鸡、兔共有40只,脚90只,请计算鸡、兔各有多少只。

def t2_9():
    for j in range(0, 41):
        if 2 * j + (40 - j) * 4 == 90:
            print(f't2-9: 鸡有: {j} 个, 兔有: {40-j} 个')

2-10 编写程序,输入一个小于200的整数,对其进行因式分解。例如,10=2*5。

def t2_10():
    num = int(input('请输入一个小于200的数: '))
    x = 1
    flag = True
    while num > 1 and num < 200:
        print(f"t2-10: {num} = ", end='')
        while num != 1:
            x += 1
            while num % x == 0:
                num /= x
                if flag:
                    flag = False
                    print(x, end='')
                else:
                    print(f' * {x}', end='')

2-11 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再次落下,请编写程序计算第10次落地时,共经过多少米?

def t2_11():
    h = 100   # 高度为100米
    s = 0
    i = 1
    while i < 10:
        s += h + h / 2
        h /= 2
        i += 1
    print(f't2-11: 高度为: {s}')

2-12 有一分数序列:2/1,3/2,5/3,8/5,13/8/,21/13….,编写程序求出这个数列的前20项之和。

def t2_12():
    a = 2.0
    b = 1.0
    s = 0
    for i in range(1, 20 + 1):
        s += a / b
        a, b = a + b, a    # 按照斐波那契数列递归往下取数。
    print("t2-12: 前20项和为:", s)

2-13 编写程序,求1+2!+3!+ ….+20!的和。

def t2_13():
    s = 0
    t = 1
    for n in range(1, 21):
        t *= n
        s += t
    print(f't2-13: 1+2!+3!+ ….+20! 的值为: {s}')

2-14 编写程序,输入一个不多于五位的正整数,计算它是几位数,并逆序打印出各位数字。

def t2_14():
    x = int(input('请输入一个小于5位的数: '))
    a = x // 10000
    b = x % 10000 // 1000
    c = x % 1000 // 100
    d = x % 100 // 10
    e = x % 10
    if a != 0:
        print('t2-14: 该数是五位数, 其倒序为: ' + str(e) + str(d) + str(c) + str(b) + str(a))
    elif b != 0:
        print('t2-14: 该数是四位数, 其倒序为: ' + str(e) + str(d) + str(c) + str(b))
    elif c != 0:
        print('t2-14: 该数是三位数, 其倒序为: ' + str(e) + str(d) + str(c))
    elif d != 0:
        print('t2-14: 该数是二位数, 其倒序为: ' + str(e) + str(d))
    else:
        print('t2-14: 该数是个位数, 其倒序为: ' + str(e))

2-15 编写程序,输入一个五位数,判断它是不是回文数。回文数是指个位与万位相同,十位与千位相同,如12321是回文数。

def t2_15():
    s = input('请输入一个五位数: ')
    if s[0] == s[4] and s[1] == s[3]:
        print('t2-15: 该数是回文数!')
    else:
        print('t2-15: 该数不是回文数!')

主函数代码如下,主要是测试以上的代码,运行结果是否符合要求。

if __name__ == '__main__':
    # t1_1()
    # t1_2()
    # t1_3()
    # t1_4()
    # t1_5()
    # t1_6()
    # t1_7()
    # t1_8()
    # t1_9()
    # t2_3()
    # t2_4()
    # t2_6()
    # t2_5()
    # t2_7()
    # t2_8()
    # t2_9()
    # t2_10()
    # t2_11()
    # t2_12()
    # t2_13()
    # t2_14()
    # t2_15()
    pass
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想清楚再敲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值