pta4~6总结blog

news/2025/2/26 18:06:39/文章来源:https://www.cnblogs.com/psy-nchu/p/18564836

一、前言
本次blog是针对发布题目集4~6的总结。
1、题目集4,总有三题。
1)第一题是用继承完成校园角色类设计。主要内容:角色Role分两类:学生Student和雇员Employee;雇员又分为教员Faculty和职员Staff。只需设计好每个类的父子关系,每个类的属性和方法就可以完成。
2)第二题是设计一个学生类和它的一个子类——本科生类。涉及的类就学生和本科生,涉及好继承方法、类的方法和属性便可完成。
3)第三题是在题目集3进行迭代,新加多选题和填空题的处理、输出顺序变化和多张试卷信息的情况。输入:题目信息包括多选题和填空题:管理题目编号、内容、标准答案。试卷信息:包含题目编号和分值,引用题目必须有效。学生信息:记录学号和姓名,答卷中学号需对应。删除题目信息:支持删除某道题目,并在答卷输出中标明题目失效。答卷信息:记录学生答题和学号。
题目关键点:利用正则表达式和字符串的拆分,解析出多选题、填空题、答题、试卷、学生和删除的信息。删除的题目会输出 the question X invalid 并计0分。引用不存在的题目提示 non-existent question。检查试卷总分不等于100分时输出警示。学号不在学生列表中提示学号引用错误,但答题照常输出。如果答卷信息中试卷的编号找不到,则输出”the test paper number does not exist”。输入信息只要不符合格式要求,均输出”wrong format:”+信息内容。如果答案输出时,一道题目同时出现答案不存在、引用错误题号、题目被删除,只提示一种信息,答案不存在的优先级最高。多选题和填空题输出格式与一般答卷题目的输出一致,判断结果除了true、false,增加一项”partially correct”表示部分正确。只要是正确格式的信息,可以以任意的先后顺序输入各类不同的信息。比如试卷可以出现在题目之前,删除题目的信息可以出现在题目之前等。

2、题目集5,总有三题。
1)第一题是家居强电电路程序-1。有个基类电路设备类,受控设备、控制设备、串联电路都继承电路设备类,再灯和风扇继承受控设备类,开关、分档调速器和连续调速器继承控制设备类,日光灯和白织灯继承灯类,吊扇继承扇类。输入:一整条串联电路。关键点:要根据输入识别电路中的电器,要检查开关的状态,开关没有闭合即短路断开测整个电路不工作,连续调档器只有4档,不能出现3档以上和0档以下的情况。
2)第二题是程序修改题,主要内容:使用集合存储多个学生的信息(有序);获取学生总数,并按照存储顺序;按照存储顺序获取各个学生的信息并逐条输出。根据给出的部分代码,完成所有代码编写。
3)第三题也是程序修改题,主要内容:使用集合存储3个员工的信息(有序);通过迭代器依次找出所有的员工。根据给出的部分代码,完成所有代码编写。

3、题目集6,总一题,家居强电电路程序-1。
1)这题是在家居强电电路程序-1进行迭代,新增并联电路,并联电路也继承电路设备类,由多个串联电路并联形成。关键点:要处理连接的引脚,VCC、GND、IN、OUT,建立正确的电路,根据分压或者分流计算出格电器正确的电流。电压,最后输出亮度和转速。

二、设计分析
设计合理简洁的结构图可以使代码编写变得简便,因此这部分对三次答题程序的结构、变量、方法进行分析,分别给出他们的SourceMontor的生成报表内容、类图、主函数和工作流程。
1、答题程序-4
1)SourceMontor的生成报表内容

从报表内容可看出,答题程序的总体复杂度较低,代码较为简洁。代码行数、方法数及其他度量指标表明其代码结构合理,未出现过多嵌套和复杂逻辑。

2)类图

