Python3 学习中的问题

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()deldeldel、remove()、pop() 、clear()
修改和插入append,insert,+,extend不可修改dict[key]=valueadd,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)
参考文章
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值