python个人练习(10-19)
#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
# 输入边长不能构成三角形!
# 请输入第一条边长:,
# 请输入有效的数!