以下是类图中每个类中方法的大致作用。
1))Question 类
checkAnswer(String answer):判断给定答案是否与标准答案匹配,返回布尔值。
2))MultiChoiceQuestion 类,继承自: Question
grade(List userAnswers, int fullScore):根据用户答案的正确性评分。
3))FillInTheBlankQuestion 类,继承自: Question
grade(String userAnswer, int fullScore):根据用户答案评分
4))Test 类
addQuestionScore(int number, int score):将题目编号及对应分数加入试卷,更新总分值。
checkFullScore():检查试卷总分是否为 100,如果不满足,输出警告。
grade(Answer answerSheet, List questions):根据学生答卷和试卷中的题目,逐题评分,并计算总分。输出每题的正确性及最终成绩。
5))Answer 类
addUserAnswer(String answer):将用户输入的答案加入答卷。
6))Agent 类
parseQuestionInput(String input):解析输入的普通题目信息(单一答案题),生成 Question 对象并加入题目列表。
parseMultiChoiceInput(String input):解析输入的多选题信息,生成 MultiChoiceQuestion 对象并加入题目列表。
parseFillInTheBlankInput(String input):解析输入的填空题信息,生成 FillInTheBlankQuestion 对象并加入题目列表。
parseTestInput(String input):解析输入的试卷信息,生成或更新 Test 对象(包括题目编号和分值)。
parseStudentInput(String input):解析输入的学生信息,将学生 ID 和姓名保存到 students 映射表中。
parseAnswerInput(String input):解析输入的答卷信息,生成 Answer 对象并加入答卷列表,同时验证学生和试卷是否存在。
parseDeleteInput(String input):解析删除题目信息,将对应题目标记为已删除。
findTest(int testNumber):根据试卷编号在 tests 列表中查找对应的试卷。
findQuestion(List questions, int questionNumber):静态方法,根据题目编号在题目列表中查找对应的题目。
processInputs():依次处理输入队列中的每条指令,包括题目、试卷、删除操作、学生和答卷的解析。确保顺序处理,先解析题目和试卷,再解析答卷。
printResult():遍历每份答卷,根据试卷内容逐题评分并输出结果。如果对应试卷不存在,则输出错误提示。

3)主函数
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Agent agent = new Agent();

    while (scanner.hasNextLine()) {String input = scanner.nextLine().trim();if (input.equals("end")) {break;} else {agent.inputQueue.add(input);}}// 解析输入agent.processInputs();// 输出结果agent.printResult();
}

}
作为程序入口,从命令行接收输入并加入输入队列。再调用 Agent 类的 processInputs() 解析输入,最后调用 printResult() 输出结果。

2、电路程序-1
1)SourceMontor的生成报表内容

从报表看出,电路程序的逻辑较为清晰。方法数和代码行数适中,显示该程序的模块化较好,复杂度较低。

2)类图

以下是类图中每个类中方法的大致作用。
1))ElectricityEquipment 类
printResult(): 输出设备的基本信息。
2))Switch 类
changeSwitch(): 切换开关状态,返回当前状态。
getOutputVoltage(): 根据开关状态返回输出电压,开启时返回输入电压,关闭时返回0。
printResult(): 输出开关状态。
3))GradeGovernor 类
upGearPosition(): 提高档位,最高到3档。
downGearPosition(): 降低档位,最低到0档。
getOutputVoltage(): 根据档位返回相应比例的输出电压。
printResult(): 输出当前档位。
4))ContinuousGovernor 类
getOutputVoltage(): 根据档位比例计算输出电压。
printResult(): 输出当前档位。
5))ControlledEquipment 类
calculateVoltageDifference(): 计算设备两端的电压差。
6))Lamp 类
getBrightness(): 抽象方法,计算灯的亮度。
printResult(): 输出灯的亮度。
7))IncandescentLamp 类
getBrightness(): 根据电压差计算白炽灯亮度。
8))SunshineLamp 类
getBrightness(): 根据电压差计算日光灯亮度。
9))Fan 类(抽象类)
getRotateSpeed(): 抽象方法,计算风扇转速。
printResult(): 输出风扇转速。
10))CeilingFan 类
getRotateSpeed(): 根据电压差计算吊扇转速。
11))SeriesCircuit 类
parseInput(): 解析输入命令,处理电路连接和控制命令。
handleControlCommand(): 处理控制命令,开关、调速等。
handleConnection(): 处理设备连接关系。
processVCCConnection(): 处理电源连接。
processGNDConnection(): 处理接地连接。
connectIntermediateDevices(): 处理中间设备的连接。
propagateVoltage(): 在电路中传递电压并更新设备状态。
printResults(): 按特定顺序输出所有设备的状态。
getOrCreateEquipment(): 获取或创建设备实例。
createEquipmentById(): 根据ID创建对应类型的设备。

