python复习

2023-11-03

python复习

文章目录

一、Python基础笔试题

1、什么是变量?

  • 1.1 什么是变量:

变量是一种类似"容器"的逻辑概念,用来存储值,比如定义一个整型变量 ,那么这个变量存储的是整数类型的值。那么,为什么变量可以存储值呢?因为变量对应的是一段内存空间,变量存储值,是指将值存储在变量所对应的内存空间中。

  • 1.2 python中的变量:

我们通常使用的Python是CPython, CPython中的变量是一个存储内存地址的容器,将值或变量赋值给其它变量,是指将值的内存地址或变量存储的内存地址,再拷贝到其它变量中。分析下面的代码,加深对Python变量的理解:

# 定义变量number,指向的值为1
number = 1
# 在CPython中,通过id来获取数据对象的内存地址
if id(1) == id(number):
	print("值1的内存地址与变量number存储的内存地址相等")

2、 python和CPython是什么关系?

首先得理解Python是一种解释型的编程语言。一类编程语言有其特定的语法规则 ,数据类型,控制结构。我们按照编程语言的语法规范来编写代码,但是这些代码不能被计算机识别。

为了让编写的代码可以被计算机识别并运行,需要借助一种"翻译器",该翻译器将我们编写的代码翻译成可以被计算机执行的机器指令。

在计算机中有两种类型的"翻译器",一种翻译器直接将代码转译成机器指令,这种翻译器叫做编译器。另一种翻译器需要先将代码翻译成中间代码,然后再对中间代码逐条的解释执行,这种翻译器叫做解释器。

所谓的解释执行,就是将中间代码再转译成机器指令,然后再执行。

Python之所以是解释型的编程语言,是因为它是通过解释器来解释执行的。而CPython就是这样的一种解释器,这种解释器是用另外一种编程语言-C语言实现的解释器 。我们通常使用的Python,如果没有特殊说明,指的都是CPython。

Python的解释器实现中,除了CPython,还有Jython等其它解释器, Jython是使用java编程语言实现的Python解释器。

3、 如何生成一个整数序列?

Python提供了一个内置的range类型,可以用来生成整数序列。range类型基本用法:

range(start, stop[, step])

参数start与参数stop用来构造整数序列的一个左闭右开区间**[start, stop),**表示整数序列从start开始,但不包括stop。假设start的值为0, stop的值为5,那么该左闭右开区间为[0, 5), range(0, 5)对应的整数序列为:

0,1,2,3,4

step是可选的参数,所谓可选参数,即可传或可不传,用来表示相邻数字间的步长,比如步长为2,那么起始数字为0,下一个数字就为0+2,也就是2,以此类推。继续以左闭右开区间[0, 5)为例,假设步长为2,则range(0, 5, 2)对应的整数序列为:

0, 0+2, 0+2+2

在只给range类型传递一个参数时,构造的是从0到该参数的一个正向区间。例如传递参数值5时,构造的正向区间为[0, 5),传递的参数值小于等于0时,不会生成任何整数。给range类型传递的步长为负数时,可以生成一个降序排序的整数序列,此时start的值必须大于stop的值。

对于range类型生成的整数序列,可以在for循环中进行遍历:
Python

for number in range(5, 0, -1):
  print(number)

4、表达式与语句的主要区别是什么?

语句"在计算机编程语言中,表示"程序"的一个指令执行过程。比如if语句,根据条件表达式的值,来判断是否执行相应的操作。for语句,遍历表达式列表中的所有元素。一个程序至少由一个语句构成,计算机程序的本质是让计算机执行某种指令。

而"表达式"代表对计算过程的一种描述,通常有输出。比如算数表达式,描述的是一个算数运算,输出为算数运算后的结果。表达式不能执行,但语句一定会执行。我们可以说计算一个表达式的值,执行一个语句,但不会说**"执行一个表达式,计算一个语句 "** 。

编程语言中的语句需要借助表达式的值,来执行相应的计算逻辑。分析下面的赋值语句,加深对语句和表达式的理解:

Python

love = 201314

