python条件语句和循环语句练习

1、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完?

a=1020
day=0
while a>0:
    a=a//2-2
    day+=1
    print(a," ",end="")
print()
print(day)

2、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?

peach=1
for i in range(9):
    peach=(peach+1)*2
print(peach)

3、有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?  分析:兔子的规律为数列,1,1,2,3,5,8,13,21

x=1
y=1
for i in range(3,13):
    z=x+y
    x=y
    y=z
    print("第",i,"个月共计",z,"只兔子")

4、任意输入一个整数(小于10位),输出它一共有多少位。

a=int(input("请输入一个小于十位位数的整数\n"))
sum=0
while a>0:
    a//=10
    sum+=1
print("你输入的数的位数为:",sum)

5、计算1000以内所有不能被7整除的整数之和

sum=0
for i in range(7,1001):
    if i%7!=0:
        sum+=i
print("sum=",sum)

6、本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是

fund=10000
for i in range(5):
    fund = fund*0.003+fund
print("五年后本金为:",fund)

7、计算 1+2-3+4-5+6-7....+100的结果

sum=0
for i in range(1,101):
    if i%2==0:
        sum+=i
    else:
        sum-=i
print("sum=",sum)

8、一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)

thickness=0.08/100
times=0
while thickness<8848.13:
    thickness *= 2
    times+=1
print("经过",times,"次后超过珠穆朗玛峰,且高度为",thickness)

9、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1

i=int(input("请输入一个整数\n"))
a=i
factorial=1
while a>0:
    factorial*=a
    a-=1
print(i,"的阶乘为:",factorial)

10、你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数

a=3e+9
print("请输入一系列正整数数据,输入-1表示输入结束")
i=0
even=0
odd=0
num=0
while num != -1:
    i+=1
    num=int(input("输入正整数\n"))
    if num<=0:
        pass
    elif num%2==0:
        even+=1
    else:
        odd+=1
print("在你输入的数中,其中正整数偶数有",even,"个,奇数有",odd,"个")

11、判断2-100之间有多少个素数,并输出所有素数。

程序分析:判断素数的方法:用一个数分别去除2到 (这个数),如果能被整除,则表明此数不是素数,反之是素数。

for i in range(2,101):
    for j in range(2,i+1):
        if(j==i):
            print("素数",j)
        if(i%j==0):
            break

12、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

for i in range(100,1000):
    a=i//100
    b=i//10%10
    c=i%10
    if(i==a**3+b**3+c**3):
        #print("a=",a," b=",b," c=",c)
        print(i)

13、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n不等于k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

n = int(input("请输入一个大于2的正整数\n"))
k = 2
print(n,"=",end="")
while True:
    if k==n:
        print(k)
        break

    elif n%k==0:
        print(k,"*",end="")
        n/=k
        k=2
    else :
        k+=1

14、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如5+55+555+5555+55555(此时共有5个数相加)。

程序分析:关键是计算出每一项的值。

a=int(input("请输入一个正整数\n"))
num=0
sum=0
s=0
for i in range(a):
    num=a*10**i
    sum+=num
    s+=sum
print(s)

15、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数

for i in range(2,1001):
    sum=0
    for j in range(1,i):
            if i%j==0:
                sum+=j
    if sum==i:
        print(i)

16、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高

height=100
sum=100
for i in range(10):
    height/=2
    sum+=height
print("height=",height," sum=",sum)

17、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

count=0
for a in range(1,5):
    for b in range(1,5):
        for c in range(1,5):
            print(f"{a}",f"{b}",f"{c}")
            count += 1
print("共有",count,"个数")

18、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

profit=float(input("请输入利润(单位:万元):\n"))
bonus=0
if profit<0:
    print("你输入的利润不合理")
elif profit<=10:
    bonus=profit*0.1
elif profit<=20:
    bonus=10*0.1+(profit-10)*0.075
elif profit<=40:
    bonus=10*0.1+10*0.75+(profit-20)*0.05
