周末作业-循环练习题

本文解决了一系列编程挑战题目,包括计算素数数量、累加求和、斐波那契数列等,通过具体实例展示了多种算法的应用。
  1. 判断101-200之间有多少个素数,并输出所有素数。

    prime_numbers = []
    for number in range(101, 201):
        for i in range(2, number):
            if not number % i:
                break
        else:
            prime_numbers.append(number)
    print(f'101-200之间有{len(prime_numbers)}个素数,如下:\n{prime_numbers}')
    
    101-200之间有21个素数,如下:
    [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
    
  2. 求整数1~100的累加值,但要求跳过所有个位为3的数。

    summ = 0
    for i in range(1, 101):
        if int(str(i)[-1]) == 3:
            continue
        summ += i
    print(f'累加值为{summ}')
    
    累加值为4570
    
  3. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数

    n = 20
    numbers1 = [2, 3]
    numbers2 = [1, 2]
    for i in range(2, n):
        numbers1.append(numbers1[i-2] + numbers1[i-1])
        numbers2.append(numbers2[i-2] + numbers2[i-1])
    print(f'第{n}个分数是{numbers1[-1]} / {numbers2[-1]}')
    
    第20个分数是17711 / 10946
    
  4. 写程序计算 n 的阶乘 n! 的结果

    n = input('多少的阶乘?:')
    try:
        n = int(n)
    except:
        print('格式不对!')
    else:
        product = 1
        for i in range(1, n+1):
            product *= i
        print(f'{n}的阶乘结果为:{product}')
    
    多少的阶乘?:10
    10的阶乘结果为:3628800
    
  5. 求1+2!+3!+…+20!的和

    summ = 0
    for n in range(1, 21):
        product = 1
        for i in range(1, n+1):
            product *= i
        summ += product
    print(summ)
    
    2561327494111820313
    
  6. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

    例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333

    a = input('数字a=:')
    n = input('项数n=:')
    try:
        a = int(a)
        n = int(n)
    except:
        print('格式不对!')
    else:
        if 1 <= a <= 9:
            summ = 0
            for i in range(1, n+1):
                summ += int(str(a) * i)
            print(summ)
        else:
            print('请输入1-9的a!')
    
    数字a=:3
    项数n=:5
    37035
    
  7. 控制台输出三角形

    a.根据n的值的不同,输出相应的形状
    n = 5时             n = 4
    *****               ****
    ****                ***
    ***                 **
    **                  *
    *
    
    b.根据n的值的不同,输出相应的形状(n为奇数)
    n = 5               n = 7
      *                    *
     ***                  ***
    *****                *****
                        *******
    
    c. 根据n的值的不同,输出相应的形状
    n = 4
       1
      121
     12321
    1234321
    
    n = 5
        1
       121
      12321
     1234321
    123454321
    
    n = input('请输入n:')
    shape = input('请输入形状a,b或c:')
    try:
        n = int(n)
    except:
        print('格式不对!')
    else:
        if shape not in 'abc':
            print('形状为a,b或c!')
            
        # 形状a
        elif shape == 'a':
            for i in range(n):
                for j in range(i, n):
                    shape_a = '*'
                    print(shape_a, end='')
                print()
                
        # 形状b
        elif shape == 'b':
            if not n % 2:
                print('形状c的n为奇数!')
            elif n % 2:
                for i in range(1, n+1, 2):
                    # 每行 = 左边空格 + 中间星星 + 右边空格
                    shape_b = (' ' * int((n-i)/2) + 
                               '*' * i + 
                               ' ' * int((n-i)/2))
                    print(shape_b)
                    
        # 形状c
        elif shape == 'c':
            for i in range(1, n+1):
                str_numbers = ''
                for j in range(1, i+1):  
                    str_numbers += str(j)
                    # 每行 = 左边空格 + 左边序列 + 中心数 + 右边序列 + 右边空格
                    shape_c = (' ' * (n-i) + 
                               str_numbers[:-1] +  # 最后一位不取
                               str(i) + 
                               str_numbers[:-1][::-1] + 
                               ' ' * (n-i))
                print(shape_c)
    
    请输入n:7
    请输入形状a,b或c:c
          1      
         121     
        12321    
       1234321   
      123454321  
     12345654321 
    1234567654321
    
  8. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

    # 每种至少买一个
    money, shampoo, soap, brush = 100, 15, 2, 5
    for n_shampoo in range(1, money // shampoo + 1):
        money_left_1 = money - n_shampoo * shampoo
        
        for n_brush in range(1, money_left_1 // brush + 1):
            money_left_2 = money_left_1 - n_brush * brush
            
            for n_soap in range(1, money_left_2 // soap + 1):
                money_left_3 = money_left_2 - n_soap * soap
                
                if money_left_3 == 0:
                    print(f'洗发水{n_shampoo}个,牙刷{n_brush}个,香皂{n_soap}个。')
    
    洗发水1个,牙刷1个,香皂40个。
    洗发水1个,牙刷3个,香皂35个。
    洗发水1个,牙刷5个,香皂30个。
    洗发水1个,牙刷7个,香皂25个。
    洗发水1个,牙刷9个,香皂20个。
    洗发水1个,牙刷11个,香皂15个。
    洗发水1个,牙刷13个,香皂10个。
    洗发水1个,牙刷15个,香皂5个。
    洗发水2个,牙刷2个,香皂30个。
    洗发水2个,牙刷4个,香皂25个。
    洗发水2个,牙刷6个,香皂20个。
    洗发水2个,牙刷8个,香皂15个。
    洗发水2个,牙刷10个,香皂10个。
    洗发水2个,牙刷12个,香皂5个。
    洗发水3个,牙刷1个,香皂25个。
    洗发水3个,牙刷3个,香皂20个。
    洗发水3个,牙刷5个,香皂15个。
    洗发水3个,牙刷7个,香皂10个。
    洗发水3个,牙刷9个,香皂5个。
    洗发水4个,牙刷2个,香皂15个。
    洗发水4个,牙刷4个,香皂10个。
    洗发水4个,牙刷6个,香皂5个。
    洗发水5个,牙刷1个,香皂10个。
    洗发水5个,牙刷3个,香皂5个。
    
  9. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

    thick = 0.08 * 10**(-3)
    mount = 8848.13
    n = 0
    while thick < mount:
        n += 1
        thick *= 2
    print(f'对折{n}次后达到珠穆朗玛峰的高度。')
    
    对折27次后达到珠穆朗玛峰的高度。
    
  10. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    ##### Fibonacci数列 x 2 只
    n = input('请输入第几个月:')
    try:
        n = int(n)
    except:
        print('格式不对!')
    else:
        old_1 = 1
        old_2 = 0
        old_3 = 0
        if n < 1:
            print('请输入正整数!')
        else:
            if n == 1:
                print('第1个月有兔子2只。')
            else:
                for i in range(n-1):
                    old_3 += old_2
                    old_2, old_1 = old_1, old_3
                    sum_pair = old_1 + old_2 + old_3
                else:
                    print(f'第{n}个月兔子有{sum_pair * 2}只。')
    
    请输入第几个月:9
    第9个月兔子有68只。
    
  11. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

    num = input('请输入一个正整数:')
    try:
        num = int(num)
    except:
        print('格式不对!')
    else:
        if num <= 0:
            print('不是正整数!')
        else:
            eq = f'{num}='
            quotient = num
            while quotient != 1:  # 商为1时不再循环
                for factor in range(2, int(quotient)+1):
                    if quotient % factor == 0:
    
                        # 检查因子是不是质数
                        for factor_f in range(2, int(factor**.5)+1):
                            if factor % factor_f == 0:  # 非质不要
                                break
                        else:
                            eq += f'{factor}x'
                            quotient /= factor
                            break
            print(eq[:-1])
    
    请输入一个正整数:170
    170=2x5x17
    
  12. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

    num = input('请输入四位的整数:')
    try:
        num = int(num)
    except:
        print('格式不对!')
    else:
        if len(str(num)) != 4:
            print('位数不对!')
        else:
            en_code = ''
            for i in str(num):
                en_code += str((int(i) + 5) % 10)
            en_code = en_code[::-1]
            print(f'加密后的值为:', en_code)
    
    请输入四位的整数:3457
    加密后的值为: 2098
    
  13. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

    year = 5
    rate = 0.003
    money = 10000
    for i in range(year):
        money *= 1 + rate
    print(f'{year}年后,获得本金{money}元')
    
    5年后,获得本金10150.902704052423元
    
  14. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

    num = input('请输入一个整数:')
    try:
        num = int(num)
    except:
        print('格式不对!')
    else:
        summ = 0
        sign = 1
        if num < 0:
            num = str(num)[1:]
            sign = -1
        else:
            num = str(num)
        for i in num:
            summ += int(i)
        print(f'{num}各位上的数字的和为:{summ * sign}')
    
    请输入一个整数:123
    123各位上的数字的和为:6
    
  15. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

    a = input('请输入第一个整数:')
    b = input('请输入第二个整数:')
    try:
        a, b = int(a), int(b)
    except:
        print('格式不对!')
    else:
        common_divi = 1
        common_multi = 1
        small = min(a, b)
        big = max(a, b)
        for divi in range(1, small+1, -1):
            if small % divi == 0 and big % divi == 0:
                common_divi = divi
                break
        for multi in range(big, small*big+1):
            if multi % big == 0 and multi % small == 0:
                common_multi = multi
                break
        print(f'{a}和{b}的最大公约数:{common_divi}\n{a}和{b}的最小公倍数:{common_multi}')
    
    请输入第一个整数:4
    请输入第二个整数:7
    4和7的最大公约数:1
    4和7的最小公倍数:28
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值