201314表达的是一个整数,它是一个表达式。Python解释器在解析到赋值运算符"="时,会计算赋值运算符右边的表达式,然后将表达式的值赋值给运算符左边的变量。

CPython中的赋值过程,执行的操作为将值的内存地址赋值给变量。

更典型的是if语句,根据条件表达式的值,来判断是否执行相应的操作:

Python

# 逝去的爱

love = 201314

# 判断对你的爱,是否一生一世
if love >= 201314:
    print("love forever")
else:
    print("the lost love")

5、 Python的基础数据类型有哪些?

Python的基础数据类型,可分为简单数据类型和复合数据类型。简单数据类型是不可再分割的原子数据类型,Python中的简单数据类型有:整型,浮点类型,布尔类型。复合数据类型由简单数据类型或其它复合数据类型组合而成,是一种可以存储其它数据类型的数据集合,在Python中也被成为容器类数据类型。Python中的复合数据类型有:字符串,列表,元组,字典,集合

通过内置的type,可以输出数据类型的类型名:

Python

# 在type的输出中,class后面用引号括住的即为数据类型的类型名
class_name = type(2020)
# class_name的输出为<class 'int'>,int即为整型的类型名

class_name = type(20.1314)
# class_name的输出为<class 'float'>,float即为浮点类型的类型名

class_name = type(True)
# class_name的输出为<class 'bool'>,bool即为布尔类型的类型名

class_name = type('Python')
# class_name的输出为<class 'str'>,str即为字符串类型的类型名

class_name = type([1,2,3])
# class_name的输出为<class 'list'>,list即为列表类型的类型名
 
class_name = type((1,2,3))
# class_name的输出为<class 'tuple'>,tuple即为元组类型的类型名

class_name = type({0: 'ok', 1: 'invalid parameters'})
# class_name的输出为<class 'dict'>,dict即为字典类型的类型名

class_name = type({'Python', 'C++', 'Java'})
# class_name的输出为<class 'set'>,set即为集合类型的类型名

6、在Python中如何进行代码缩进?

如何进行代码缩进?

首先理解什么是代码缩进。编程语言中的代码缩进是指调整代码与父级边缘的水平距离,这个距离用空格数来进行度量。例如缩进四个空格,指的是与父级边缘水平相距四个空格。例如下面包含缩进的代码:

# 与父级边缘水平相距0个空格

Python

number=1
if number > 0:
    # 与父级边缘水平相距四个空格, print函数与上文的if语句是子级和父级的关系
    print(number)

Python中的代码缩进规则:

(1) 全局对象或语句块中的首行没有缩进,必须顶格

(2) 同层次的语句须包含相同缩进的空格数

(3) 子级层次的语句与父级层次的语句必须有缩进

(4) 单行注释可以随意缩进,多行注释与同层次的代码保持相同的缩进

现在通过一则实例来讲解Python中的代码缩进规则:

Python

# state是一个全局变量,与首行没有缩进,必须顶格
state = 0
# if语句块的首行没有缩进,必须顶格
if state == 0:
    """
    (1) 冒号下方的代码属于子级层次,必须有缩进
    (2) 多行注释与同层次的代码保持相同的缩进
    """   
    print("开心")
    
# else语句块的首行没有缩进,必须顶格
else:
    # 冒号下方的代码属于子级层次,必须有缩进
    # 与父级else语句所在的边缘水平相距四个空格
    print("不开心")
    
    # 与上面的print处于同一层级,必须包含相同缩进的空格数
    print("unhappy")

7、如何输出Python中的所有关键字?

首先理解什么是关键字。关键字也称保留字,其字面意思为保留给Python使用的特殊标识符。例如布尔值True就是一个关键字,表示逻辑值中的真值。Python中的关键字有其特殊用途,当我们使用关键字来进行命名时,会导致冲突,所以Python解释器在解析执行对关键字进行赋值的操作时,会抛出语法错误的异常信息。

输出当前Python版本的所有关键字,一共有两种方法,在交互模式中直接执行help(“keywords”):

>>> help(“keywords”)

Here is a list of the Python keywords. Enter any keyword to get more help.

False class from or

None continue global pass