3)主函数
public class Main {
public static void main(String[] args) {
double initialVoltage = 220.0; // 设置初始电压
SeriesCircuit circuit = new SeriesCircuit(initialVoltage);
circuit.parseInput(); // 开始解析输入
}
}
主函数,电路程序的工作流程:用户提供初始电压和元件参数,Main 类再调用 SeriesCircuit 类并设置初始电压,再调用 parseInput() 方法解析元件信息,最后依次调用 calculateCurrent() 和 calculatePower() 完成电路计算。

3、电路程序-2
1)SourceMontor的生成报表内容

从报表看出,与电路程序-1相比,功能扩展更多,但其方法数和复杂度依旧适中。表明此程序在功能扩展的同时仍保持了良好的结构设计。
2)类图

本次电路程序相较电路程序1进行迭代。主要变化如下:
1))Switch 类修改:
getstatus(): 新增方法,获取开关状态。
修改了状态逻辑:false(0)表示打开,true(1)表示闭合。
2))SeriesCircuit 类新增方法:
handleSeriesCircuit(): 处理串联电路配置信息,解析电路连接关系。
handleParallelConnection(): 处理并联电路配置,创建并联电路结构。
extractEquipmentId(): 从设备标识符中提取设备ID。
getOrCreateParallelCircuit(): 获取或创建并联电路对象。
updateEquipmentState(): 更新设备状态,亮度/转速。
3))新增 ParallelCircuit 类:
addSeriesCircuit(): 添加串联电路到并联结构中。
getOutputVoltage(): 计算并联电路的输出电压,包含复杂的电压分配逻辑。
4))新增电阻相关的变化:
所有设备类新增 resistance 属性,getResistance():在ElectricityEquipment类中新增获取电阻值的方法,在SeriesCircuit中新增计算总电阻的方法
5))新增设备类:
StandFan: 新增落地扇类,继承自Fan,实现了特定的转速计算逻辑。
6))电压传递逻辑修改:
propagateVoltage():修改为考虑电阻分压的计算方式,增加了对并联电路的电压分配处理。
3)主函数
public class Main {
public static void main(String[] args) {
double initialVoltage = 220.0; // 设置初始电压
SeriesCircuit circuit = new SeriesCircuit(initialVoltage);
circuit.parseInput(); // 开始解析输入
}
}
主函数,工作流程:
先设置系统初始电压,创建主电路对象,输入解析阶段,读取并解析用户输入的电路配置信息,根据配置信息动态创建电路设备,计算各设备的等效电阻,根据开关状态判断电路导通情况,按照分压规则计算各设备电压,更新各设备的工作状态,最后更新灯具亮度和风扇转速并输出。

三、踩坑心得
这部分对大作业中遇到的错误进行总结,在第一部分总结的关键点中,有很多编程时容易遇到很多错误。
1、答题程序-4
1)正则表达式处理错误
问题描述:正则表达式未能正确区分多选题、填空题与普通题目。例如在解析题目时,部分输入由于标点或格式稍有不同就导致匹配失败。
解决方法:使用更加稳健的正则表达式,添加边界条件,同时将解析逻辑抽象为统一的验证函数,便于调试和维护。
输入:#N:1 #Q:1+1= #A:2

K:2 #Q:古琴在古代被称为: #A:瑶琴或七弦琴

T:1 1-5 2-10

X:20201103 Tom

S:1 20201103 #A:1-5 #A:2-瑶琴

end
解析输入时,没有用trim()清楚空格的影响。

2)异常信息优先级不清晰
问题描述:当一个题目同时存在多种异常(如题号不存在、被删除等)时,输出顺序未明确优先级,导致输出内容不一致。
解决方法:明确优先级规则(如“题目不存在”优先级最高),在代码中添加异常处理队列,根据优先级依次处理。
输入:wrong format:#N:1 +1= #A:2
alert: full score of test paper1 is not 100 points
non-existent question~0
answer is null
20201103 Tom: 0 0~0

可以看出当时遇到多种异常时,程序不能完全处理好。

3)学号与试卷信息的引用错误
问题描述:学生学号未能及时检查是否有效,导致后续评分时出现未定义的引用。
解决方法:在解析答卷时,增加学号和试卷编号的即时校验逻辑;若学号或试卷无效则及时记录并报错。
输入:#N:1 #Q:1+1= #A:2

T:1 1-5

X:20201106 Tom

S:1 20201103 #A:1-5 #A:2-4

end

可以看出,当程序遇到不存在学号时,不会进行判分,直接提示无效学号。

