当前位置: 首页 > article >正文

蓝桥杯python语言基础(4)——基础数据结构(下)

目录

三、字典

例题4-3:统计字符

例题4-4:统计字母

作业

四、集合

 例题4-5:去重

 作业

五、日期和时间

(一)time

获取当前时间戳

将时间戳转换为结构化时间

格式化时间输出

(二)datetime

获取当前日期和时间

提取日期和时间的各个部分

创建指定日期和时间的对象

计算时间差

格式化日期和时间输出

例题4-5:星期一

例题4-6:顺子日期

作业


三、字典

字典(Dictionary)是一种无序的数据集合,它用于存储键值对。字典是可变的。

1. 创建字典

可以使用花括号 {} 或 dict() 函数来创建字典。

2. 访问字典元素

通过键(key)来访问字典中的值(value)。如果键不存在,会引发 KeyError 异常。

3. 修改和添加元素

可以通过键来修改或添加字典中的元素。

4. 删除元素

使用 del 语句或 pop() 方法删除字典中的元素。

5. 字典的常用方法

  • keys():返回字典中所有的键。

  • values():返回字典中所有的值。

  • items():返回字典中所有的键值对,以元组形式呈现。

6. 字典的嵌套

字典可以嵌套,即字典的值可以是另一个字典。

7. 字典推导式

使用字典推导式可以快速创建字典。

# 普通方式创建字典    
squares = {}    
for i in range(1, 6):
    squares[i] = i ** 2
print(squares)  # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}


# 使用字典推导式创建字典
squares = {i: i ** 2 for i in range(1, 6)}
print(squares)  # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

例题4-3:统计字符

输入一行文本,统计每个字符出现的次数


text = input("请输入一行文本:")
char_count = {}
for char in text:
    if char in char_count:
        char_count[char] += 1
    else:
        char_count[char] = 1
print(char_count)
text = input("请输入一行文本:")   
char_count = {}   
for char in text:
    char_count[char] = char_count.get(char, 0) + 1   
print(char_count)

例题4-4:统计字母

输入一个字符串s,遍历字符串统计每个字母出现次数。


                      

s = input("请输入一个字符串:")   
char_count = {}   
for char in s:
    if char.isalpha():
        char_count[char] = char_count.get(char, 0) + 1
   
print(char_count)

作业

开放式编程:输入一篇短文,统计每个单词出现次数。

注意:句子首字母会大写,但是统计时需要一起统计


def count_words(text):
    text = text.lower()
    words = text.split()
    word_count = {} 
    for word in words:
        if word in word_count:
            word_count[word] += 1
        else:
            word_count[word] = 1            
    return word_count

# 示例短文
short_text = "Hello World! This is a test. Hello again, world."
result = count_words(short_text)
print(result)

四、集合

集合(set)是一种无序且唯一的数据结构。具有以下特点:

  • 无序性:集合中的元素没有固定的顺序,这意味着不能通过索引来访问集合中的元素。

  • 唯一性:集合中的元素是唯一的,即集合中不会出现重复的元素。

创建集合

可以使用花括号 {} 或 set() 函数来创建集合。

集合操作

  1. 添加元素:使用 add() 方法可以向集合中添加一个元素。

  2. 删除元素

    1. remove() 方法用于删除集合中的指定元素,如果元素不存在会引发 KeyError

    2. discard() 方法也用于删除元素,但如果元素不存在不会引发错误。

    3. pop() 方法用于随机删除并返回集合中的一个元素。由于集合是无序的,无法确定具体会删除哪个元素。

集合运算:

  • 并集:使用 union() 方法或 | 运算符可以获取两个集合的并集。

  • 交集:使用 intersection() 方法或 & 运算符可以获取两个集合的交集。

  • 差集:使用 difference() 方法或 - 运算符可以获取两个集合的差集。

  • 对称差集:使用 symmetric_difference() 方法或 ^ 运算符可以获取两个集合的对称差集,即包含在其中一个集合中,但不同时包含在两个集合中的元素。

集合的遍历

可以使用 for 循环遍历集合中的元素。

 例题4-5:去重

输入若干个数字,将所有数字去重后输出数字个数


a = list(map(int, input().split()))
s = set(a)
print(len(s))

 作业

