python练习杂糅②——编程基础

  1. 打印如下图案
    (1)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    for i in range(1, num+1):
        print('*' * i)

    结果呈现:

    (2)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    for i in range(1, num+1):
        print(' ' * (num - i) + '*' * i)

    结果呈现:

    (3)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    for i in range(1, num+1):
        print(' ' * (num - i), end='')
        print('*' * (2 * i - 1))

    结果呈现:

    (4)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    for i in range(num, 0, -1):
        print(' ' * (num - i), end='')
        print('*' * (2 * i - 1))

    结果呈现:

    (5)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    for i in range(1, num // 2 + 2):
        print(' ' * (num - i), end='')
        print('*' * (2 * i - 1))
    for i in range(num//2, 0, -1):
        print(' ' * (num - i), end='')
        print('*' * (2 * i - 1))

    结果呈现:

    (6)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    # 上
    for i in range(1, num // 2 + 2):
        print(' ' * (num - i), end='')
        for j in range(2 * i - 1):
            if j == 0 or j == 2 * i - 2:
                print('*', end='')
            else:
                print(' ', end='')
        print()
    # 下
    for i in range(num // 2, 0, -1):
        print(' ' * (num - i), end='')
        for j in range(2 * i - 1):
            # 判断第一个、最后一个
            if j == 0 or j == 2 * i - 2:
                print('*', end='')
            else:
                print(' ', end='')
        print()

    结果呈现:

    (7)

    代码呈现:

    num = int(input('请输入你想打印的行数:'))
    # 上
    for i in range(1, num // 2 + 2):
        print(' ' * (num - i), end='')
        for j in range(2 * i - 1):
            if j == 0 or j == 2 * i - 2 or i == num // 2 + 1 or j == i - 1:
                print('*', end='')
            else:
                print(' ', end='')
        print()
    # 下
    for i in range(num // 2, 0, -1):
        print(' ' * (num - i), end='')
        for j in range(2 * i - 1):
            # 判断第一个、最后一个
            if j == 0 or j == 2 * i - 2 or i == num // 2 + 1 or j == i - 1:
                print('*', end='')
            else:
                print(' ', end='')
        print()

    结果呈现:

  2. 判断一个数是否是质数(素数)
    代码呈现:

    num = int(input('请输入一个整数:'))
    if num == 1:
        print(f'{num}不是一个素数')
    elif num > 1:
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                print(f'{num}不是一个素数')
                break
        else:
            print(f'{num}为素数')
    

    结果呈现:

  3. 设计一个程序,完成(英雄)商品的购买(界面为杂糅①所打印的界面)
    要求:展示商品信息(折扣)->输入商品价格->输入购买数量->提示付款 输入付款金额->打印购买小票(扩展)
    代码呈现:

    header = '\t\t\t\t\t\t\t英雄联盟英雄列表'
    message = '\n编号\t姓名\t\t昵称\t\t\t价格\t\t库存\t\t描述'
    option = ('\n1\t纳尔\t\t迷失之牙\t\t3500\t100\t\t丛林不会原谅盲目与无知'
              '\n2\t瑞文\t\t放逐之刃\t\t4000\t100\t\t她是残忍高效的战士'
              '\n3\t薇恩\t\t暗夜猎手\t\t3500\t100\t\t这个世界不像人们想象的那么美好'
              '\n4\t扎克\t\t生化魔人\t\t3000\t100\t\t即使你没有脊柱,你也必须站起来'
              '\n5\t杰斯\t\t未来守护者\t2500\t100\t\t武装着睿智与魅力,你的选择没有错')
    decor = '~*' * 38
    
    # 商品信息
    products = ['纳尔', '瑞文', '薇恩', '扎克', '杰斯']
    
    # 展示商品信息
    print(header, '\n', decor, message, option, '\n', decor)
    prices = {
        1: 3500,
        2: 4000,
        3: 3500,
        4: 3000,
        5: 2500
    }
    
    choice = int(input("请选择您要购买的商品编号(1-5): ")) - 1  # 由于python中的列表索引从0开始所以要减一
    if choice < 0 or choice >= len(products):
        print("选择的商品编号不存在,请重新运行程序。")
        exit()
    
    quantity = int(input("请输入购买数量: "))
    
    total_price = prices[choice + 1] * quantity  # 注意这里使用choice + 1来获取正确的价格
    print(f"您选择的是 {products[choice]},总价为: {total_price}元")  # 去除了格式化中的“.2f”因为总价是整数
    
    # 付款
    payment = float(input("请输入付款金额: "))
    while payment < total_price:
        print("付款金额不足,请重新输入。")
        payment = float(input("请输入付款金额: "))
    2
    2
    change = payment - total_price
    
    # 打印小票
    bill_message = '英雄购买票据'
    product_name = products[choice]
    product_price = prices[choice + 1]
    bill_message_main = (f'\n\t\t英雄名称:{product_name}'
                         f'\n\t\t英雄价格:{product_price}'
                         '\n'
                         f'\n\t\t应付款金额:{total_price}'
                         f'\n\t\t实际付款金额:{payment}'
                         f'\n\t\t找零:{change}')
    ad = ('\n插播广告:当风云变色,当流离失所,世界不再是旧日模样'
          '\n你是否会为了自己的梦想战斗,直至力战身亡,直至彼岸他乡')
    bill_decor = '~*'*40
    print(f'{bill_message}\n{bill_decor}\n{bill_message_main}\n{ad}\n{bill_decor}\n(温馨提示)按任意键返回上一级菜单:')

    结果呈现:

  4. 有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?
    代码呈现:

    min_nums = None
    max_nums = None
    for i in range(1000, 10000):
        if i % 1000 // 100 == 3 and i % 100 // 10 == 6 and i % 2 == 0 and i % 3 == 0:
            if min_nums is None:
                min_nums = max_nums = i
            if i < min_nums:
                min_nums = i
            if i > max_nums:
                max_nums = i
    print(f'这个四位数最小为{min_nums}'
          f'\n这个四位数最大为{max_nums}')
    

    结果呈现:

  5. 编程求一个四位自然数ABCD,它乘以A后变成DCBA。
    代码呈现:

    for i in range(1000, 10000):
        a = i // 1000
        b = (i % 1000) // 100
        c = (i % 100) // 10
        d = i % 10
        if (a*1000+b*100+c*10+d) * a == d*1000+c*100+b*10+a and a != 0:
            print(f'这个数为{i}')
            break

    结果呈现:

  6. 用户输入两个数a、b。如果a能被b整除或a加b大于1000,则输出a;否则输出b。
    代码呈现:

    a = float(input("请输入a的值:"))
    b = float(input("请输入b的值:"))
    if b//a or (a+b) > 1000:
        print(f'输出a的值为{a}')
    else:
        print(f'输出b的值为{b}')
    

    结果呈现:

  7. 请输入一个数,判断这个数是偶数还是奇数,如果使用偶数,请判断从1到该数是3的倍数有哪些,如果是奇数,请判断从1到该数是5的倍数有哪些?
    代码呈现:

    numbers = int(input('请输入一个整数:'))
    if numbers % 2 == 0:
        print(f'{numbers}为偶数,且1到该数之间能被3整除的数为')
        for i in range(1, numbers+1):
            if i % 3 == 0:
                print(i)
    
    elif numbers % 2 != 0:
        print(f'{numbers}为奇数,且1到该数之间能被3整除的数为')
        for i in range(1, numbers+1):
            if i % 5 == 0:
                print(i)
    print('判断完毕')
    

    结果呈现:

  8. 某商店T恤的价格为35元/件(2件9折,3件以上8折),裤子的价格为120 元/条(2条以上9折).小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?
    代码呈现:

    T = int(input('请输入你要购买T恤的数量:'))
    J = int(input('请输入你要购买裤子的数量:'))
    
    T_sum = T * 35
    J_sum = J * 120
    
    if T == 2:
        T_sum = T_sum * 0.9
    elif T > 2:
        T_sum = T_sum * 0.8
    
    if J >= 2:
        J_sum = J_sum * 0.9
    A_sum = T_sum + J_sum
    print(f'T恤35/件,你购买了{T}件'
          f'\n裤子120/条,你购买了{J}条'
          f'\n一共消费{A_sum}元')
    

    结果呈现:

  9. 鸡兔同笼,从上面看有35个头,从下面看有94只脚,请问鸡有几只,兔有几只?
    代码呈现:

    head = int(input('请输入总头数: '))
    foot = int(input('请输入总脚数: '))
    
    j = 0
    t = 0
    
    while j <= head:
        if 2 * j + 4 * t == foot and j + t == head:
            print(f'鸡有{j}'
                  f'\n兔有{t}')
            break
        else:
            j += 1
            t = head - j
    else:
        print("无法找到符合条件的解")
    

    结果呈现:

  10. 猜数字游戏(使用random模块完成) 电脑随机一个范围内的数,用户输入数据判断,如果数大了,提供“数大了”,成功之后,显示用户猜测次数并加上用户是否继续功能,如果判断超过5次后,停止判断,返回失败。
    代码呈现:

    import random
    
    
    def guess_what_num():
        while True:
            num_to_guess = random.randint(0, 101)
            times = 0
            max_times = 5
            print(f'{num_to_guess}')  # 为了方便结果测试,在此打印{num_to_guess}已示查看,真正运行游戏时请删除
            print('你有5次机会来猜我所想的正整数(0~100)')
    
            while times <= max_times:
                guess = int(input('请输入你猜的数字:'))
                times += 1
    
                if guess < num_to_guess:
                    print('猜小了!')
                elif guess > num_to_guess:
                    print('猜大了!')
                else:
                    print(f'哇塞!我想的数字是{num_to_guess},你猜对了耶,咱俩心有灵犀!!!'
                          f'\n共用了{times}次猜对!')
                    break
                if times == max_times:
                    print('就到此罢,你我无缘,江湖不见!!!')
                    break
    
            game_continue = input('还想和我玩儿?点(Y/y)试试:')
            if game_continue != 'Y' and game_continue != 'y':
                print('你这就走了,像是下了某种决定!')
                break
    
    
    guess_what_num()
    

    结果呈现:

  11. 猜拳游戏:石头、剪刀、布的游戏
    代码呈现:

    import random
    
    
    def hand_guess():
        while True:
            hand_to_guess = random.randint(1, 3)
            print('\nThe guessing game begins'
                  '\n!让我来看看今天是谁哭着回去!')
            print(hand_to_guess)  # 为了方便结果测试,在此打印{hand_to_guess}已示查看,真正运行游戏时请删除
            guess = int(input('石头(1)剪刀(2)布(3):'))
            if guess not in [1, 2, 3]:
                print('请输入有效数字!')
            elif guess == 1 and hand_to_guess == 3:
                print('我是布!')
                print('哈哈,你输了!')
            elif guess == 2 and hand_to_guess == 1:
                print('我是石头!')
                print('哈哈,你输了!')
            elif guess == 3 and hand_to_guess == 2:
                print('我是剪刀!')
                print('哈哈,你输了!')
            elif guess == hand_to_guess:
                print('!平局!重来!')
            else:
                print(f'厉害呀!你赢了!')
            game_continue = input('还想再玩一局吗?(输入 1、2 或 3 继续,其他任何输入退出游戏): ')
            if game_continue not in ['1', '2', '3']:
                print('游戏结束,谢谢参与!')
                break
            else:
                print('')
    
    
    hand_guess()
    

    结果呈现:

如果水印信息杂糅在音频中,那么我们需要先确定水印信息的位置,在音频中提取出水印信息的进制数据,再将其转换为音频格式。这个过程需要使用水印嵌入时的位置和算法来确定水印信息的位置,然后再进行提取。 以下是一个示例代码,用于从音频C中提取出水印信息: ```matlab % 读取音频C [c, fs_c] = audioread('audio_c.wav'); % 确定水印信息的位置 start_pos = 100000; % 假设水印信息从第100000个采样点开始 binary_a_len = 1024; % 假设水印信息的长度为1024位 % 从音频C中提取出水印信息的进制数据 binary_extracted = dec2bin(typecast(c(start_pos:start_pos+binary_a_len-1), 'uint16')); % 将提取出的进制数据重新转换为音频D uint16_extracted = uint16(bin2dec(binary_extracted)); d = typecast(uint16_extracted, 'double'); d = reshape(d, [binary_a_len/2, 2]); % 假设音频C是双声道,因此需要将提取出的数据重新reshape为2列 % 将提取出的音频D保存为文件 audiowrite('watermark_extracted.wav', d, fs_c); ``` 在这个示例代码中,我们假设已经知道水印信息从第100000个采样点开始,长度为1024位,因此我们可以从音频C中提取出这部分进制数据,然后将其转换为音频D。具体来说,我们使用`typecast`函数将音频C的一部分数据转换为`uint16`类型的数据,然后使用`dec2bin`函数将其转换为进制数据。然后我们将提取出的进制数据重新转换为音频D,并使用`audiowrite`函数将其保存为文件。 需要注意的是,以上代码中的假设可能不适用于所有情况,实际应用中需要根据具体情况进行调整。如果无法确定水印信息的位置,或者需要提取出非连续的水印信息,则需要使用更复杂的提取算法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值