True def if raise

and del import return

as elif in try

assert else is while

async except lambda with

await finally nonlocal yield

break for not

直接访问keyword模块中的kwlist属性,输出的是一个列表,列表包含当前版本中的所有关键字:

Python

# 导入keyword模块
import keyword

# 判断True是否为一个关键字
if str(True) in keyword.kwlist:
    print("True 是一个关键字")

8、Python交互模式的主要用途有哪些?

Python交互模式的主要用途为代码调试,以及查找帮助信息。在交互模式中进行调试,比如快速验证模块是否安装成功,对函数的功能进行测试,等等。

9、python中的控制结构有哪些?

Python中的控制结构有:条件控制,循环控制,转向控制。使用if,elif,else语句来定义条件控制,使用for,while语句来定义循环控制,使用break, continue, return语句来定义转向控制。

条件控制的代码实例:

Python

x = 1
y = -1
if x+y > 0:
    # 在if语句中判断表达式值的真假,值为真,就执行冒号下面的代码 
    print("x+y > 0")
elif x+y == 0:
    # if语句中的条件不成立的情况下会继续判断elif语句中的条件是否成立
    print("x+y == 0")
else: 
    # 在if和elif语句的条件都不成立的情况下执行else语句中的代码
    print("x+y < 0")

循环控制的代码实例:

Python

for number in 1,2,3,4,5:
    print(number)
    # 如果当前number指向的值大于3,就执行break退出循环 
    if number > 3:
        break
    else:
        # 如果for循环非正常退出就不会执行else语句下面的代码
        print("for循环正常退出")

转向控制的代码实例:

Python

sum_of_numbers = 0
for number in range(2100):
    for _ in range(2, number)
        if number % _ == 0:
            # %是求余运算符,如果当前number与2的余数为0,那么就退出循环
            break 
    else:
        # 循环正常退出,说明当前number为质数
        sum_of_numbers = sum_of_numbers + _

10、什么是三元表达式?

三元表达式也称为三元运算。三元运算是软件编程中的一种固定格式,在Python中,通过if语句来实现三元运算。

三元运算的语法格式:

expression1 if expression else expression2

三元运算的执行逻辑为:如果if语句中的表达式的值为真,就返回表达式expression1的值,否则返回表达式expression2的值。使用三元运算在特定场景下可以简化if语句的使用。未使用三元运算符的代码实例:

Python

is_happy = True
if is_happy:
    feeling = "so happy"
else:
    feeling = "so unhappy"

使用三元运算的代码实例:

Python

is_happy = True
feeling = "so happy" if is_happy else "so unhappy"

这两则代码实例实现的是同样的效果,但使用三元运算的代码看起来更简洁。在条件分支比较多的情况下,不适合使用三元运算,读者需根据实际中的情况来进行使用。

使用三元运算来计算最大值:

Python

# 假设变量x,y,z已定义,变量指向的为整型值或浮点值
max = x if x > y else y
max = max if max > z else z

11、循环结构中的else语句是多余的吗?

循环控制结构中的else语句,它表达的是循环正常迭代的一种延续(收尾操作),如果循环被中断执行,那意味着打破了这种正常迭代的状态。比如遍历从1到100之间的所有自然数,在正常情况下,需要迭代100次。Python是一种简单,优雅的编程语言,在循环结构中设计这样一种else结构,可以让代码的逻辑结构更加清晰。以下为判断是否为合数的一段关键代码

Python

is_composite_number = True
for _ in range(2, 100):
    if number % _ == 0:
        # 如果余数为0,说明为合数,执行break退出循环
        break
else:
    # 循环正常退出,说明不为合数,逻辑很清晰  
    is_composite_number = False

如果没有这样的else结构,那么需要将记录状态的flag变量耦合到循环体中:

Python

is_composite_number = False
for _ in range(2, 100):
    if number % _ == 0:
        # 如果余数为0,说明为合数,执行break退出循环
        is_composite_number = True
        break

12、break与continue的区别是什么?