4)试卷总分校验
问题描述:部分试卷的题目分值之和未能正确校验是否等于100,尤其是在题目更新后未重新校验。
解决方法:将校验逻辑绑定到试卷的 addQuestionScore 方法,每次更新分值时自动检查总分。

2、电路程序-1
1)开关状态逻辑错误
问题描述:开关的开闭状态与电压传递逻辑未能正确对应,尤其是多层串联电路时容易出错。
解决方法:将开关状态处理独立封装为一个函数,所有状态更新和电压传递统一调用该函数。
输入:[VCC D2-1]
[D2-2 K1-1]
[K1-2 GND]#K1#K1
end
实际输出:@K1:turned on
@D2:360
可以看出,此时开关没有闭合,电路应该不能工作,但D2仍然工作,因为D2在开关的前面,已经计算好了,而没有考虑开关问题。

2)档位逻辑超出范围
问题描述:连续调速器的档位超出有效范围(如3档以上或负档),未能及时校验。
解决方法:在每次档位调整时增加范围校验。
关键代码:
public int upGearPosition() {
if(GearPosition<3){
GearPosition++;
}
else{
GearPosition =3;
}
return GearPosition;
}

public int downGearPosition() {if(GearPosition>0){GearPosition--;}else{GearPosition =0;}return GearPosition;
}

新增了超过3档,再增加还是3档;低于0档。再减档还是0档。

3)设备创建与连接错误
问题描述:设备连接时未能正确判断是否重复创建相同设备,导致设备重复或连接失效。
解决方法:引入一个设备注册表,通过设备唯一 ID 统一管理实例化和连接操作。
关键代码:
private Set addedEquipmentIds = new HashSet<>(); // 用于跟踪已添加的设备ID,防止重复
后面电路每次新建器件,都要检查这个列表中是否存在一样的器件,防止重复。

4)输出结果排序问题
问题描述:部分设备的输出顺序与题目要求不符,可能引起误解。
解决方法:为设备类添加一个固定的输出优先级字段,根据该字段排序后再统一输出。
输入:[VCC D2-1]
[D2-2 K1-1]
[K1-2 GND]#K1
end
实际输出:@D2:360
@K1:closed
可以看出,D2在开关的前面,按照电路顺序输出,没有按照题目要求。
关键代码:
private void printResults() {
// 按设备类型(K、F、L、B、R、D)顺序和编号排序
seriesList.sort(Comparator.comparing((ElectricityEquipment e) -> {
switch (e.equipmentFlag) {
case "K": return 0;
case "F": return 1;
case "L": return 2;
case "B": return 3;
case "R": return 4;
case "D": return 5;
default: return 6; // 未知类型排在最后
}
}).thenComparing(e -> e.equipmentId));

// 输出排序后的设备状态或参数
for (ElectricityEquipment equipment : seriesList) {equipment.printResult();
}

}
新增按字母排序,如果只有for循环,那么程序将按照创建顺序输出。

3、电路程序-2
1)并联电路电压计算错误
问题描述:并联电路的电压分配未能正确考虑电阻与电流的关系,导致部分设备的亮度或转速计算不正确。
解决方法:因为并联电路比较复杂,要考虑并联电路的多个开关,所以要引入更精确的电路计算公式,分别计算总电阻、电流分配与电压分配,确保结果符合物理规律。
输入:#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]

T2:[IN K2-1] [K2-2 D1-1] [D1-2 OUT]

M1:[T1 T2]

T3:[VCC L1-1] [L1-2 M1-IN] [M1-OUT D3-1] [D3-2 GND]

K1

L1:1.00

end

可以看出,D2和D3电压都是0,而D1是没有的符合,所以问题在于分压计算错误。

2)电压传递逻辑不完整
问题描述:多层串联电路与并联电路结合时,电压未能正确从上一级传递到下一级。
解决方法:为每个设备记录电压输入与输出,并递归计算各子电路的状态。
关键代码:
public void propagateVoltage() {
double totalResistance = getResistance();
double remainingVoltage = inputVoltage;

    // 检查是否有开关打开boolean hasOpenSwitch = false;for (ElectricityEquipment equipment : seriesList) {// 修改判断条件:!status 改为 statusif (equipment instanceof Switch && !((Switch) equipment).getstatus()) {hasOpenSwitch = true;break;}}if (hasOpenSwitch) {// 如果有开关打开,所有后续设备电压为0for (ElectricityEquipment equipment : seriesList) {equipment.setInputVoltage(0);updateEquipmentState(equipment);}} else {// 如果所有开关都闭合,根据电阻分压for (ElectricityEquipment equipment : seriesList) {if (totalResistance > 0) {double deviceVoltage = (equipment.getResistance() / totalResistance) * inputVoltage;equipment.setInputVoltage(deviceVoltage);}updateEquipmentState(equipment);}}
}

