新开课周末作业-循环练习题(2)

  1. 判断101-200之间有多少个素数,并输出所有素数。

    for i in range(101,201):
        for j in range(2,int(i**0.5)):
            if i%j==0:
                # print(i)
                break
            else:
                print(i)
                break
    
  2. 求整数1~100的累加值,但要求跳过所有个位为3的数。

    count=0
    for i in range(1,101):
        ge = i%10
        if ge == 3:
            continue
        else:
            count+=i
    print(count)
    
  3. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数

    num = int(input("输入你想要的第几个分数:"))
    change1 = 2
    change2 = 3
    change3 = 1
    change4 = 2
    for i in range(2,num):
        change = change1+change2
        changefmu = (change3)+(change4)
        # 交换值
        change2,change1=change,change2
        change4,change3=changefmu,change4
        if i==num-1:
            print(f'{change}/{changefmu}')
    
  4. 写程序计算 n 的阶乘 n! 的结果

    num = int(input("enter number:"))
    count=1
    for i in range(1,num+1):
        count*=i
    print(count)
    
  5. 求1+2!+3!+…+20!的和

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

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

n = int(input("enter n:"))
a = int(input("enter a:"))
str1='1'
sum=0
for _ in range(n):
    sum +=a*int(str1)
    str1+='1'
print(sum)
#enter n:3
#enter a:2
#246
  1. 控制台输出三角形

    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
    
    1. a
    n = int(input("enter n:"))
    for i in range(n,0,-1):
        for j in range(i):
            print('*',end='')
        print()
        
    #enter n:5
    #*****
    #****
    #***
    #**
    #*
    
    
    1. b
    n = int(input("enter n:"))
    for i in range(1,(n-1)//2+2):
        count=0
        for j in range(i):
            if j == i-1:
                print(" "*((n-1)//2-(j)),end='')#打空格
                print('*'*(2*(i-1)+1),end='')
        print()
    #enter n:5
    #  *
    # ***
    #*****
    
    1. c
    n = int(input("enter n:"))
    # 控制行数
    for i in range(1,n+1):
        print(' '*(n-i),end='')
        for j in range(i):
            print((j)+1,end='')
        # 右边
        for k in range(i-1,0,-1):
            print(k,end='')
        print()
    #enter n:5
    #    1
    #   121
    #  12321
    # 1234321
    #123454321
    
  2. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

    count=0
    for i_xfs in range(6):
        for i_yas in range(20):
            for i_xz in range(50):
                if i_xfs*15 + i_xz*2 + i_yas*5 == 100:
                    count+=1
                    print(f'洗发水{i_xfs}瓶,香皂{i_xz}盒,牙刷{i_yas}只')
    print(f'总共{count}种')  #总共40种
    
  3. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

    count=0
    while True:
        # 单位换算1m = 1000mm
        if float((0.08)*2**count) >= float(8848.13*1000):
            print(count)
            break
        else:
            count+=1
    #27次
    
  4. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    #
    max_r = 2
    min_r = 2
    count=0
    while count<50:
        count += 1
        if count==1 or count==2:
            print(f'{count}月的兔子总数是:{2}')
        else:
         # 从三月开始
         # 因为每次小兔子产生的数量都等于大兔子的数量
            sum1 = max_r + min_r
            max_r,min_r = max_r+min_r,max_r
            print(f'{count}月的兔子总数是:{sum1}')
            
    #1月的兔子总数是:2
    #2月的兔子总数是:2
    #3月的兔子总数是:4
    #4月的兔子总数是:6
    #5月的兔子总数是:10
    #6月的兔子总数是:16
    #7月的兔子总数是:26
    #8月的兔子总数是:42
    #9月的兔子总数是:68
    #10月的兔子总数是:110
    
  5. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

    num = int(input("enter a number:"))
    list1=[]
    result = 1
    numcopy = num
    str1=''
    # 先判断num是否质数
    for i in range(2,num):
        if num%i!=0:
            #素数
            change=0
        else:
            change=1
            break
    # print(change)
    if change:
        # 找出所有的质因子
        for i in range(1, num):
            if num % i == 0:
                list1.append(i)
        for j in list1:
            if j % 2 == 0 and j != 2:
                list1.remove(j)
        # print(list1)
        #取出质因子1
        list1.remove(1)
        # print(list1)
        A=False
        while not A:
            for k in list1:
                if num%k==0:
                    num = num//k
                    str1+=str(k)+','
                    result*=k
                    if result == numcopy:
                        A = True
                else:
                    continue
        #  输出
        # print(str1)
        str1+='1'    #目的就是为了将输出结果写成45 = 3x5x3x1形式,因为我用了replace(',', 'x')
        str2 = str1.replace(',', 'x')
        # print(str2)
        print(f'{numcopy} = {str2}')
    else:
        print(f'{num} = 1*{num}')
    #输出:
    #enter a number:90
    #90 = 2x3x5x3x1
    
  6. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

    number = int(input("输入四位数字:"))
    ge = number%10
    shi = number%100//10
    bai = number%1000//100
    qian = number//1000
    # print(f'{qian}{bai}{shi}{ge}')
    list1 = [qian,bai,shi,ge]
    print(list1)
    str1 =''
    for i in list1:
        list1[list1.index(i)] = (i+5)
        str1+=str(list1[list1.index(i + 5)]%10)
    list2 = list(str1)
    # 将字符串转为数值,同时交换值
    list2[0] = int(list2[3])
    list2[1] =int(list2[2])
    list2[2] =int(list2[2])
    list2[3] =int(list2[3])
    print(list2)
    
    #输入四位数字:3445
    #[0, 9, 9, 0]
    
  7. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

    money = 10000
    for i in range(5):
        lv = money*(0.003)
        money = lv+money
    print(money)
    #10150.90270405243
    
  8. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

    num = int(input("enter number:"))
    total =0
    count=0
    result=0
    numcopy = num
    while True:
        if num//10!=0 or 1<num<9:
            result += num % 10
            num = num // 10
            count += 1
            print(count,result,num)
        else:
            print(f'{numcopy}各位数上的和等于:{result}')
            break
    
  9. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

    #最大公约数
    num1 = int(input('enter number:'))
    num2 = int(input('enter number:'))
    if num1>num2:
        min_num = num2
        for i in range(min_num+1,1,-1):
            if num2%i==0 and num1%i==0:
                print(f'{num1}{num2}的最大公约数是{i}')
                break
        else:
            print(f'{num1}{num2}无最大公约数')
    else:
        min_num = num1
        for i in range(min_num + 1, 1, -1):
            if num2 % i == 0 and num1 % i == 0:
                print(f'{num1}{num2}的最大公约数是{i}')
                break
        else:
            print(f'{num1}{num2}无最大公约数')
            
            
    #最小公倍数
    num1 = int(input('enter number:'))
    num2 = int(input('enter number:'))
    # 先找约数
    if num1 > num2:
        max_num = num1
        while True:
            if max_num%num2==0 and max_num%num1==0:
                print(f'{num1}{num2}的最小公倍数是{max_num}')
                break
            max_num+=1
    else:
        max_num = num2
        while True:
            if max_num%num2==0 and max_num%num1==0:
                print(f'{num1}{num2}的最小公倍数是{max_num}')
                break
            max_num+=1
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值