本文将详细解析五个Python编程题目,涵盖日期时间处理、素数判断、完数查找、数字处理和组合数学等多个方面。
题目1:日期时间格式化
任务要求:定义一个DateTime变量,用来存放当前的系统时间,同时,将它格式化为字符串,格式为:年-月-日 小时:分钟:秒。
代码实现
python
# 1、定义一个DateTime变量,用来存放当前的系统时间,同时,将它格式化为字符串,格式为:年-月-日 小时:分钟:秒。
import datetime
now = datetime.datetime.now()
print(now)
now_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(now_str)
运行结果
yaml
2024-07-21 15:30:45.123456
2024-07-21 15:30:45
分析
- datetime模块:Python标准库中处理日期时间的核心模块
- now()函数:获取当前系统的完整日期时间信息,包括微秒
- strftime方法:将datetime对象格式化为指定格式的字符串
- 格式化代码 :
%Y:四位数的年份%m:两位数的月份%d:两位数的日期%H:24小时制的小时%M:分钟%S:秒
题目2:回文素数求解
任务要求:只能由1和它本身整除的整数被称为素数;若一个素数从左向右读与从右向左读是相同的数,则该素数为回文素数。编程求解2~1000内的所有回文素数。
代码实现
python
# 2、只能由1和它本身整除的整数被称为素数;若一个素数从左向右读与从右向左读是是相同的数,则该素数为回文素数。编程求解2~1000内的所有回文素数。
'''
def is_prime(n):
if n < 2:
return False
for i in range(2,int(n**0.5) + 1):
if n % i == 0:
return False
return True
def is_palindrome(n):
return str(n) == str(n)[::-1]
for num in range(2,1001):
if is_prime(num) and is_palindrome(num):
print(num)
'''
运行结果
2
3
5
7
11
101
131
151
181
191
313
353
373
383
727
757
787
797
919
929
分析
- 素数判断优化 :只需检查到
√n,大大减少循环次数 - 回文判断技巧 :使用字符串切片
[::-1]快速反转字符串 - 算法组合 :将两个独立判断条件用
and连接,找出同时满足条件的数 - 数学特性:回文素数在数论中具有特殊意义,分布相对稀疏
题目3:完数查找
任务要求:若一个数刚好等于它的因子之和,那么这个数就称为"完数",例如6=1+2+3,6就是完数。编程打印1000以内的所有完数。
代码实现
python
# 3、若一个数刚好等于它的因子之和,那么这个数就称为"完数",例如6=1+2+3,6就是完数。编程打印1000以内的所有完数。
'''
for num in range(1,1001):
factors = []
for i in range(1,num):
if num % i == 0:
factors.append(i)
if sum(factors) == num:
print(num)
'''
运行结果
6
28
496
分析
- 完数定义:真因子(不包括自身)之和等于自身的数
- 因子查找:遍历1到n-1的所有数,检查是否能整除
- 效率问题:当前算法时间复杂度为O(n²),对于大数效率较低
- 数学背景:完数与梅森素数有关,目前发现的完数都是偶数
题目4:数字位数判断与逆序输出
任务要求:从键盘输入一个不多于5位的正整数,判断其为几位数并将其逆序输出。
代码实现
python
# 4、从键盘输入一个不多于5位的正整数,判断其为几位数并将其逆序输出。
num_input = input("请输入一个不多于5位的正整数:")
# 输入验证
if not num_input.isdigit():
print("输入错误:请输入数字!")
elif len(num_input) > 5:
print("输入错误:数字不能超过5位!")
else:
num = int(num_input)
print(f"这是{len(num_input)}位数")
print(f"逆序输出:{num_input[::-1]}")
运行结果
请输入一个不多于5位的正整数:12345
这是5位数
逆序输出:54321
请输入一个不多于5位的正整数:12
这是2位数
逆序输出:21
分析
- 输入验证 :使用
isdigit()确保输入为数字,检查长度不超过5位 - 字符串操作 :利用Python字符串的切片特性
[::-1]轻松实现逆序 - 用户体验:提供清晰的错误提示和结果展示
- 类型转换:在需要数值计算时可转换为int,字符串操作时保持str类型
题目5:数字组合计数
任务要求:有4个数字:1、2、3、4,其能组成多少组三位数?要求各数位间数字不能相同,比如112不符合要求,123则符合。
代码实现
python
# 5、有4个数字:1、2、3、4,其能组成多少组三位数?要求各数位间数字不能相同,比如112不符合要求,123则符合。
print("由1、2、3、4组成的不重复三位数:")
count = 0
results = []
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k:
number = i * 100 + j * 10 + k
count += 1
results.append(number)
print(number, end=" ")
print(f"\n总共能组成{count}个不重复的三位数")
print(f"所有组合:{results}")
运行结果
css
由1、2、3、4组成的不重复三位数:
123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432
总共能组成24个不重复的三位数
所有组合:[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
分析
- 排列组合:这是典型的排列问题,从4个不同元素中取3个进行排列
- 数学公式:P(4,3) = 4 × 3 × 2 = 24,与程序结果一致
- 算法实现:使用三重循环生成所有可能组合,通过条件判断排除重复数字
- 输出优化:既显示每个具体数字,也统计总数,便于验证
总结
通过这五个题目的实践,我们掌握了:
- 日期时间处理:datetime模块的基本使用和格式化输出
- 数学算法设计:素数判断、回文检测、因子查找的优化方法
- 字符串操作:逆序输出、输入验证等实用技巧
- 组合数学:排列问题的编程实现和数学验证
- 用户体验:输入验证、错误处理和清晰的结果展示
这些题目涵盖了编程中常见的基础算法和数学问题,展现了Python在解决此类问题时的简洁性和高效性。