先获取电路总电阻,再检查是否存在打开的开关,如果电路中存在未闭合的开关,电路被视为断路,否则根据电阻分压规则为各设备分配电压。

3)设备连接的引脚错误
问题描述:设备的 VCC、GND、IN 和 OUT 引脚连接混乱,导致整个电路无效。
解决方法:增加引脚验证功能,在连接时检查每个设备的引脚是否正确匹配电路的上下游。
输入:#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]

T2:[IN K2-1] [K2-2 D1-1] [D1-2 OUT]

M1:[T1 T2]

T3:[VCC L1-1] [L1-2 M1-IN] [M1-OUT D3-1] [D3-2 GND]

K1

L1:1.00

end
这个电路连接,比较复杂,不同引脚太多,对程序解析造成很大困难。

四、改进建议
三次大作业的答题程序都没有满分,因此程序还有很多问题,还存在很大的进步空间。
1、答题程序-1
1)模块化增强
可以考虑将Agent类中复杂的解析方法如parseQuestionInput, parseMultiChoiceInput等进一步拆分到单独的解析器类如QuestionParser,AnswerParser等,以提高可读性和代码复用性。
2)错误优先级逻辑优化
在处理删除、引用不存在等错误时,可以将优先级逻辑从printResult方法中拆分出来,使用专门的错误处理模块或策略模式来明确优先级,提高代码的扩展性和测试性。
3)输入格式校验
添加输入格式验证模块,将所有格式相关的校验提前,减少processInputs方法中逐条校验的负担,提升性能。
4)性能优化
在大规模题库情况下,可以使用更高效的数据结构如哈希代替线性搜索来查找题目、试卷等。

2、电路程序-1
1)分层设计
当前结构将解析输入和处理设备逻辑混在一起,可以考虑拆分为输入解析层:专门处理输入格式和命令解析。电路模型层:负责电路设备的状态计算、连接处理。输出层:统一管理结果输出。
2)电路连接逻辑优化
电路连接的逻辑较复杂且集中在SeriesCircuit类中,可以考虑将不同设备的连接处理分离到设备类自身,通过接口实现通用连接逻辑,降低耦合性。
3)参数验证与默认值
可以考虑对连续调速器的档位和电路初始电压设置范围进行明确的约束或提供默认值,避免异常情况如负电压、非法档位导致程序中断。
4)单一职责优化
可以考虑将电压分配、设备更新等功能分别抽取到单独的方法中,减少主逻辑方法的复杂度。
5)设备状态管理增强
可以考虑为设备状态设计统一的State类或状态模式,通过状态对象管理开关、亮度、转速等逻辑,简化设备类的实现。

3、电路程序-2
1)电压与电流计算模块化
可以考虑将电压、电流的计算独立封装两个模块,支持复杂电路拓扑如分压、分流的扩展,避免逻辑混乱。
2)设备特性扩展
可以考虑为不同设备提供更灵活的特性扩展接口,例如将灯的亮度计算和扇的转速计算弄成接口。

五、总结
在完成题目集4-6的过程中,涉及多层继承、复杂逻辑处理以及模块化设计,不同题目的特点和需求反映了不同的编程设计理念和实现难点。面对大量的输入信息,正则表达式可以快速帮我们进行匹配,分隔符split可以快速帮我们进行分组,帮助我们提取到正确的输入信息。面对这种大量信息需要处理的程序时,编写时可以先设计好类图,划分清楚代码,明确有哪些类,哪些功能,类与类之间的关系,这样能使编程更加简单。同时,通过这三次大作业,我意识到方法和变量合理、简单命名的重要性。一个简单、一眼知晓函数功能可以让我们梳理代码逻辑、检查代码错误时事半功倍,省事省力。同时,为了代码的健壮性,我们应该在代码中多设置一下输入输出提示,并注意他们的位置,达到既不凌乱又能给人提示的目的,意识到java的三大特性:封装、继承、多态和模式选择的重要性。通过这三个复杂的程序设计,我不仅熟悉了正则表达式,也了解存储结构arrary、arraylist、list、haspmap、set等多种存贮数据方式的使用,知道用继承、接口等多种方法来增加代码的扩展性。总而言之,收获很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/839942.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker通过运行中的容器构建镜像