编程问题:维护一个数据结构管理表格,初始一个n行m列的表格,元素均为空,需要完成若干次操作:

  • set x y value: 将表格第x行第y列设置为value
  • find x y: 查询第x行第y列对应的值
  • del x y:删除第x行第y列的值
  • Many value:查找value是否在表格中,如果在表格中则出现次数为多少

五、日期和时间

(一)time

获取当前时间戳

时间戳是从1970年1月1日00:00:00 UTC到当前时间的秒数。

import time
   
timestamp = time.time()   
print(timestamp)
将时间戳转换为结构化时间
import time
   
timestamp = time.time()   
struct_time = time.localtime(timestamp)   
print(struct_time)   
格式化时间输出
import time
   
struct_time = time.localtime()   
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
print(formatted_time)

(二)datetime

获取当前日期和时间
from datetime import datetime

now = datetime.now()   
print(now)   
提取日期和时间的各个部分
from datetime import datetime
   
now = datetime.now()   
year = now.year   
month = now.month   
day = now.day   
hour = now.hour   
minute = now.minute   
second = now.second
   
print(year, month, day, hour, minute, second)   
创建指定日期和时间的对象
from datetime import datetime
   
dt = datetime(2023, 10, 1, 12, 30, 0)   
print(dt)   
计算时间差
from datetime import datetime, timedelta
   
start = datetime(2023, 10, 1, 12, 0, 0)   
end = datetime(2023, 10, 2, 14, 30, 0)
   
delta = end - start   
print(delta)   
print(delta.days)   
print(delta.seconds)   
格式化日期和时间输出
from datetime import datetime

now = datetime.now()
formatted = now.strftime("%Y-%m-%d %H:%M:%S")   
print(formatted)   

例题4-5:星期一

计算从1901年1月1日到2000年12月31日存在多少个星期1。

  • 利用date数据类型的weekday方法判断是否为周一

  • 利用timedelta不断增加1天


from datetime import date, timedelta
   
start_date = date(1901, 1, 1)   
end_date = date(2000, 12, 31)
   
current_date = start_date   
monday_count = 0
   
while current_date <= end_date:
    if current_date.weekday() == 0:  # weekday() 返回 0 表示星期一
        monday_count += 1
    current_date += timedelta(days=1)
   
print(monday_count)

例题4-6:顺子日期

小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等。

顺子日期指的是在日期的yyymmdd表示法中,存在任意连续的三位数是一个顺子的日期。

例如20220123就是一个顺子日期,因为它出现了一个顺子:123;

本题顺子的定义:i j k是一个顺子,满足 i+1=j、j+1=k、i ≥≥ 0。

而20221023则不是一个顺子日期,它一个顺子也没有。

小明想知道在整个2022年份中,一共有多少个顺子日期。


import datetime
start = datetime.date(2022,1,1)
end = datetime.date(2022,12,31)
m=['012','123','234','345','456','567','678','789']
ans = 0
while start <= end:
    now_date = start.strftime("%Y%m%d")
    for x in m:
        if x in now_date:
            ans += 1
            break
    start += datetime.timedelta(days=1)
print(ans)

作业

实现时间计算器,考虑年月日:

  • 计算两个日期之间差多少天

  • 推算几天后的日期

  • 倒计时计算

  • 增加时分秒的计算


import datetime


def get_date_input(prompt):
    while True:
        try:
            date_str = input(prompt)
            return datetime.datetime.strptime(date_str, '%Y-%m-%d')
        except ValueError:
            print("日期格式不正确,请使用 YYYY-MM-DD 格式输入。")


def get_time_input(prompt):
    while True:
        try:
            time_str = input(prompt)
            return datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
        except ValueError:
            print("时间格式不正确,请使用 YYYY-MM-DD HH:MM:SS 格式输入。")


def days_between_dates():
    date1 = get_date_input("请输入第一个日期 (YYYY-MM-DD): ")
    date2 = get_date_input("请输入第二个日期 (YYYY-MM-DD): ")
    diff = abs(date2 - date1)
    print(f"两个日期之间相差 {diff.days} 天。")


def days_after_date():
    date = get_date_input("请输入起始日期 (YYYY-MM-DD): ")
    while True:
        try:
            days = int(input("请输入天数: "))
            break
        except ValueError:
            print("请输入一个有效的整数。")
    new_date = date + datetime.timedelta(days=days)
    print(f"{days} 天后的日期是 {new_date.strftime('%Y-%m-%d')}。")