elif profit<=60:
    bonus=10*0.1+10*0.75+20*0.05+(profit-40)*0.03
elif profit<=100:
    bonus=10*0.1+10*0.75+20*0.05+20*0.03+(profit-60)*0.015
else :
    bonus=10*0.1+10*0.75+20*0.05+20*0.03+40*0.015+(profit-60)*0.01
print("利润为:",bonus)

19、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:在10万以内判断,另外由这个数的开方数自乘得到平方数,进行比较

num=0
for i in range(10,100):
    for j in range(10,100):
        if i**2==j**2-68:
            num=i**2-100
            print("此数是",num)

20、用*打印出菱形:在上午的三角形基础上打印

程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。

a = 5
for i in range(a):
     for b in range(a-i):
         print(" ",end="")
     for j in range(i+1):
        print("* ",end="")
     print()
for c in range(a-1):
     print(" ",end="")
     for b in range(c+1):
         print(" ",end="")
     for j in range(a-c-1):
         print("* ",end="")
     print()

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

a=1#分母
b=2#分子
sum=0
for i in range(20):
    sum+=b/a
    c=a+b
    a=b
    b=c
print("总和为:%.2f"%sum)

22、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

a=input("请输入一个不多于五位的正整数:\n")
l=int(a)
bit=1
while True:
    if l<10.0:
        break
    else :
        l/=10
        bit+=1
print("你输入的数的位数为:",bit)
times=len(a)
while times>0:
    print(a[times-1]," ",end="")
    times-=1

23、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

