【Python】第三次实验

1

def f(n):
    # 根据n的值分类讨论
    if n < 1:
        return n
    elif 1 <= n < 10:
        return 2*n-1
    else:
        return 3*n-11


print(f(5))

2

def is_palindrome(s):
    # i循环字符串s的一半
    for i in range(len(s)//2):
        # i与len(s) - i - 1对称,判断回文
        if s[i] != s[len(s) - i - 1]:
            return False
    return True


print(is_palindrome("abc"))
print(is_palindrome("abccba"))
print(is_palindrome("abcba"))
print(is_palindrome("雾锁山头山锁雾"))

3

def string_count(s: str, sub: str, start: int = 0, end: int = None) -> int:
    """
    返回给定字符串内包含的待搜索字符串的个数

    参数说明

    s: 给定字符串
    sub: 待搜索字符串
    start: 从哪里开始搜索,为字符串索引。如果不传入则为0
    end: 在哪里终止搜索,为字符串索引。如果不传入或者传入的数值超过给定字符串长度,则默认等于给定字符串长度

    返回值说明
    返回一个int型正整数
    """
    count = 0
    # find函数如果找不到则返回-1
    index = s.find(sub, start, end)

    while index != -1:
        count += 1
        # 使用find函数从index + len(sub)到end里查找sub
        index = s.find(sub, index + len(sub), end)

    return count


help(string_count)
print(string_count.__doc__)
print(string_count('aaaaaaa', 'aa'))
print(string_count('aaaaaaa', 'aa', 0, 2))
print(string_count('aaaaaaab', 'aab'))

4

def f(n):
    # 返回一个元组
    return max(n), min(n), len(n)


s1 = [9, 8, 7, 3, 2, 1, 55, 6]
s2 = ["apple", "pear", "melon", "kiwi"]
s3 = "TheQuickBrownFox"

x, y, z = f(s1)
print(f"最大值是{x}\n最小值是{y}\n元素个数是{z}")
print(f(s1))
x, y, z = f(s2)
print(f"最大值是{x}\n最小值是{y}\n元素个数是{z}")
print(f(s2))
x, y, z = f(s3)
print(f"最大值是{x}\n最小值是{y}\n元素个数是{z}")
print(f(s3))

5

def is_prime(x):
    # 传入的x小于等于一,不是素数
    if x <= 1:
        return False
    # x**5是为了减少循环次数
    for i in range(2, int(x**0.5) + 1):
        # 如果能被除尽则不是素数,返回False
        if x % i == 0:
            return False
    return True


m, n = map(int, input("请输入m和n:").split())
prime_sum = 0
for num in range(m, n + 1):
    if is_prime(num):
        prime_sum += num
print(f"{m}到{n}之间所有素数的和为:{prime_sum}")

6

def sum_int(*args):
    total = 0
    for arg in args:
        # isinstance用于检查参数是否为整数
        if isinstance(arg, int):
            total += arg
    return total


result = sum_int(5, 10, 20, "23", "abc", 30)
print(result)

7

def akeman(m, n):
    # 根据m和n的值判断,依照akeman函数的规则进行递归
    if m == 0:
        return n+1
    elif m > 0 and n == 0:
        return akeman(m-1, 1)
    elif m > 0 and n > 0:
        return akeman(m-1, akeman(m, n-1))


print(akeman(2, 3))

8

persons = [{"name": "SmallBamboo, "age": 19},
           {"name": "SmallBambop", "age": 18},
           {"name": "SSmallBamboo", "age": 17},
           {"name": "SmallBambooo", "age": 16}]

# key=lambda x: (x["name"], -x["age"])是自定义排序规则
# 其中lambda匿名函数,"name"升序排序,并且如果"name"键的值相同时,根据"age"降序排序
sorted_persons = sorted(persons, key=lambda x: (x["name"], -x["age"]))

print(sorted_persons)

9

# time_formatter.py
from datetime import datetime  # 导入 datetime 模块


def format_time_difference(show_time_str, current_time_str):
    # 将传入的时间字符串转换为 datetime 对象
    show_time = datetime.strptime(show_time_str, "%Y-%m-%d %H:%M:%S")
    current_time = datetime.strptime(current_time_str, "%Y-%m-%d %H:%M:%S")

    # 计算时间差
    time_diff = current_time - show_time

    # 如果显示时间在当前时间之后,返回"未来时间"
    if current_time < show_time:
        return "未来时间"

    # 如果时间差大于一年,返回年月格式的字符串
    elif time_diff.days > 365:
        return "{:%Y年%#m月}".format(show_time)

    # 如果时间差大于一个月,返回年月日格式的字符串
    elif time_diff.days > 30:
        return "{:%Y年%#m月%#d日}".format(show_time)

    # 如果时间差大于一天,返回几天前
    elif time_diff.days > 1:
        return f"{time_diff.days}天前"

    # 如果时间差大于一小时,返回几小时前
    elif time_diff.seconds > 3600:
        return f"{time_diff.seconds // 3600}小时前"

    # 如果时间差大于一分钟,返回几分钟前
    elif time_diff.seconds > 60:
        return f"{time_diff.seconds // 60}分钟前"

    # 否则返回几秒前
    else:
        return f"{time_diff.seconds}秒前"
from time_formatter import format_time_difference

print(f"2018-03-01 09:00:00->2020-02-29 09:30:30: "
      f"{format_time_difference('2018-03-01 09:00:00', '2020-02-29 09:30:30')}")
print(f"2020-01-01 09:00:00->2020-02-29 09:30:30: "
      f"{format_time_difference('2020-01-01 09:00:00', '2020-02-29 09:30:30')}")
print(f"2020-02-01 09:00:00->2020-02-29 09:30:30: "
      f"{format_time_difference('2020-02-01 09:00:00', '2020-02-29 09:30:30')}")
print(f"2020-02-29 08:00:00->2020-02-29 09:30:30: "
      f"{format_time_difference('2020-02-29 08:00:00', '2020-02-29 09:30:30')}")
print(f"2020-02-29 09:29:20->2020-02-29 09:30:30: "
      f"{format_time_difference('2020-02-29 09:29:20', '2020-02-29 09:30:30')}")
print(f"2020-02-29 09:29:50->2020-02-29 09:30:30: "
      f"{format_time_difference('2020-02-29 09:29:50', '2020-02-29 09:30:30')}")
print(f"2020-02-29 09:30:40->2020-02-29 09:30:30: "
      f"{format_time_difference('2020-02-29 09:30:40', '2020-02-29 09:30:30')}")

10

import numpy as np

# 使用np.array创建numpy数组
a1 = np.array([1, 2, 3])
b1 = np.array([14, 5, 6])
a2 = np.array([[1, 2], [3, 4]])
b2 = np.array([[5, 6], [7, 8]])

# 使用np.dot进行按位置相乘
print(np.dot(a1, b1))
print(np.dot(a2, b2))

实验总结

在本次实验中我学到了一些新东西,例如在实验3中,可以使用 函数名.__doc__查看函数的说明,也可以用 help(函数名)查看。

在实验9中我对datetime模块不是很了解,一开始不知道怎么处理时间的计算,在实验中主要用到了datetime.datetime,对于datetime模块还可以使用datetime.timedelta进行日期的计算(加减),在实验中只简单的使用datetime的加减进行判断,输出 timedelta类的days,seconds属性可以查看时间差(时间差为timedelta类)的天数和秒数。

在实验10中我学会了使用conda命令安装numpy,之前一直都是用pip install安装的,现在可以先用conda切换到目前的环境:conda activate pystu36,然后使用conda install numpy安装numpy

© 版权声明
THE END
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容