break语句与continue语句都只能用于循环结构。break语句用来终止循环,是循环的终结者,只要在循环结构中执行了break语句,就会退出当前的循环结构。而continue语句用来结束本次的代码执行。举个简单的例子,在一个循环结构中,会重复执行5次相同的代码。使用for循环执行5次的代码实例:

Python

value = 0

# 重复执行5次
for _ in range(5):
    value += _ + _

在for循环中加一个条件判断,如果value大于5,就执行break:

Python

value = 0

# 重复执行5次
for _ in range(5):
    if value > 5:
        # 执行break退出当前的for循环
        break
        
    value += _ + _

执行break以后,会退出当前的循环结构,而continue只会结束本次的代码执行:

Python

value = 0

# 重复执行5次
for _ in range(5):

    if _ % 2 == 0:
        # 如果为偶数,则执行continue, 结束本次的代码执行
        continue
        
    # 执行continue以后,不会再执行cotinue语句下面的代码,但会继续执行下一次循环
    value += _ + _

13、哪些值会转换为布尔类型中的False?

首先得理解布尔类型,布尔类型用来表示逻辑上的真或假,布尔类型适用于进行逻辑判断的应用场景。Python中的整型0值,浮点类型的0值,空字符串,空列表,空元祖,空字典,空集合等空类型,以及None类型,都会转换为布尔类型中的False值。

代码实例:

Python

# if语句下的print代码不会执行,if语句中的表达式会转换为False值
if 0 or 0.0 or "" or [] or () or {} or set():
    print("Nothing!")

14、如何理解Python中的None类型?

Python中的None对象是一个NoneType类型, 我们可以在交互模式中执行type(None)来输出None的类型名:

>>> type(None)

<class ‘NoneType’>

直接通过NoneType来构造一个None对象,会抛出了NameError的异常:

>>> none = NoneType()

Traceback (most recent call last):

File “”, line 1, in

NameError: name ‘NoneType’ is not defined

在Python的官方文档中查找资料可知,NoneType并没有在Python/C API中进行公开,所以使用NoneType时会抛出NoneType未定义的错误。Python中的None对象是一个单例,仅用来测试对象的标识值。单例对象在进程的生命周期中只存在一个唯一的实例。

CPython中的对象标识值即为内存地址

由于None对象是单例,所以None对象的标识值仅与None对象的标识值相等。在Python中使用is操作符来判断标识值是否相等。

代码实例:

Python

# None对象的标识值仅与None对象的标识值相等,if语句下面的代码永远不会执行
if False is None:
    print("never happen!")
    
future_of_dawdler = None
if future_of_dawdle is None:
    # 懒人前程一片黯淡
    print("just be diligent!!!")

15、什么是操作符与操作数?

操作符与操作数,均可以从其字面意思进行理解。操作符是指****进行数据运算的符号,比如加法计算中的+是加法操作符,减法计算中的-是减法运算符。操作数是指参与数据运算的数。按操作数与操作符之间的相对位置关系,操作数可分为左操作数与右操作数。

代码实例:

Python

result = 1 + 2

在上文代码中定义了一个result变量,然后将算数表达式1+2的结果的地址赋值给变量result。在算数表达式1+2中,操作符为+,位于+号左边的1为左操作数,位于+号右边的2为右操作数。

Python中的每一种运算都有其对应的操作符,比如赋值运算中的=号,逻辑运算中的and,or, not操作符,关系运算中的>,<,==操作符。

16、分析操作符is与==的区别与联系

is操作符用来判断对象的标识值是否相等,在CPython中,对象的标识值即为对象的内存地址。==是关系运算符,用来判断对象的值是否相等。Python中的内置函数id,用来获取对象的标识值,通过内置函数id,可以实现is操作符的功能。

代码实例:

Python

fighter = "chunli"
chunli = "chunli"

# 使用is操作符判断fighter对象与chunli对象的标识值是否相等
if fighter is chunli:
    print("fighter is chunli")
    
#  等价于下面的代码:
if id(fighter) == id(chunli):
    print("fighter is chunli")

操作符is与==的联系

is操作符用来比较标识值是否相等,是==运算的一种特殊情况。

17、如何理解字符集与字符编码?

