python个人练习(20-29)
#20.判断某年某天
#输入
import datetime
def dijitian():
year, month, day = map(int, input("请依次输入(年 月 日):").split(" "))
yuandan = datetime.datetime(year, 1, 1)
now = datetime.datetime(year, month, day)
print(f"是{year}年的第{(now-yuandan).days + 1}天")
while True:
try:
dijitian()
except ValueError:
print("请按正确格式输入有效的数!")
#输出
# 请依次输入(年 月 日):123
# 请按正确格式输入有效的数!
# 请依次输入(年 月 日):,
# 请按正确格式输入有效的数!
# 请依次输入(年 月 日):2025 6 9
# 是2025年的第160天
# 请依次输入(年 月 日):2011 2 28
# 是2011年的第59天
# 请依次输入(年 月 日):2024 2 30
# 请按正确格式输入有效的数!
#21.斐波那契数列(递归,O(2^n))
#输入
import time
def feibo(n):
if n == 1 or n == 2:
return 1
else:
return feibo(n-2) + feibo(n-1)
while True:
try:
n = int(input("请输入一个正整数:"))
if n <= 0:
print("输入不是正整数,请重新输入!")
continue
start_time = time.time()
print(f"第{n}个斐波那契数是:{feibo(n)},", end="")
end_time = time.time()
print(f"计算用时{end_time-start_time:.5f}s")
except ValueError:
print("请输入有效的数!")
#输出
# 请输入一个正整数:0
# 输入不是正整数,请重新输入!
# 请输入一个正整数:1
# 第1个斐波那契数是:1,计算用时0.00002s
# 请输入一个正整数:10
# 第10个斐波那契数是:55,计算用时0.00004s
# 请输入一个正整数:30
# 第30个斐波那契数是:832040,计算用时0.05721s
# 请输入一个正整数:40
# 第40个斐波那契数是:102334155,计算用时6.80852s
# 请输入一个正整数:,
# 请输入有效的数!
#21.斐波那契数列(非递归)
#输入
import time
def feibo(n):
feibos = [1, 1]
for i in range(2, n+1):
feibos.append(feibos[i-1]+feibos[i-2])
return feibos[n-1]
while True:
try:
n = int(input("请输入一个正整数:"))
if n <= 0:
print("输入不是正整数,请重新输入!")
continue
start_time = time.time()
print(f"第{n}个斐波那契数是:{feibo(n)},", end="")
end_time = time.time()
print(f"计算用时{end_time-start_time:.5f}s")
except ValueError:
print("请输入有效的数!")
#输出
# 请输入一个正整数:0
# 输入不是正整数,请重新输入!
# 请输入一个正整数:1
# 第1个斐波那契数是:1,计算用时0.00003s
# 请输入一个正整数:2
# 第2个斐波那契数是:1,计算用时0.00003s
# 请输入一个正整数:33
# 第33个斐波那契数是:3524578,计算用时0.00004s
# 请输入一个正整数:40
# 第40个斐波那契数是:102334155,计算用时0.00003s
# 请输入一个正整数:,
# 请输入有效的数!
# 请输入一个正整数:-10
# 输入不是正整数,请重新输入!
#22.复制列表
#输入
import copy
List = [1, 2, 3, 4]
List1 = List
List2 = copy.copy(List)
List[0] = 30
print(List)
print(List1)
print(List2)
#输出
# [30, 2, 3, 4]
# [30, 2, 3, 4]
# [1, 2, 3, 4]
#23.暂停后输出
#输入
import time
start_time = time.time()
time.sleep(5)
end_time = time.time()
print(f"计算用时{end_time-start_time:.5f}s")
#输出
#计算用时5.00011s
#24.成绩if语句
#输入
while True:
try:
score = int(input("请输入成绩(百分制):"))
if score > 100 or score < 0:
print("成绩不在0-100范围内,请重新输入!")
continue
elif score >= 90:
print("A")
elif score >= 60:
print("B")
else:
print("C")
except ValueError:
print("请输入有效的数!")
#输出
# 请输入成绩(百分制):99
# A
# 请输入成绩(百分制):100
# A
# 请输入成绩(百分制):101
# 成绩不在0-100范围内,请重新输入!
# 请输入成绩(百分制):-1.2
# 请输入有效的数!
# 请输入成绩(百分制):87
# B
# 请输入成绩(百分制):43
# C
#25.统计字符
#输入
import string
import time
str1 = input("请输入一串字符串:")
start_time = time.time()
print(f"总长度为{len(str1)}")
alpha = num = space = symbol = 0
for i in str1:
if i.isalpha():
alpha += 1
elif i.isnumeric():
num += 1
elif i == " ":
space += 1
else:
symbol += 1
print(f"字母数量为{alpha}")
print(f"数字数量为{num}")
print(f"空格数量为{space}")
print(f"空格数量为{symbol}")
end_time = time.time()
print(f"程序用时{end_time-start_time:.5f}s")
#输出
# 请输入一串字符串:asd 3294 AFDA3ga ,.weie[]
# 总长度为25
# 字母数量为13
# 数字数量为5
# 空格数量为3
# 空格数量为4
# 程序用时0.00032s
#26.落体反弹问题
#输入
h = 100
List = []
n = 0
while n < 10:
if n == 0:
List.append(h)
h /= 2
n += 1
else:
List.append(h*2)
h /= 2
n += 1
print(List)
print(f"第{n}次落地反弹{List[n-1]/2}米")
print(f"在第{n}次落地时,共经过{sum(List)}米")
#输出
# [100, 100.0, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625]
# 第10次落地反弹0.1953125米
# 在第10次落地时,共经过299.609375米
#27.猴子吃桃问题
#输入
n = 1
List = []
for i in range(1, 11):
if i == 1:
List.append(n)
else:
n = (n+1)*2
List.append(n)
print(List)
print(f"第一天早上有{List[9]}个桃子")
#输出
# [1, 4, 10, 22, 46, 94, 190, 382, 766, 1534]
# 第一天早上有1534个桃子
#28求指定序列的和
#输入
sum = 0
up = 2
down = 1
List = []
for i in range(20):
List.append(up/down)
sum += up/down
a = up
up += down
down = a
print([f"{num:.3f}" for num in List])
print(sum)
#输出
# ['2.000', '1.500', '1.667', '1.600', '1.625', '1.615', '1.619', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618', '1.618']
# 32.66026079864164
#29.求各个阶乘的和
#输入
import math
total = 0
List = []
for i in range(1, 21):
List.append(math.factorial(i))
total += math.factorial(i)
print(len(List))
print(sum(List))
print(f"1-20的阶乘之和是{total}")
#输出
# 20
# 2561327494111820313
# 1-20的阶乘之和是2561327494111820313