def countdown_to_date():
    target_date = get_date_input("请输入目标日期 (YYYY-MM-DD): ")
    now = datetime.datetime.now()
    diff = target_date - now
    if diff.days < 0:
        print("倒计时已结束")
    else:
        days = diff.days
        hours, remainder = divmod(diff.seconds, 3600)
        minutes, seconds = divmod(remainder, 60)
        print(f"距离目标日期还有 {days} 天 {hours} 小时 {minutes} 分钟 {seconds} 秒")


def time_difference():
    time1 = get_time_input("请输入第一个时间 (YYYY-MM-DD HH:MM:SS): ")
    time2 = get_time_input("请输入第二个时间 (YYYY-MM-DD HH:MM:SS): ")
    diff = abs(time2 - time1)
    days = diff.days
    hours, remainder = divmod(diff.seconds, 3600)
    minutes, seconds = divmod(remainder, 60)
    print(f"两个时间之间相差 {days} 天 {hours} 小时 {minutes} 分钟 {seconds} 秒。")


def time_after():
    time = get_time_input("请输入起始时间 (YYYY-MM-DD HH:MM:SS): ")
    while True:
        try:
            seconds = int(input("请输入秒数: "))
            break
        except ValueError:
            print("请输入一个有效的整数。")
    new_time = time + datetime.timedelta(seconds=seconds)
    print(f"{seconds} 秒后的时间是 {new_time.strftime('%Y-%m-%d %H:%M:%S')}。")


def main():
    while True:
        print("\n时间计算器选项:")
        print("1. 计算两个日期之间相差的天数")
        print("2. 计算几天后的日期")
        print("3. 计算到目标日期的倒计时")
        print("4. 计算两个时间之间的差值")
        print("5. 计算几秒后的时间")
        print("6. 退出")
        choice = input("请选择一个选项 (1-6): ")
        if choice == '1':
            days_between_dates()
        elif choice == '2':
            days_after_date()
        elif choice == '3':
            countdown_to_date()
        elif choice == '4':
            time_difference()
        elif choice == '5':
            time_after()
        elif choice == '6':
            break
        else:
            print("无效的选择,请重新输入。")


if __name__ == "__main__":
    main()

利用Python做一个动态的时间显示器或者倒计时显示器


import time


def countdown(target_time):
    target_seconds = int(target_time)
    while target_seconds > 0:
        mins, secs = divmod(target_seconds, 60)
        timeformat = '{:02d}:{:02d}'.format(mins, secs)
        print(f"倒计时剩余: {timeformat} 秒")
        time.sleep(1)
        target_seconds -= 1
    print("倒计时结束!")


if __name__ == "__main__":
    try:
        input_time = input("请输入倒计时的总秒数: ")
        countdown(input_time)
    except ValueError:
        print("请输入一个有效的整数。")
import time
import sys

def dynamic_time_display():
    while True:
        current_time = time.strftime("%H:%M:%S")
        sys.stdout.write(f"\r当前时间是: {current_time}")
        sys.stdout.flush()
        time.sleep(1)

if __name__ == "__main__":
    dynamic_time_display()


http://www.kler.cn/a/525006.html

相关文章:

  • 洛谷P11464 支配剧场
  • 深度学习框架应用开发:基于 TensorFlow 的函数求导分析
  • SpringSecurity:There is no PasswordEncoder mapped for the id “null“
  • Kotlin 委托详解
  • 新项目传到git步骤
  • 【Redis】 String 类型的介绍和常用命令
  • 大模型应用的10个架构挑战
  • 嵌入式知识点总结 Linux驱动 (二)-uboot bootloader
  • SQLServer 不允许保存更改(主键)
  • 如何写一篇高质量的提示词?
  • AI驱动内容跨媒体转换新机遇
  • 护眼好帮手:Windows显示器调节工具
  • AI时代,大厂要被重新定义
  • spring mvc 创建restapi 笔记
  • 第4章 基于中点电流的NPC逆变器中点电压平衡策略
  • 搜索引擎友好:设计快速收录的网站架构
  • (非技术)从一公里到半程马拉松:我的一年跑步经历
  • 【C++题解】1014. 编程求1+1/2+1/3+...+1/n
  • 【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
  • Linux 如何使用fdisk进行磁盘相关的操作