字符集与字符编码的概念其实很简单,没这么复杂。字符集,顾名思义,就是一个字符的集合,比如将中国的所有汉字作为一个字符集,将所有拉丁字母作为一个字符集。而字符编码是指将字符集里面的字符用一个唯一的数字编码来表示。为什么需要用数字编码来表示一个字符呢?因为计算机只能处理二进制。我们如果需要让计算机处理字符,那么必须将它转换为二进制。举个简单的例子,将字符"我"用二进制00来进行表示,将字符"爱"用二进制01来进行表示,将字符"你"用二进制10来进行表示:

字符 字符编码
00
01
10

Unicode编码

Python3中的字符串采用Unicode进行编码。Unicode既是一种字符集,也是一种编码规范。Unicode字符集囊括了ASCII字符,汉字,希腊字母、俄文字母等世界各国,各地区的文字字符。Unicode编码通常采用固定的两个字节来对字符进行编码,这种固定编码的方式是有局限的,比如ASCII字符只需要使用一个字节,使用两个字节来进行编码就带来了存储空间的浪费。为优化存储空间,以及提升对unicode字符的处理性能,在Unicode编码的基础上,又应运而生了UTF-8编码,UTF-16编码,UTF-32等编码,这几类都是变长编码。在UTF-8编码中,ASCII字符仍然使用1个字节来进行编码和存储,其它字符至少使用2个字节来进行编码和存储。

在Python中通过ord函数可以获取某一个字符的十进制编码:

Python

>>> ord('我')
25105
>>> ord('爱')
29233
>>> ord('你')
20320

通过chr函数可以将字符的数字编码转换为特定的字符:

Python

>>> chr(25105)
'我'
>>> ord(29233)
'爱'
>>> ord(20320)
'你'

二、基础算法题

2.1、比较两个字符串的大小

算法思路

(1) 计算字符串str1与str2的最短长度,假设为n, 只需在循环中遍历n次。

(2) 在循环中逐字符比较,以字符的先后大小关系确定字符串str1与字符串str2的大小关系

(3) 循环正常退出,再以字符串的长度大小来确定字符串的大小关系

代码实现

Python

def strcmp(str1,  str2):
    """
    :param str1: 参与比较的字符串
    :param str2: 参与比较的字符串
    :return: 0 表示str1与str2相等,1表示大于, -1则表示小于
    """
    length_of_str1, length_of_str2 = len(str1), len(str2)
    shortest_length = length_of_str1 if length_of_str1 <= length_of_str2 else  length_of_str2
    ret = 0
    index = 0

    while index < shortest_length:
        if str1[index] > str2[index]:
            return 1
        if str1[index] < str2[index]:
            return -1
        index += 1
    else:
        if length_of_str1 > length_of_str2:
            ret = 1
        elif length_of_str1 < length_of_str2:
            ret = -1
    return ret
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python复习 的相关文章

