1.表达式运算符优先级,如果所有的操作符优先级相同该怎么计算优先级?
如果表达式的操作符有相同的优先级,则运算规则是从左到右计算。
比如:1-2+55-88
注意:有一个特殊的例子,如下这个是从右到左结合计算
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 2**2**2**2
65536
>>>
2.Python 变量和其他语言中的变量区别
- Python中变量是一个标识符,并没有特定的类型。变量好比人们通信的地址,不管搬家到何处,都可以通过地址联系到地址的所有者。
- 而其他语言的变量是有特定类型,且需要再使用之前先声明类型,然后才能赋值和初始化。变量的值必须和变量的类型相符合,否则报错。
3.列表、元组、字典、集合它们的区别和联系
比较点 | 列表 | 元组 | 字典 | 集合 |
---|---|---|---|---|
是否可变 | 可变 | 不可变 | 可变 | 可变 |
是否有序 | 有序 | 有序 | 无序 | 无序 |
元素是否唯一 | 不唯一,可重复 | 不唯一,可重复 | 键是唯一的,值可以重复 | 是唯一的 |
创建方式 | [] | () | {key:value} | {} |
删除方式 | del、remove()、pop() | del | del | del、remove()、pop() 、clear() |
修改和插入 | append,insert,+,extend | 不可修改 | dict[key]=value | add,update, |
访问和遍历 | 索引访问 | 索引访问 | 键访问 | |
推导式 | [i for i in list] | (i for i in tuple) | ||
切片 | 支持切片 | 支持切片 | 不支持切片 | 不支持切片 |
索引 | 支持索引 | 支持索引 | 不支持索引 | 不支持索引 |
+ 和 * 运算 | 支持 | 支持 | 不支持 | 不支持 |
其他 | 不能作为字典的键 | 可以作为字典的键 |
集合不支持切片
>>> thisset={1,2,3,4,5}
>>> print(thisset)
{1, 2, 3, 4, 5}
>>> ss=thisset[1:]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
ss=thisset[1:]
TypeError: 'set' object is not subscriptable
4.编写程序判断输入的一个整数是否是阿姆斯特朗数
number = input("请输入一个整数: ")
# 此处可以对输入做合法性验证
n = len(number)
sum = 0
for i in number:
sum += int(i)**n
if sum == int(number):
print(number, "is a amrstrong number.")
else:
print(number, "is not a amrstrong number.")
5.理解什么是闭包
- 闭包的定义:如果在一个内部函数里对外部函数(不是在全局作用域)的变量进行引用,内部函数就被认为是闭包。
- 使用函数的自我调用,返回一个匿名的函数,由于嵌套函数可以访问上一次的函数作用域的变量,受到匿名函数的作用域保护,这时相当于函数拥有了自己的私有变量,这种调用函数的方式就称之为函数的闭包。
- 返回闭包时,返回函数不要引用任何循环变量或后续会发生变化的变量,否则很容易出现你意想不到的问题。
6.理解递归函数
- 简单理解就是函数中调用自身的函数。
- 解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果一样,把循环看成一种特殊尾递归函数也可以。
7.理解匿名函数
- 匿名函数有3个规则要记住:
(1)一般有一行表达式,必须有返回值。
(2)不能有return。
(3)可以没有参数,也可以有一个或多个参数。 - 当要需要将函数作为返回值,但是这个函数又非常简单,且只使用一次,这时匿名函数就派上用场了。
简单示例:
lambda x: x * x
8.快速排序算法的程序实现
- 快速排序(Quicksort)是对冒泡排序的一种改进。
- 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
以下代码是菜鸟学院的代码(非原创):
def partition(arr, low, high):
i = (low-1) # 最小元素索引
pivot = arr[high]
for j in range(low, high):
# 当前元素小于或等于 pivot
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
# 快速排序函数
def quickSort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
arr = [10, 7, 8, 9, 1, 5, 6]
n = len(arr)
quickSort(arr, 0, n-1)
print("排序后的数组:")
for i in range(n):
print("%d" % arr[i])
9.阅读伪代码并使用Python实现
插入排序算法的伪代码如下:
使用Python实现
def insertSort(list):
for j in range(1, len(list)):
key = list[j]
i = j-1
while i >= 0 and list[i] > key:
list[i+1] = list[i]
i -= 1
list[i+1] = key
list = [5, 2, 4, 6, 1, 3]
insertSort(list)
print(list)
关于伪代码的语法规则:
- 赋值运算
使用 ← 表示
示例:
i ← i-1
- 使用缩进表示分支结构
- 注释
使用 “播放”按钮符号表示,一个水平方向的三角形
- 数组连续...表示
A[1…j]表示含元素A[1], A[2], … , A[j]的子数组;
数组的下标是从1开始的,要注意哦。
- 不区分变量大小写
- 过程使用 call 来调用
示例:
call CalValue(x,y)