SchoolWork-LaTeX/数据结构/实验报告/10213903403第四章作业.tex

65 lines
5.3 KiB
TeX
Raw Normal View History

2024-09-02 17:47:53 +08:00
\documentclass[实验报告模板]{subfiles}
\renewcommand{\mydate}{
2023/10/27
}
\renewcommand{\mychapternum}{4}
\begin{document}
\mytitle
\begin{enumerate}
\myitem{实验目的}{
\item 使用第四章知识解决数组和字符串
的问题。
}
\myitem{实验内容}{
\item 给你一个 m 行 n 列的矩阵 matrix请按照顺时针螺旋顺序返回矩
阵中的所有元素。
\item 给定一个字符串,输出所有长度至少为 2 的回文子串。回文子串即从左
往右输出和从右往左输出结果是一样的字符串比如abba
cccdeedccc 都是回文字符串。
}
\myitem{实验原理}{
\item 程序设计原理。
}
\myitem{实验步骤}{
\item 问题抽象
\item 编写程序
\item 调试程序
\item 完善总结
}
\myitem{调试过程、结果和分析}{
\item Python的切片取反时要注意stop的参数可能会小于0就变成负向索引了。例如正向切片时使用a[i:j + 1]可以取出[i,j + 1)区间,即[i,j]闭区间内的元素但要是反向切片的话因为切片的区间包含start但不包含stop所以应该为(i - 1, j]也就是start为jstop为i - 1即a[j:i - 1:-1]但是如果i = 0的时候正向切片是取出[0, j + 1)区间内的元素,但反向取就变成了(-1, j],而-1在切片中是负向索引而每个元素的位置肯定小于等于最后一个元素所在的位置因此不管j怎么取最终的结果都是空的序列。因此最终的代码采用了先赋值再切片防止出现这样的情况。
}
\item \textbf{总结}
\begin{enumerate}
\itemsep 1.6em
\item 在不考虑复杂度的情况下Python实现功能真的特别方便
\item Python的and和or有短路规则and连接的前后两个操作数如果前一个操作数的逻辑取值为假则会直接返回前一个操作数注意是返回原操作数而不是False也不是0这和C/C++中不一样如果前一个操作数的逻辑取值为真则会返回后一个操作数注意也是返回原操作数。同理or连接的前后两个操作如果前一个操作数的逻辑取值为真则会返回前一个操作数如果前一个操作数的逻辑取值为假则会返回后一个操作数
\item 空列表、空字典、空元组、空集合、空字符串、0的逻辑取值为假
\item 列表可以直接使用加号拼接;
\item 单个星号“*”表示按位置参数解包操作符,即把星号后面的操作数按顺序依次取出作为位置参数;
\item zip函数的功能是依次把传递给它的每个位置参数同时取出一个元素并进行组合不好描述建议看官方文档可以理解为矩阵转置以下是官方文档中的解释\\
\url{https://docs.python.org/zh-cn/3/library/functions.html#zip}
\item 如果将二维列表看成是矩阵的话zip函数和*操作符一起使用是真正的矩阵转置,之后[::-1]这样的切片操作表示将外层列表反向一个二维矩阵转置再反向后就相当于这个二维矩阵逆时针旋转了90度
\item matrix[0]表示这个矩阵的第一行matrix[1:]表示这个矩阵去掉第一行后的部分所以将矩阵去掉第一行的部分逆时针旋转90度再去掉第一行再逆时针旋转90度不断重复这样的操作就可以顺时针遍历矩阵中的元素
\item \_\_import\_\_可以导入模块并返回模块sys.stdin是标准输入sys.stdin.readlines()是读取标准输入并按行存储之后使用列表解析式对每一行line.split()表示按空白字符分割,之后返回的就是一个二维列表;
\item “:=”是赋值表达式会将表达式右端赋值给左端并返回表达式右端的值相当于C/C++中的“=”;
\item f"..."是格式化字符串字面值,参考官方文档:\\
\url{https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#formatted-string-literals}
\item\_”存储最后一次求值的结果,也可以用来命名无需使用的变量,参考官方文档:\\
\url{https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#reserved-classes-of-identifiers}\\
这里使用是为了防止在Jupyter等交互式解释器中运行此段代码时Jupyter自动返回最后一次求值的结果。
\end{enumerate}
\myitem{附件}{
\itemsep 5em
\item 给你一个 m 行 n 列的矩阵 matrix请按照顺时针螺旋顺序返回矩
阵中的所有元素。
\inputminted[linenos=true, breaklines=true]{python3}{../Python/第四章作业4.1.py}
\item 给定一个字符串,输出所有长度至少为 2 的回文子串。回文子串即从左
往右输出和从右往左输出结果是一样的字符串比如abba
cccdeedccc 都是回文字符串。
\inputminted[linenos=true, breaklines=true]{python3}{../Python/第四章作业4.2.py}
}
\end{enumerate}
\end{document}