python个人练习(10-19)

13

#10.找出区间内的素数

#输入

import math


def find_prime(a, b):
    num = []
    for i in range(a, (b+1)):
        is_prime = True
        for j in range(2, int(math.sqrt(i)+1)):
            if i % j == 0:
                is_prime = False
                break
        if is_prime:
            num.append(i)
    return num


while True:
    try:
        a = int(input("请输入大于1的左端点整数:"))
        b = int(input("请输入大于1的右端点整数:"))
        if a < 2 or b < 2:
            print("请输入大于1的整数!")
            continue
        elif b < a:
            print("右端点必须大于等于左端点!")
            continue
        List_prime = find_prime(a, b)
        print(f"[{a},{b}]中的素数有:{List_prime}")
    except ValueError:
        print("请输入正确的数!")

#输出

# 请输入大于1的左端点整数:5
# 请输入大于1的右端点整数:79
# [5,79]中的素数有:[5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79]
# 请输入大于1的左端点整数:-23
# 请输入大于1的右端点整数:99
# 请输入大于1的整数!
# 请输入大于1的左端点整数:-1.2
# 请输入正确的数!
# 请输入大于1的左端点整数:34
# 请输入大于1的右端点整数:23
# 右端点必须大于等于左端点!
# 请输入大于1的左端点整数:33
# 请输入大于1的右端点整数:33
# [33,33]中的素数有:[]
# 请输入大于1的左端点整数:23
# 请输入大于1的右端点整数:67
# [23,67]中的素数有:[23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67]

#11.组合数字

#输入

def comb_num():
    for i in range(1, 5):
        print()
        for j in range(1, 5):
            for k in range(1, 5):
                if (i != j) and (i != k) and (j != k):
                    print(f"{i}{j}{k}", end=" ")

#输出

# 123 124 132 134 142 143 
# 213 214 231 234 241 243 
# 312 314 321 324 341 342 
# 412 413 421 423 431 432

#12.打印乘法口诀表

#输入

def chengfa():
    for i in range(1, 10):
        print()
        for j in range(1, (i+1)):
            print(f"\t{i}*{j}={i*j}", end=" ")


chengfa()

#输出

        # 1*1=1 
        # 2*1=2   2*2=4
        # 3*1=3   3*2=6   3*3=9
        # 4*1=4   4*2=8   4*3=12  4*4=16
        # 5*1=5   5*2=10  5*3=15  5*4=20  5*5=25
        # 6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
        # 7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
        # 8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
        # 9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81

#13.水仙花数

#输入

def find_narcissus():
    num = []
    for i in range(100, 1000):
        ge = (i % 100) % 10
        shi = (i % 100) // 10
        bai = i // 100
        if (ge**3+shi**3+bai**3 == i):
            num.append(i)
    print(f"三位数的水仙花数有:{num}")


find_narcissus()

#输出

# 三位数的水仙花数有:[153, 370, 371, 407]

#14.反向输出四位数

#输入

def reverse_num(num):
    num = str(num)
    num = int(num[::-1])
    return num


while True:
    try:
        num = int(input("请输入一个四位数正整数:"))
        if num < 1000 or num > 9999:
            print("请输入有效范围内的正整数!")
            continue
        print(f"反向四位数为:{reverse_num(num)}")
    except ValueError:
        print("请输入有效的数!")

#输出

# 请输入一个四位数正整数:1359
# 反向四位数为:9531
# 请输入一个四位数正整数:6731
# 反向四位数为:1376
# 请输入一个四位数正整数:ad
# 请输入有效的数!
# 请输入一个四位数正整数:832
# 请输入有效范围内的正整数!
# 请输入一个四位数正整数:-32
# 请输入有效范围内的正整数!
# 请输入一个四位数正整数:-1.4
# 请输入有效的数!

#15.判断字母

#输入

while True:
    a = input("请输入一串字符串:")
    result = a.isalpha()
    if result:
        print(f"{a}是字母")
    else:
        print(f"{a}不是字母")

#输出

# 请输入一串字符串:213
# 213不是字母
# 请输入一串字符串:d445
# d445不是字母
# 请输入一串字符串:gteg
# gteg是字母
# 请输入一串字符串:gf,
# gf,不是字母

#16.判断三角形

#输入

