python实战练习题一

"""
第一题:求解水仙花数
水仙花数,也被称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是一个n位数(n≥3),其每个位上的数字的n次幂之和等于它本身。
例如,三位数153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。在三位数中,除了153,还有370、371和407也是水仙花数。
"""
print("100 ~ 1000 之间的所有水仙花为:", end=" ")
for i in range(100, 1000):
    sum = 0     # 定义一个变量,记录这个数各个位置上的数三次方的和
    num = i
    while num > 0:
        value = num % 10      # 先求解出个位,然后求解出十位,最后求解出百位
        sum = sum + value * value * value   # sum 依次相加各个位置上数的三次方和
        num = num // 10        # 求解出十位,百位
    if sum == i:
        print(i, end=" ")
print()

"""
第二题:求100以内的所有质数
所谓质数:除了本身和1,没有其他的约数
"""
print("100以内的所有质数为:")
for i in range(2, 100):
    j = 2                   # 初始化 j = 2
    while j < i:            # 从 2 ~ i - 1 之间,每一个数都需要判断是否能被 i 整除
        if i % j == 0:      # 如果 j 能被 i 整除时,就说明:j 是 i 的因数
            break           # 直接跳出就近的所属循环
        j = j + 1
    if i == j:      # 若 while 循环执行完毕,没有一个 j 能被 i 整除时,此时 i 一定等于 j 就说明 i 是质数
        print(i, end=" ")

"""
第三题:打印三角形:给定一个整数 n,在屏幕上输出一个直角三角形
例如:输入整数 5,输出:
*
**
***
****
*****
"""
n = int(input("(输出三角形)请输入一个整数:"))
for row in range(1, n + 1):         # 每一行进行处理
    for j in range(1, row + 1):     # 一行的所有 *
        print("*", end="")
    print() # 一行打印完之后,回车换行

"""
第四题:给一个整数,求出各个位上的和
例如:n = 12345 输出:1+2+3+4+5=15
以下是三种方式
"""
# 第一种求解方式
n = int(input("(求各个位置上的数之和)请输入一个整数:"))
sum_value = 0
while n > 0:
    sum_value = sum_value + n % 10
    n = n //10
print("这个数的各个位上的数之和:", sum_value)

# 第二种求解方式
n = int(input("(求各个位置上的数之和)请输入一个整数:"))
lst = []
while n > 0:
    lst.append(n % 10)
    n = n // 10
print("这个数的各个位上的和:", sum(lst))

# 第三种求解方式
n = input("(求各个位置上的数之和)请输入一个整数:")   # n 个字符串
sum_value = 0
for i in n:
    sum_value = sum_value + int(i)      # 字符串遍历,取出来每一个字符,然后强转为 int 类型
print("这个数的各个位上的和:", sum_value)

"""
第五题:输入一个整数 n 求出第 n 个整数的斐波拉切数列
斐波那契数列:1,1,2,3,5,8,13,21,34,55,89...,不难发现一个规律,实际上从第三个数开始,每个数字的值都是前两个数字的和;
例如:输入的整数为 5 输出:5
"""
n = int(input("(求解斐波拉切数列)请输入整数:"))
if n == 1 or n == 2:
    print(1)
else:
    value1, value2 = 1, 1   # 由于下一个数,需要前面两个数的累加和,所以需要定义两个变量存储前面两个变量的值
    for i in range(3, n + 1):
        result = value1 + value2
        value1 = value2
        value2 = result
    print("求解的斐波拉切数列的值为:", result)

"""
第六题:求解两个数的最大公约数和最小公倍数
备注:最小公倍数 = 两整数的乘积 ÷ 最大公约数
(1)辗转相除法
有两整数a和b:
① a % b 得余数 c
② 若 c = 0,则 b 即为两数的最大公约数
③ 若 c ≠ 0,则 a = b,b = c,再回去执行①
例如求 27 和 15 的最大公约数过程为:
27 % 15 = 12,15 % 12 = 3,12 % 3 = 0因此,3 为 最大公约数
"""
a= int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
if b > a:     # 如果输入的第二个整数 > 第一个整数,互换一下位置
    a, b = b, a
m = a       # 记录最大值 m = a
n = b       # 记录次大值 n = b
while b != 0:
    value = a % b       # 两个数求余
    a = b               # 次大值赋值给最大值
    b = value           # 余数赋值给次大值
print("两个数的最大公约数:", a)
print("两个数的最小公倍数:", (m * n) // a)

"""
第七题:数的逆序输出
例如:1234 输出:4321
思路:数进行拆分,然后依次反向进行 * 10 做累加
"""
n = int(input("(数的逆序输出)请输入一个整数:"))
reverse_value = 0
while n > 0:
    value = n % 10        # 数的位置进行拆分
    reverse_value = reverse_value * 10 + value    # 拆分完之后进行 * 10 做累加
    n = n // 10           # n 进行变化
print("逆序输出:", reverse_value)

"""
第八题:判断随机输入的年份是不是闰年??
符合条件之一是闰年:1. 能被4整除,但不能被100整除 2. 能被400整除!
"""
year = int(input("请输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print("{}是闰年!".format(year))
else:
    print("{}不是闰年!".format(year))

"""
第九题:求解四叶玫瑰数
四叶玫瑰数是 4 位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
(例如:当 n 为 3 时,有 1^3 + 5^3 + 3^3 = 153,153 即是 n 为 3 时的一个自幂数,3 位数的自幂数被称为水仙花数)。
"""
print("1000 ~ 10000 之间所有的四叶玫瑰数为:")
for i in range(1000, 10000):
    i1 = i // 1000          # 取千位数字 1234//1000=1
    i2 = i // 100 % 10      # 取百位数字 1234//100=12  12%10=2
    i3 = i // 10 % 10       # 取十位数字 1234//10=123  123%10=3
    i4 = i % 10             # 取个位数字 1234%10=4

    if i1 ** 4 + i2 ** 4 + i3 ** 4 + i4 ** 4 == i:
        print(i, end=" ")
print()

"""
第十题:逆序输出字符串
例如:abcdefg 输出:gfedcba
"""
# 求解方式一
str = input("请输入字符串:")
print(str[::-1])

# 求解方式二
s = input("请输入字符串:")
lst = []
for x in range(0, len(s)):
    lst.append(s[x])
print(''.join(lst))     # 使用列表的拼接方式,这里使用 空字符串



posted @ 2024-05-06 16:07  菜鸟的奋斗之路  阅读(7)  评论(0编辑  收藏  举报