本文将详细解析五个Python编程题目,涵盖日期时间处理、素数判断、完数查找、数字处理和组合数学等多个方面。

题目1:日期时间格式化

任务要求:定义一个DateTime变量,用来存放当前的系统时间,同时,将它格式化为字符串,格式为:年-月-日 小时:分钟:秒。

代码实现

# 1、定义一个DateTime变量,用来存放当前的系统时间,同时,将它格式化为字符串,格式为:年-月-日 小时:分钟:秒。
import datetime
now = datetime.datetime.now()
print(now)
now_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(now_str)

运行结果

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内的所有回文素数。

代码实现

# 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以内的所有完数。

代码实现

# 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位的正整数,判断其为几位数并将其逆序输出。

代码实现

# 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则符合。

代码实现

# 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}")

运行结果

1234组成的不重复三位数:
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,与程序结果一致
  • 算法实现:使用三重循环生成所有可能组合,通过条件判断排除重复数字
  • 输出优化:既显示每个具体数字,也统计总数,便于验证

总结

通过这五个题目的实践,我们掌握了:

  1. 日期时间处理:datetime模块的基本使用和格式化输出
  2. 数学算法设计:素数判断、回文检测、因子查找的优化方法
  3. 字符串操作:逆序输出、输入验证等实用技巧
  4. 组合数学:排列问题的编程实现和数学验证
  5. 用户体验:输入验证、错误处理和清晰的结果展示

这些题目涵盖了编程中常见的基础算法和数学问题,展现了Python在解决此类问题时的简洁性和高效性。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]