def check_triangle():
    a = int(input("请输入第一条边:"))
    b = int(input("请输入第一条边:"))
    c = int(input("请输入第一条边:"))
    if a <= 0 or b <= 0 or c <= 0:
        print("边长必须大于0,请重新输入!")
    elif (a+b) > c and (a+c) > b and (b+c) > a:
        print("可以构成三角形")
    else:
        print("不能构成三角形")


while True:
    try:
        check_triangle()
    except ValueError:
        print("请输入有效的数")

#输出

# 请输入第一条边:2
# 请输入第一条边:3
# 请输入第一条边:4
# 可以构成三角形
# 请输入第一条边:a
# 请输入有效的数
# 请输入第一条边:45
# 请输入第一条边:46
# 请输入第一条边:700
# 不能构成三角形
# 请输入第一条边:-2
# 请输入第一条边:645
# 请输入第一条边:-854
# 边长必须大于0,请重新输入!

#17.完数(解法一)

#输入

import math
import time


def find_wanshu():
    num = []
    for i in range(2, 10000):
        sum = 1
        for j in range(2, (int(math.sqrt(i))+1)):
            if i % j == 0:
                if (i % j != i // i):
                    sum = sum + j + i//j
                else:
                    sum += j
        if sum == i:
            num.append(i)
    print(num)


start_time = time.time()
find_wanshu()
end_time = time.time()
print(f"运行时间为{end_time-start_time:.5f}s")

#输出

# [6, 28, 496, 8128]
# 运行时间为0.02129s

#17.完数(解法二)

#输入

import time


def find_wanshu():
    num = []
    for i in range(2, 10000):
        sum = 1
        for j in range(2, i):
            if i % j == 0:
                sum += j
        if sum == i:
            num.append(i)
    print(num)


start_time = time.time()
find_wanshu()
end_time = time.time()
print(f"运行时间为{end_time-start_time:.5f}s")

#输出

# [6, 28, 496, 8128]
# 运行时间为1.55196s

#18.找质数因子

#输入

def find_yinzi(a):
    y = 2
    num = []
    while a != y:
        if a % y == 0:
            num.append(y)
            a = a // y
        else:
            y += 1
    num.append(y)
    print(f"质数因子有:{num}")


while True:
    try:
        a = int(input("请输入一个大于1的整数:"))
        if a <= 1:
            print("请输入大于1的整数!")
            continue
        find_yinzi(a)
    except ValueError:
        print("请输入有效的数!")

#输出

# 请输入一个大于1的整数:1
# 请输入大于1的整数!
# 请输入一个大于1的整数:-1.6
# 请输入有效的数!
# 请输入一个大于1的整数:76
# 质数因子有:[2, 2, 19]
# 请输入一个大于1的整数:43
# 质数因子有:[43]
# 请输入一个大于1的整数:65
# 质数因子有:[5, 13]
# 请输入一个大于1的整数:7654
# 质数因子有:[2, 43, 89]
# 请输入一个大于1的整数:64
# 质数因子有:[2, 2, 2, 2, 2, 2]

#19.海伦公式求三角形面积

#输入

import math


def tri_area(a, b, c):
    p = (a+b+c)/2
    area = math.sqrt(p*(p-a)*(p-b)*(p-c))
    print(f"边长为{a},{b},{c}的三角形面积为{area:.4f}")


while True:
    try:
        a = float(input("请输入第一条边长:"))
        b = float(input("请输入第二条边长:"))
        c = float(input("请输入第三条边长:"))
        if (a <= 0 or b <= 0 or c <= 0):
            print("输入边长必须大于0")
            continue
        elif ((a+b) > c and (a+c) > b and (b+c) > a):
            tri_area(a, b, c)
        else:
            print("输入边长不能构成三角形!")
    except ValueError:
        print("请输入有效的数!")

#输出

# 请输入第一条边长:5
# 请输入第二条边长:5
# 请输入第三条边长:5
# 边长为5.0,5.0,5.0的三角形面积为10.8253
# 请输入第一条边长:-1
# 请输入第二条边长:2
# 请输入第三条边长:6
# 输入边长必须大于0
# 请输入第一条边长:1
# 请输入第二条边长:2
# 请输入第三条边长:6
# 输入边长不能构成三角形!
# 请输入第一条边长:,
# 请输入有效的数!