docker commit web1 httpd:v1 docker run -d --name web5 -p 85:80 httpd:v1

【小记】 Matplotlib 中设置自定义中文字体的正确姿势

麻麻再也不用担心我的 matplotlib 渲染不出中文字符了!本笔记还简要地从源码角度介绍了一下实现原理。最近做实验涉及到用 Matplotlib 绘制图表,我希望相同的代码能不仅在本地运行,且还能在 Google Colab, Binder 这些线上平台运行。 问题就来了,为了在各个平台上都能绘制中…

南昌航空大学-22207107-胡优乐-Java第二次Blog大作业

前言在这段时间里,我们总共进行了三次大作业练习,基于这三次大作业的体量及设计的知识点,难度分布,我做了以下的总结:1.第四次大作业总共有三道题,分别是:1.校园角色类设计-1;2.设计一个学生类和它的子类-本科生类;3.答题判断程序-4;实际做下来的体会是:(1)第一题难…

团队作业5——测试与发布

团队作业5——测试与发布这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <作业要求>这个作业的目标 完成连续七天的项目冲刺GitHub 链接 https://github.com/tangliweiwww/ChatGpt团队 1.团队名称:Elegance 2.团队成员姓名 班级 学号唐立伟(组长) 计科…

Java中定时任务实现方式及源码剖析

概述 在企业级应用开发场景中,定时任务占据着至关重要的地位。比如以下这些场景:用户4个小时以内没有进行任何操作,就自动清除用户会话。 每天晚上凌晨自动拉取另一个业务系统的某部分数据。 每隔15分钟,自动执行一段逻辑,更新某部分数据。类似的场景会频繁出现在我们的日…

001 增肌锻炼

三分化https://www.bilibili.com/video/BV1mY411Y7FR 推拉腿休 推拉腿休...推力日:胸 肩 三头拉力日:背 二头每周同一部位练习2次动作:腹肌https://www.bilibili.com/video/BV1Vh4y197aD https://www.bilibili.com/video/BV1hd4y1f76Z 腹肌激活30S上腹拉伸来自为知笔记(Wiz)…

docker 存储卷实验

需求:创建1个myvolume1的空卷,将其挂载给web1的容器,挂载目录/usr/local/apache2/htdocs 运行两个web2 web3的容器,更新web2中容器内容为 This is a test! 通过宿主机访问web3查看输出内容。docker volume create myvolume1 docker run -d --name web2 -p 82:80 -v myvolum…

让何同学翻车的项目是什么来头?

‍ 背景 最近, B 站知名 UP 主何同学(1207 万粉丝)因涉嫌抄袭开源项目 ASCII generator​ 而引发争议。 视频《我用 36 万行备忘录做了个动画…》从 11 月 15 号发布,获得几百万播放,热度相当高。 他提到团队专门写了一个软件,但实际上该软件基于越南开发者 vietnh1009 在…

selenium模块,web自动化,元素定位

1. 元素定位 查看网页元素 右键-->检查from selenium.webdriver.common.by import By # 元素定位包# 使用 test.find_element(By.XXX) 1)定位元素ID--对应浏览器id# 定位一个元素 a = test.find_element(By.ID, value="wrapper") print(a) # 定位多个元素(返回列…

22207321-王郅坚-BLOG2

前言 这三次题目集涉及了不同的知识点、编程技巧及而算法逻辑,从简单的基础题目逐步过渡到复杂的业务逻辑模拟。三次题目集不仅是单单考核独立的编程任务,其实它们有明确的迭代关系,逐步递进并且不断添加复杂度。题目集1是针对前三次的题目再进行迭代升级,题目集2开始了一个…

ffmpeg 时基转换

1:av_q2d(AVRational a)函数av_q2d(AVRational);该函数负责把AVRational结构转换成double,通过这个函数可以计算出某一帧在视频中的时间位置 timestamp(秒) = pts * av_q2d(st->time_base); 计算视频长度的方法: time(秒) = st->duration * av_q2d(st->…

2024-2025-1学号20241309《计算机基础与程序设计》第九周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第九周作业这个作业的目标|作业正文|2024-2025-1学号20241309《计算机基础与程序设计》第九周学习总结 教材学习内容总结 《计算机科学概论》第十章: (一)…