编程题目+数据库题目总结(3)

article/2025/10/9 2:28:55

目录

  • 编程题
        • 1.字典中保存了一些股票代码(键)及价格(值),用一行代码找出价格最高的股票,输出股票代码。(5分)
        • 2.字典中保存了一些股票代码(键)及价格(值),用一行代码对字典按股票价格从高到低进行排序,输出股票代码的列表。(5分)
        • 用pandas解决问题1,2
        • 3.设计一个函数,生成指定长度的验证码,验证码由大小写英文字母和数字构成。(10分)
        • 4. 设计一个函数,统计字符串中英文字母和数字各自出现的次数以二元组形式返回。(10分)
        • 5. 设计一个函数,统计一个字符串中出现频率最高的字符及其出现次数,以二元组形式返回,注意频率最高的字符可能不止一个。(10分)
          • 相关题目 :力扣 217 ([题目链接](https://leetcode-cn.com/problems/contains-duplicate/))
        • 6. 列表中有1000000个元素,取值范围是[1000, 10000),设计一个函数返回列表中的重复元素,请将函数的执行效率考虑进去。(10分)
  • 数据库
        • 1. 有如下所示的学生表(tb_student)和近视表(tb_myopia),查询没有近视的学生的姓名。(10分)(类似题目力扣183)
        • 2. 有如下所示的员工表(tb_emp)和部门表(tb_dept),查询每个部门工资(sal)前三高的员工,要求使用窗口函数。(10分)(力扣185题)
        • 3. 有如下所示的表格(tb_sales),要求查出如表(tb_result)所示的结果。(10分)
        • 4.有如下所示的表格(tb_record),其中第二列(income)代表每个人的收入,统计收入的众数。(10分)
        • 5.有如下所示的表格(tb_login_log),统计连续三天有登录行为的用户(user_id),要求使用窗口函数实现。(10分)

编程题

prices = {'AAPL': 191.88,'GOOG': 1186.96,'IBM': 149.24,'ORCL': 48.44,'ACN': 166.89,'FB': 208.09,'SYMC': 21.29
}

1.字典中保存了一些股票代码(键)及价格(值),用一行代码找出价格最高的股票,输出股票代码。(5分)

max(prices,key = lambda x : prices[x]) # 'GOOG'
max(prices,key = prices.get) # 'GOOG'

2.字典中保存了一些股票代码(键)及价格(值),用一行代码对字典按股票价格从高到低进行排序,输出股票代码的列表。(5分)

sorted(prices,key = lambda x:prices[x],reverse = True) # ['GOOG', 'FB', 'AAPL', 'ACN', 'IBM', 'ORCL', 'SYMC']
# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sorted(prices,key = prices.get) # ['SYMC', 'ORCL', 'IBM', 'ACN', 'AAPL', 'FB', 'GOOG']

用pandas解决问题1,2

import numpy as np
import pandas as pddf = pd.DataFrame(data = prices.values(),index = prices.keys() ,columns = ['prices'])# 1
df.prices.nlargest(1).index # Index(['GOOG'], dtype='object')# 2
df.prices.sort_values(ascending = False).index # Index(['GOOG', 'FB', 'AAPL', 'ACN', 'IBM', 'ORCL', 'SYMC'], dtype='object')

3.设计一个函数,生成指定长度的验证码,验证码由大小写英文字母和数字构成。(10分)

笨方法:先列举出大小写英文字母和数字,根据指定长度随机数生成索引组成验证码

import random
list1 = ['a','b','c','d','e','f','g','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0']
length = len(list1)
# print(length)
def func_1(n):res = []for _ in range(n):res.append(list1[random.randint(0,length)])return ''.join(res)print(func_1(10))

参考答案:直接调用string中的字母和数字列表,用random.choices选择指定长度的验证码

import string
all_chars = string.ascii_letters + string.digitsdef random_code(length = 4):return ''.join(random.choices(all_chars,k=length))

注意:因为修改的是命名变量,所以修改变量默认参数值的时候需要写”变量名 = 设定值“

for _ in range(10):print(random_code(length = 7))
"""
LxTjoyk
DK4wI9Q
ASc2jB4
r61h4VY
8vilgaR
mMbxDAq
aY6EoRo
Mvd50Pd
y2kFI9W
96fFYhl
"""

4. 设计一个函数,统计字符串中英文字母和数字各自出现的次数以二元组形式返回。(10分)

利用正则表达式解决问题

import re
def func_2(data):length = len(data)num = re.sub(r'\D',"",data) # 将非数字的字符替换为空字符串return length-len(num),len(num)data2 = 'abc23543RFGV'
print(func_2(data2)) # (7, 5)

参考答案:定义两个计数器,分别计数字母,数字

def count_(content:str):letters_count,num_count = 0,0for x in content:if 'a' <= x <= 'z' or 'A' <= x <= 'Z':letters_count+=1if  '0' <= x <= '9':num_count+=1return letters_count,num_countprint(count_('abc23543RFGV')) # (7, 5)

5. 设计一个函数,统计一个字符串中出现频率最高的字符及其出现次数,以二元组形式返回,注意频率最高的字符可能不止一个。(10分)

参考答案:

def find_highest_freq(content:str):info={}for ch in content:info[ch] = info.get(ch,0) + 1 # 挨个获取字符串的每个字符,以字符为键获取对应的值,值+1 更新字典相应键对应的值max_count = max(info.values())return [key for key,value in info.items() if value == max_count],max_count# 字典.get(key,默认值) - 获取字典中指定key对应的值,key不存在返回默认值

验证

find_highest_freq('aabbccaacc') # (['a', 'c'], 4)
相关题目 :力扣 217 (题目链接)
class Solution:def containsDuplicate(self, nums: List[int]) -> bool:haxi = {}for x in nums:haxi[x] = haxi.get(x,0)+1if haxi[x]>=2: return Truereturn False

6. 列表中有1000000个元素,取值范围是[1000, 10000),设计一个函数返回列表中的重复元素,请将函数的执行效率考虑进去。(10分)

参考答案:以空间换时间

def find_duplicates(nums):counters = [0]*10000  # 创建一个长度为10000,元素为0的数组,数组下标对应的数值为该下标值在给定数组中的出现次数for num in nums:counters[num] += 1 # 取出每个数,修改计数数组相应下标的值加1return [index for index,item in enumerate(counters) if item >1] # 返回计数数组中,值>1的下标值

验证

find_duplicates([1111,1111,1112,1113,1112]) # [1111 , 1112]

数据库

1. 有如下所示的学生表(tb_student)和近视表(tb_myopia),查询没有近视的学生的姓名。(10分)(类似题目力扣183)

#
# tb_student
# +---------+-----------+
# | stu_id  | stu_name  |
# +---------+-----------+
# | 1       | Alice     |
# | 2       | Bob       |
# | 3       | Jack      |
# | 4       | Jerry     |
# | 5       | Tom       |
# +---------+-----------+
#
# tb_myopia
# +------+------------+
# | mid  | stu_id     |
# +------+------------+
# | 1    | 3          |
# | 2    | 2          |
# | 3    | 5          |
# +------+------------+

建表

create table tb_student
(
stu_id int unsigned auto_increment,
stu_name varchar(20) not null ,
primary key (stu_id)
);create table tb_myopia
(
`mid` int unsigned auto_increment,
stu_id int not null,
primary key (`mid`)
);insert into tb_student (stu_id,stu_name)
values
(1,'Alice'),
(2,'Bob'),
(3,'Jack'),
(4,'Jerry'),
(5,'Tom');insert into tb_myopia (`mid`,stu_id)
values
(1,3),
(2,2),
(3,5);

法一:子查询 + not in
思路:选择 stu_id 不在近视表中的学生姓名

select stu_name from tb_student
where stu_id not in (select stu_id from tb_myopia);

法二:左外连接
思路:最终选择的是左表有的,右表没有的,选择左外连接,条件where mid is null / where stu_id is null 都可以

select stu_name from tb_student t1 left join tb_myopia t2 on t1.stu_id=t2.stu_id where mid is null;

select stu_name from tb_student t1 left join tb_myopia t2 on t1.stu_id=t2.stu_id where t2.stu_id is null;

2. 有如下所示的员工表(tb_emp)和部门表(tb_dept),查询每个部门工资(sal)前三高的员工,要求使用窗口函数。(10分)(力扣185题)

# 
# tb_emp
# +-----+--------+--------+--------+
# | eno | ename  | sal    |  dno   |
# +-----+--------+--------+--------+
# | 1   | Alice  | 85000  |  1     |
# | 2   | Amy    | 80000  |  2     |
# | 3   | Bob    | 65000  |  2     |
# | 4   | Betty  | 90000  |  2     |
# | 5   | Jack   | 69000  |  1     |
# | 6   | Jerry  | 85000  |  1     |
# | 7   | Martin | 72000  |  2     |
# | 8   | Vera   | 75000  |  1     |
# +-----+--------+--------+--------+
#
# tb_dept
# +----+-------+
# | id | name  |
# +----+-------+
# | 1  | R&D   |
# | 2  | Sales |
# +----+-------+

建表

create table tb_emp
(eno int unsigned auto_increment,ename varchar(20) not null,sal int not null,dno int not null,primary key (eno)
);create table tb_dept
(id int not null,name varchar(20)
);insert into tb_emp (eno,ename,sal,dno)
values
(1,'Alice',85000,1),
(2,'Amy',80000,2),
(3,'Bob',65000,2),
(4,'Betty',90000,2),
(5,'Jack',69000,1),
(6,'Jerry',85000,1),
(7,'Martin',72000,2),
(8,'Vera',75000,1);insert into tb_dept (id,name)
values
(1,'R&D'),
(2,'Sales');

思路:窗函数+子查询

select name `Department`,ename `Employee`,sal `Salary`
from
(select name,ename,sal,dense_rank() over (partition by id order by sal desc) as rnfrom tb_emp t1, tb_dept t2where t1.dno = t2.id
) temp
where rn<=3;

中间过程(子查询):

select name,ename,sal,
dense_rank() over (partition by id order by sal desc) as rn
from tb_emp t1, tb_dept t2
where t1.dno = t2.id;

请添加图片描述

3. 有如下所示的表格(tb_sales),要求查出如表(tb_result)所示的结果。(10分)

# tb_sales
# +------+---------+--------+
# | year | quarter | amount |
# +------+---------+--------+
# | 2020 |   2     |   11   |
# | 2020 |   2     |   12   |
# | 2020 |   3     |   13   |
# | 2020 |   3     |   14   |
# | 2020 |   4     |   15   |
# | 2021 |   1     |   16   |
# | 2021 |   1     |   17   |
# | 2021 |   2     |   18   |
# | 2021 |   3     |   19   |
# | 2021 |   4     |   18   |
# | 2021 |   4     |   17   |
# | 2021 |   4     |   16   |
# | 2022 |   1     |   15   |
# | 2022 |   1     |   14   |
# +------+---------+--------+
#
# tb_result
#
# +------+--------+--------+--------+--------+
# | year |   Q1   |   Q2   |   Q3   |   Q4   |
# +------+--------+--------+--------+--------+
# | 2020 |   0    |   23   |   27   |   15   |
# | 2021 |   33   |   18   |   19   |   51   |
# | 2022 |   29   |   0    |   0    |   0    |
# +------+--------+--------+--------+--------+

建表:

create table tb_sales
(year int not null,quarter int not null,amount int not null
);delete from tb_sales;insert into tb_sales
values
(2020,2,11),
(2020,2,12),
(2020,3,13),
(2020,3,14),
(2020,4,15),
(2021,1,16),
(2021,1,17),
(2021,2,18),
(2021,3,19),
(2021,4,18),
(2021,4,17),
(2021,4,16),
(2022,1,15),
(2022,1,14);

思路:聚合函数 + (case when then else end)
宽表变窄表

select year,sum(case quarter when 1 then amount else 0 end) as 'Q1', sum(case quarter when 2 then amount else 0 end) as 'Q2', sum(case quarter when 3 then amount else 0 end) as 'Q3', sum(case quarter when 4 then amount else 0 end) as 'Q4'
from tb_sales
group by year;

4.有如下所示的表格(tb_record),其中第二列(income)代表每个人的收入,统计收入的众数。(10分)

# tb_record
# +--------+--------+
# | name   | income |
# +--------+--------+
# | Alice  | 85000  |
# | Amy    | 65000  |
# | Bob    | 65000  |
# | Betty  | 90000  |
# | Jack   | 82000  |
# | Jerry  | 65000  |
# | Martin | 82000  |
# | Vera   | 85000  |
# +--------+--------+

建表

create table tb_record
(name varchar(20) not null,income int unsigned not null
);insert into tb_record (`name` , income)
values
('Alice',85000),
('Amy',65000),
('Bob',65000),
('Betty',90000),
('Jack',82000),
('Jerry',65000),
('Martin',82000),
('Vera',85000);

思路:ALL: 与子查询返回的所有值比较为true 则返回true

select income from tb_record group by income
having count(*) >= all(select count(*) from tb_record group by income);

5.有如下所示的表格(tb_login_log),统计连续三天有登录行为的用户(user_id),要求使用窗口函数实现。(10分)

建表

create table tb_login_log
(user_id varchar(10) not null,login_date date not null
);insert into tb_login_log(user_id,login_date)
values
('A','2019-09-02'),
('A','2019-09-03'),
('A','2019-09-04'),
('B','2018-11-25'),
('B','2018-12-31'),
('C','2019-01-01'),
('C','2019-04-04'),
('C','2019-09-03'),
('C','2019-09-04'),
('C','2019-09-05');

思路:窗函数 + 子查询
补充:如果给的明细时间可以先转换成年月日
DATE() 函数返回日期或日期/时间表达式的日期部分。

语法

select distinct user_id
from (select user_id,login_date,row_number() over (partition by user_id order by login_date) as rnfrom tb_login_log
) temp
group by user_id,subdate(login_date,rn)
having count(*) >= 3;

http://chatgpt.dhexx.cn/article/Bdxqmd3f.shtml

相关文章

沈师 PTA 数据库题目及部分解析 第一章

判断题&#xff1a; 1.一个数据库只有一个模式和一个内模式。 T 2.数据模型是由数据结构、数据操作和完整性约束三部分组成的 T 3.由于数据库中的数据是不断更新的&#xff0c;因此关系模式是相对变化的。 F 解析&#xff1a;关系模式不会相对变化&#xff0c;变化的是实例 4.数…

【数据库题目复习】期末试卷 一、二

文章目录 试题一一、选择题二、填空题三、简答题四、设计题五、综合题 试题二一、选择题二、填空题三、简答题四、设计题五、综合题 试题一 一、选择题 1. 数据库系统的核心是&#xff08; B &#xff09; A&#xff0e;数据库 B&#xff0e;数据库管理系统 C&#xf…

【数据库题目复习】第7章 数据库设计

文章目录 一、选择题&#xff1a;二、填空三、应用 参考文章&#xff1a;https://blog.csdn.net/qq_46139801/article/details/117453449 知识点&#xff1a; &#xff08;1&#xff09;各子系统的E-R图之间的冲突主要有三类&#xff1a; 属性冲突、命名冲突和结构冲突。 &…

【力扣刷题总结】数据库题目按知识点分类总结

观前提示&#xff1a; 这个图先自行背诵至滚瓜烂熟。 文档中论述题目解题思路时没有特殊情况都按照上面的程序执行顺序为准&#xff0c;个别题也会以其他更自然的顺序讲解。 本文的知识点整理仅起提示作用&#xff0c;一些不常用功能、参数可能会遗漏&#xff0c;如需了解详细…

数据库题目之数据库设计

一、选择题 1、在数据库设计中&#xff0c;用E-R图来描述信息结构但不涉及信息在计算机中的表示&#xff0c;它是数据库设计的 阶段。 A&#xff0e;需求分析 B&#xff0e;概念设计 C&#xff0e;逻辑设计 D&#xff0e;物理设计 【答案&#xff1a;】B 2、在关系…

数据库常考大题

宝子们心心念念的数据库大题来啦~ 我已经整理好啦~你们根据目录找对应题目就好啦&#xff0c;嘿嘿~姐姐是不是还有点小贴心呢&#xff1f; &#x1f6f8; &#x1f30f; &#x1f318; • . ✯✯ ★ * &#x1f6f0; . • ★ • ▁▂▃▄▅▆▇▇▆▅▄▃▁▂▃. 目录…

33道数据库题目

33道数据库题目 准备三张表题目 准备三张表 emp–员工表 dept–部门表 salgrade–工资等级表 题目 取得每个部门最高薪水的人员名称 (方法1) select ename, sal, deptno from emp where sal in (select max(sal) from emp group by deptno);(方法2&#xff09; select e.…

50道数据库SQL练习题(深入理解各关键字的作用)

目录 表结构创建表练习题1、查询“001”课程比“002”课程成绩高的所有学生的学号2、查询所有同学的学号、姓名、选课数、总成绩3、查询平均成绩大于60分的同学的 学号和平均成绩4、查询姓“葛”的老师的个数5、查询没学过“五木”老师课的同学的学号、姓名6、查询学过“101”并…

数据库复习题选择题+判断题+填空题(考试续命必备

数据库复习题选择题判断题填空题(考试续命必备 一些选择题 1、从计算机数据管理的角度看&#xff0c;信息就是数据&#xff0c;数据就是信息。&#xff08;B &#xff09; A、对 B、错 (描述事物的符号记录称为数据 数据库的数据项之间无联系&#xff0c;记录之间存在联系。…

【课后习题】高等数学第七版上第二章 导数与微分 第五节 函数的微分

习题2-5 1. 已知 y x 3 − x yx^3-x yx3−x, 计算在 x 2 x2 x2 处当 Δ x \Delta x Δx 分别等于 1 , 0.1 , 0.01 1,0.1,0.01 1,0.1,0.01 时的 Δ y \Delta y Δy 及 d y \mathrm{d} y dy. 2. 设函数 y f ( x ) yf(x) yf(x) 的图形如下, 试在图(a)、(b)、&#xff0…

高等数学同济七版课后习题答案

高等数学同济七版课后习题答案上册下册,习题全解指南。 一、《高等数学》(第七版)下册习题全解 第八章 向量代数与空间解析几何 下载地址: 链接:https://pan.baidu.com/s/185C8RB4Y9pYO84V4Rup1Wg 提取码:p0o8 习题8-1 向量及其线性运算 习题8-2 数量积 向量积 *混合积…

高等数学(第七版)同济大学 习题10-3 (后6题)个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题10-3&#xff08;后6题&#xff09; 函数作图软件&#xff1a;Mathematica 10. 利 用 球 面 坐 标 计 算 下 列 三 重 积 分 &#xff1a; \begin{aligned}&10. \ 利用球面坐标计算下列三重积分&#xff1a;&\end…

高等数学(第七版)同济大学 习题1-8 个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题1-8 函数作图软件&#xff1a;Mathematica 1. 设 y f ( x ) 的图形如图 1 − 39 所示&#xff0c;试指出 f ( x ) 的全部间断点&#xff0c;并对可去间断点补充或 修改函数值的定义&#xff0c;使它成为连续点。 \begin{…

浅谈一下前端单元测试

关于单元测试这个概念&#xff0c;我想很多前端的小伙伴都知道&#xff0c;但是却并不一定能描述清楚。由于我开始接触单元测试还是在四个月前&#xff0c;当时也只是做了一些纯函数的单元测试。所以在这里只能说浅谈一下前端单元测试。 什么是单元测试&#xff1f; 我理解的…

web前端测试要点

【说明】 JS压缩&#xff1a; 目的&#xff1a; 1、减少JS代码容量&#xff0c;增加下载速度和执行速度&#xff1b; 2、压缩后的JS代码不具备可识性&#xff0c;在一定程度上达到加密效果&#xff0c;防止被人轻易使用。 常规Javascript压缩的原理&#xff1a; 1、压缩多余的…

为什么必须执行前端测试?

对于网站的真实前端测试&#xff0c;必须在不同的设备和浏览器(具有多个版本)上检查功能和性能。在不同浏览器、浏览器版本和操作系统上评估网站的过程称为跨浏览器测试&#xff0c;它被认为是每个前端网站测试计划的重要组成部分&#xff0c;用于评估你能够通过无缝UI和UX取悦…

前端接口测试

背景 由于需求不断更改&#xff0c;项目前后端分离后&#xff0c;后端开发人员经常需要改字段加字段&#xff0c;也有可能删掉接口&#xff0c;这时候前端如果没有相对应的调整&#xff0c;就容易造成bug。为了解决这个问题&#xff0c;我们需要对接口进行测试。 测试被调用接…

前端测试方法

最近在学校的《系统分析与设计》一课的大作业上&#xff0c;由于我担任的是测试工程师的角色&#xff0c;因此小小的研究了一些前端和后端的测试到底要怎么做。本文着重于前端测试方法。 1. 什么是测试&#xff1f; 我把测试定义成&#xff1a;是一段检测你的应用代码&#xf…

前端测试都要测什么

单元测试&#xff0c;Unit Testing&#xff0c;简称 UT&#xff0c;是指对软件中的最小可测试单元进行检查和验证&#xff0c;这是最低级别的测试活动&#xff0c;前端开发中单元可以是一个 function 也可以是一个 class&#xff0c;也可以是一个组件。对他们的输出做断言检查&…

前端测试开发工具--mock 的使用

目录 1. 背景 2. Mock是什么 3. Mock能做什么 4. Mock实现方式 5. Mock市面上常见的解决方案 6. Python下unittest.mock使用 1. 背景 在实际产品开发过程中&#xff0c;某个服务或前端依赖一个服务接口&#xff0c;该接口可能依赖多个底层服务或模块&#xff0c;或第三方…