python笔记10_练习题

这里使用了之前学习Java时,早期使用过的部分练习题,在这里直接使用python语言来做出来。

1.回文数

打印5位数中的所有回文数,每行打印10个数。最后统计一下一共有多少个5位回文数。

首先对一个数字的各个位进行拆分,方法有很多;

然后判断条件是否符合回文数;

由于需要每行打印10个,存在定期换行的操作,所以使用 flag 记录次数并进行操作,顺便用 cnt 做统计。

flag = 0
cnt = 0
for i in range(10000,100000):
    ge = i%10
    shi = (i%100-ge)/10
    bai = (i%1000-shi*10-ge)/100
    qian = round((i%10000-bai*100)/1000)
    wan = round((i%100000-qian*1000)/10000)
    if(ge==wan and shi==qian):
        flag+=1
        cnt+=1
        if(flag<=10):
            print(i,end=' ')
            if(flag==10):
                flag=0
                print()
print('共有{0}个五位回文数'.format(cnt))

答案:共有900个

2.判断一个数字是否为回文数

与上述拆分数字位数的方法相同。写成了一个函数。

def is_huiwen(num):
    ge = num%10
    shi = (num%100-ge)/10
    bai = (num%1000-shi*10-ge)/100
    qian = round((num%10000-bai*100)/1000)
    wan = round((num%100000-qian*1000)/10000)
    if(num>=100000):
        print('只能判断5位数及以下')
        return
    if(num>=10000 and num<=99999):
        if(ge==wan and shi==qian):
            print('{0}是回文数'.format(num))
            return
        else:
            print('{0}不是回文数'.format(num))
            return
    if(num>=1000 and num<=9999):
        if(ge==qian and shi==bai):
            print('{0}是回文数'.format(num))
            return
        else:
            print('{0}不是回文数'.format(num))
            return
    if(num>=100 and num<=999):
        if(ge==bai):
            print('{0}是回文数'.format(num))
            return
        else:
            print('{0}不是回文数'.format(num))
            return
    else:
        print('?')
        return

3.水仙花数

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

这类题的核心点就在于拆分数字各位数,所以类似的类型就不再做了。

cnt = 0
for i in range(100,1000):
    ge = i%10
    shi = (i%100-ge)/10
    bai = (i%1000-shi*10-ge)/100
    temp = ge**3 + shi**3 + bai**3
    if(temp==i):
        print(i,end=' ')
        cnt+=1
print()
print('共有{0}个3位水仙花数'.format(cnt))
# 153 370 371 407 
# 共有4个3位水仙花数

4.半人马之王

小时候看过的韩漫《幻想数学大战》里,代表数学中的“分数”的半人马怪物中,有个首领,它的血量是:1/2+1/4+1/8+1/16……设定里,只要能算出怪物血量就能打败怪物,但男主算不出来这个数,我们用python算一下。

(现在学会微积分了,能很简单地判断这个无穷项的数列之和收敛于1,但要知道,这个漫画是我小学二年级时看的,请不要笑话我)

def half_num(n):
    # 第一个数是1/2
    if(n==1):
        return 1/(n+1)
    # 后面是1/2^n
    if(n>1 and n%1==0):
        return 1/2**n + half_num(n-1)

这个方法的参数是指“前n项之和”,可以看到大概仅用50项左右,python的小数点位数就不够用了,项数再大就会直接返回1.0。

说明微积分知识没有骗我~

half_num(50) # 0.9999999999999991
half_num(60) # 1.0

5.冒泡排序

def maopao(list_in):
    list_out = []
    for i in range(len(list_in)):
        for j in range(len(list_in)-1-i):
            if(list_in[j]<list_in[j+1]):
                list_in[j],list_in[j+1]=list_in[j+1],list_in[j]
    return list_in

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Woovong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值