随机推荐

  • C++基本使用--菱形继承(多继承)

    菱形继承 多继承 多继承 菱形继承 虚继承virtual 多继承 include
  • 犀牛高程点建地形gh插件电池组_Grasshopper快速生成地形

    简述 根据CAD高程点及高程信息在Grasshopper中快速生成地形模型 所需文件 CAD地形文件 所需软件 Rhino Grasshopper 插件 Human Weaverbird Meshtools Meshedit 可自行前往Fo
  • 计算机网络学习笔记:第四章

    计算机网络学习笔记 第四章 学习书籍 计算机网络 自顶向下方法 第四章 网络层 数据平面 其他章节请参阅 计算机网络 自顶向下方法 第一章 计算机网络和因特网 计算机网络 自顶向下方法 第二章 应用层 计算机网络 自顶向下方法 第三章 运输
  • 区块链技术加密算法为什么不可篡改

    区块链采用密码学的方法来保证已有数据不可能被篡改 这个是误解最多的部分 因为很多人一提到区块链就只觉得是这个 诚然 这部分很重要 而且确实区块链也因此得名 但这只是区块链的定义的一部分 这个部分的两个核心要点是 1 密码学哈希函数 2 非对
  • SpringBoot关键面试题

    什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置 properties或yml文件 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven
  • 如何使用 scp 将文件夹从远程复制到本地?

    问 如何使用 scp 将文件夹从远程复制到本地主机 我使用 ssh 登录到我的服务器 然后 我想将远程文件夹 foo 复制到本地 home user Desktop 我如何实现这一目标 答1 huntsbot com 高效赚钱 自由工作 s
  • Qt中关于emit和moc_*.cpp的自动生成

    关于Qt中的emit 函数 直接查看emit的定义 define emit 可以发现emit仅仅是个宏定义符号 编译器宏替换后就是个 空白 根本就不会编译它 所以代码里完全可以去掉这个符号 反之也可以在任何代码前加上这个符号 如这行代码em
  • C语言详解——枚举类型

    在程序中 可能需要为某些整数定义一个别名 我们可以利用预处理指令 define来完成这项工作 您的代码可能是 define MON 1 define TUE 2 define WED 3 define THU 4 define FRI 5
  • 说一下反三角函数atan等的角度计算值,弧度制和角度制

    我们平时在进行数学计算是 往往会用到三角函数和反三角函数 最常用的反三角函数大概就是atan了 因为这个相当于给定两点之间直线的夹角了 1 正切函数图像 这时正切函数图像 高中的我们就应该知道 正切函数是周期函数 即同一个值 有很多角度值对
  • html 中shadow DOM 的使用

    什么是shadow DOM An important aspect of web components is encapsulation being able to keep the markup structure style and b
  • antV/g2的使用

    antV g2 特点 以数据驱动 安装 npm instal antv g2 使用 准备一个容器 div div 执行代码 1 引入 import
  • 如何使用C ++以编程方式在Word文档中使用目录?

    目录 TOC 是Word文档的重要组成部分 它提供了文档内容的概述 并允许您快速导航到所需的部分 您可能会遇到需要以编程方式从Word文档中添加 提取 更新或删除目录的情况 为此 本文将教您如何使用C 处理Word文件中的目录 让我们探索以
  • D. Permutation Restoration(优先队列+贪心)

    Problem D Codeforces include
  • 学习Flask之分页插件flask_bootstrap

    这次分页功能 主要是依靠 Flask Bootstrap 首先也是下载flask bootstrap pip install flask bootstrap 安装完后可以观察里面的文件夹 里面其实还有nav 导航 form 表单 pagin
  • linux内核调试环境的搭建(使用qemu)

    这里说明下 本人调试的内核版本是2 6 11 12 为什么去调试这么 古老 的版本 原因不多说了 你手头也许正拿着ULK3 而它针对的内核版本正是2 6 11 有比这更好的理由吗 而且这个版本不算旧 已不算新 我认为还算不错 想想当下还有如
  • 我的计算机管理里面没有家庭组,Win10控制面板没有家庭组怎么解决?

    我们经常在使用电脑的时候经常会用到家庭组这个功能 家庭组使用起来非常方便的功能 但是最近很多的用户们反映Win10家庭组功能在控制面板找不到了 这个问题我们要怎么解决呢 下面小编为大家带来详细的解决教程介绍 快来看看吧 Win10控制面板没
  • 七牛云 composer 文件上传、删除、请除缓存操作

    class QiniuUp extends ModelBasic private AccessKey private SecretKey private bucket private auth function construct pare
  • DBCP连接池参数

    DBCP连接池参数说明如下 1 maxActive 10 表示并发情况下最大可从连接池中获取的连接数 2 maxIdle 5 如果在并发时达到了maxActive 10 那么连接池就必须从数据库中获取10个连接来供应用程序使用 当应用程序关
  • [1187]win环境2026, SSL connection error: unknown error number

    先贴上详细的报错信息 PS D test orchard liang gt python manage py sqlmigrate app 0001 Traceback most recent call last File D Python
  • python复习

    python复习 文章目录 python复习 一 Python基础笔试题 1 什么是变量 2 python和CPython是什么关系 3 如何生成一个整数序列 4 表达式与语句的主要区别是什么 5 Python的基础数据类型有哪些 6 在P