num=int(input("请输入一个五位数,判断其是否为回文数:\n"))
if num>=10000 or num<=99999:
    u=num%10#个位
    d=(num%100)//10#十位
    k=(num//1000)%10#千位
    m=num//10000#万位
    if u==m and d==k:
        print(num,"是回位数")
    else:
        print(num,"不是回位数")
else:
    print("你输入的数有误")

24、对10个数进行排序

import random
num=list()
for i in range(10):
    num.append(random.randint(0,100))
print(num)
for i in range(len(num)-1):
    min=num[i]
    minIndex=i
    for j in range(i+1,len(num)):
        if min>num[j]:
            min=num[j]
            minIndex=j
    else:
        num[minIndex]=num[i]
        num[i]=min
print(num)

25、打印出杨辉三角形(要求打印出10行如下图)

程序分析:

         1

       1 1

     1 2 1

    1 3 3 1

  1 4 6 4 1

1 5 10 10 5 1

x=int(input("输入一个较小的正整数,实现杨辉三角\n"))
for n in range(x):
    for i in range(x-n-1):
        print("\t",end="")
    num=1
    print(f"{num}\t\t",end="")
    for m in range(1,n+1):
        num=num*n//m
        if num == 0:
            break
        print(f"{num}\t\t",end="")
        n-=1
        m+=1
    print()

26、求0—7所能组成的奇数个数。

total=0
for i in range(8):
    if i==0:
        total += 4
    else:
        total += 4*8**(i-1)*7#最高位不能为0
print("总数为:",total)

27、冒泡排序法

程序分析:01.外层循环N-1   (N:数的个数)
      02.内层循环N-1-i (i:比较的轮数,外层循环的变量)
      03.两两相比 小靠前!必须进行等量转换!互换位置!
import random
lt=list()
for i in range(10):
    lt.append(random.randint(1,100))
print(lt)
#冒泡排序
for i in range(len(lt)-1):
    flag=False
    for j in range(len(lt)-i-1):
        if lt[j]>lt[j+1]:
            tmp=lt[j]
            lt[j]=lt[j+1]
            lt[j+1]=tmp
            flag=True
    if not flag:
        break
print(lt)

28、百钱买百鸡,有 100 元钱,要去买 100 只鸡,公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元 3 只,问公,母,小鸡各买多少只 提示: a+b+c=100 只 5a+3b+1/3c=100 钱

for x in range(1,34):
    y=100-3*x
    z=2*x
    if y<=0:
        continue
    print(f"公鸡{x}只,母鸡{y}只,小鸡{z}只")

29、鸡兔同笼。鸡兔一共有 50 只,脚一共有 160 只,问鸡和兔各多少只?要求鸡兔至少一样 一只

ck = 0
while ck<=50:
    rb=50-ck
    if 4*rb+2*ck==160:
        print("兔子:",rb," 鸡:",ck)
    ck+=1

30、请输入一个正整数年份,判断是否是闰年?在此基础上,随机生成一个 int 型二维数组 (最大为 4 位数),计算其中闰年的个数,并输出该年份 //1~9999 输出闰年 //闰年的逻辑 400 的倍数一定是闰年,如不是 400 的倍数,是否是 100 的倍数,不是闰年, //如果不是 100 的倍数,是不是 4 的倍数

lst=[]
for y in range(1,9999):
    if y>=4:
        if y%4==0:
            if y>=100 and y%100==0 and y<400:
                pass
            elif y<100:
                print(y," ",end="")
            elif y>400 and y%400==0:
                print(y," ",end="")
            elif y>400 and y%400!=0 and y%100==0:
                pass
            else:
                print(y," ",end="")

31、随机生成一个 short 型一维数组,从控制台输入一个数值,遍历数组查找,如果找到了, 打印出该数在数组中的位置,如果没有查到,请将该数值插入并形成新的数组(要求降序) //1)随机生成数组 //2)遍历数组查找 //3)对数组排序(降序) //4)插入数组

import random
lt=list()
for i in range(10):
    lt.append(random.randint(0,100))
print(lt)
num=int(input("输入你要查找的数,如果未找到则倒序插入其中\n"))

flag=False
for i in range(len(lt)):
    if num == lt[i]:
        print("找到次数,下标为:",i)
        flag=True
if not flag:
    print("没有你输入的数,已帮你倒序插入其中")
lt.append(num)
for i in range(len(lt)-1):
    max = lt[i]
    maxIndex=i
    for j in range(i+1,len(lt)):
        if max<lt[j]:
            max=lt[j]
            maxIndex=j
    lt[maxIndex]=lt[i]
    lt[i]=max
print(lt)

32、数学黑洞 6174 已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个 过程,最多七步,必得 6174。即:7641-1467=6174。将永远出不来。求证:所有四位数数 字(全相同的除外),均能得到 6174。输出掉进黑洞

num=int(input("请输入一个四位的整数,个十百千位不能相等,个十百位不能同时等于0\n"))
times=0
if num<=1000 and num>9999:
    print("你输入的数不符合条件")
else:
    while num!=6174:
        a=num%10#个位
        b=num%100//10#十位
        c=num//100%10#百位
        d=num//1000#千位
        lt=list()
        lt.append(a)
        lt.append(b)
        lt.append(c)
        lt.append(d)
        #个十百千位不能相同
        if a==b and b==c and c==d or (a==b==c==0):
            print("你输入的代码不符合条件")
            break
        #如果abcd中有0,则另外讨论
        elif a==0 or b==0 or c==0 or d==0:
            t=0#记录0的个数
            lt.sort()
            #0012->1002,0123->1023
            for i in lt:
                if i == 0:
                    t+=1
            if t==1:
                temp=lt[0]
                lt[0]=lt[1]
                lt[1]=temp
            if t==2:
                temp=lt[0]
                lt[0]=lt[2]
                lt[2]=temp
            s1=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3]
            lt.sort(reverse=True)
            s2=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3]
            num=s2-s1
            times+=1
            print("第",times,"次相减,num=",num)
        else:
            #将个位十位百位千位放进数组中进行排序
            lt.sort()
            s1=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3]
            lt.sort(reverse=True)
            s2=lt[0]*1000+lt[1]*100+lt[2]*10+lt[3]
            num=s2-s1
            times+=1
            print("第",times,"次相减,num=",num)
    else:
        print("经过相减次数为:",times)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值