python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)


说明:本篇博文的知识点大部分来自 Python3 实例

斐波那契数列

下面代码实现了判断用户输入值,只有输入为大于等于1的正整数时,才会打印结果。
网上看到的是使用while的一种方式,我这里自己实现了一种使用for循环的方式。相比而言,代码更简洁一些。


try:
    num = int(input("斐波那契数列:需要打印几项的值?\n"))
    if num <= 0:
        print("请输入大于1的正整数")
    elif num == 1:
        print("斐波那契数列:", num - 1)
    else:
        print("斐波那契数列:")
        iVal1, iVal2 = 0, 1
        print(iVal1, ',', iVal2, end=' , ')
        for item in range(2, num):
            nSum = iVal1 + iVal2
            print(nSum, end=' , ')
            iVal1, iVal2 = iVal2, nSum
except ValueError:
    print("请输入大于1的正整数")

本段代码自己查看没什么问题,广大网友如果发现有什么问题,敬请留言。

运行结果:
在这里插入图片描述

阿姆斯特朗数

如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
例如33 + 73 + 03 = 370。
上代码:


try:
    str1 = input("请输入一个正整数:")
    len1 = len(str(str1))
    num = int(str1)
    rst = 0
    while num > 0:
        digit = num % 10
        rst += digit ** len1
        num //= 10

    if int(str1) == rst:
        print(str1, "是阿姆斯特朗数")
    else:
        print(str1, "不是阿姆斯特朗数")
except ValueError:
    print("请输入一个正整数")

这里提一下//和/的区别。//表示整数的除法,结果也是整数。/表示浮点数的除法,结果是浮点数。

代码中,我尽量对一些代码进行了简化,这也是python的特点之一,代码简洁。

运行结果:
在这里插入图片描述

十进制转二进制bin、八进制oct、十六进制hex

有现成的方法可以对类型进行转换,详见代码:


try:
    num = int(input("请输入一个整数:"))

    print("十进制数为:", num)
    print("转换为二进制为:", bin(num))
    print("转换为八进制为:", oct(num))
    print("转换为十六进制为:", hex(num))
except ValueError:
    print("请输入一个整数")

在这里插入图片描述
能直接转换出结果,简单快捷。

补充进制转换源码


def dec2bin(num1):
    len1 = []
    if num1 < 0:
        return '-' + dec2bin(abs(num1))
    while True:
        num1, remainder = divmod(num1, 2)
        len1.append(str(remainder))
        if num1 == 0:
            return ''.join(len1[::-1])


def dec2oct(num):
    len1 = []
    if num < 0:
        return '-' + dec2oct(abs(num))
    while True:
        num, remainder = divmod(num, 8)
        len1.append(str(remainder))
        if num == 0:
            return ''.join(len1[::-1])


base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]


def dec2hex(num):
    len1 = []
    if num < 0:
        return '-' + dec2hex(abs(num))
    while True:
        num,rem = divmod(num, 16)
        len1.append(base[rem])
        if num == 0:
            return ''.join(len1[::-1])


print('dec2bin(100) = ', dec2bin(100))
print('dec2oct(100) = ', dec2oct(100))
print('dec2hex(100) = ', dec2hex(100))

运行结果:
在这里插入图片描述

python中::和:的区别


lst1 = [1, 2, 3, 4, 5]
# lst1[::-1]相当于 lst1[-1:-len(lst1)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。
print(lst1[::-1])  
# lst1[:-1]相当于 lst1[-5:-1],也就是从最后一个元素到第一个元素。
print(lst1[:-1]) 
# lst1[:1]相当于 lst1[0:1],也就是从第一个元素到第二个元素。 
print(lst1[:1])  
# lst1[::1]相当于 lst1[1:len(lst1)-1:1],也就是从第一个元素到最后一个元素复制一遍,即顺序。
print(lst1[::1])  

在代码中已经有详细说明,这里总结一下

::-1表示逆序, ::1表示顺序。
:-1表示-len到-1,:1表示0到1

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值