0%

Python学习笔记——基础

不适合人类阅读的学习笔记

  • Python语句不需要分号分割,但是Python各语句严格按照缩进对其方式运行

  • 与C++一样,可以将一些非空,非零的值作为bool值的真,其余的为假

  • Python中以 #作为注释的开始,多行注释可以用三引号对。

环境


  • Python推荐使用jetbrain公司的pycharm

  • Python可以直接使用自带的IDE逐句执行,方便测试

基础


  • Python中不需要声明变量类型,编译器会根据赋值自动判别,但是作为程序的编写者,我们需要清楚某个变量究竟是什么类型的

  • Python中单独的下划线是特殊的变量,表示上一次运算的结果。

输出

  • 标准输出格式: print([输出1,输出2,....,输出n][,sep = 分隔符][,end = 结束符])

    默认以空格分割,换行符结尾

  • 各个输出之间以逗号间隔

  • print()函数不写参数即默认输出一个空行。在一批数据输出结束后,好的编程习惯是在末尾加上一个print(),使得输出美观。

  • Python的输出可以有运算在里面,例如:print(5 * '*') 则会打印出 *****

  • 在输出字符串时,可以在字符串的引号前加一个 r 使得转义字符 \ 失效。

输入

  • 相比较于java,Python的输入可以说是非常灵活而且简便了

    1
    a = input()   #若调用此函数,就算输入的是数字,a的数据类型仍然为str,Python默认将命令行读入的数据作为str类型,因为str是万能的~
  • 但是,对于如下的情况:

    1
    2
    a =eval(input())    #eval() 函数用来执行一个字符串表达式,并返回表达式的值.例如 eval('2 * 3')返回 6
    #此时只能输入数字,且a是整型还是浮点型由输入数据的特征决定
  • 如果想要同时为多个变量赋值,则只能使用eval()函数了

    1
    x,y = eval(input())  #输入时以逗号间隔
  • 对于eval()函数的使用,一定要确保参数去掉引号之后的值是有意义的

一些数据类型

综述一些注意点

  • 序列的概念:序列是一个排序的项目 容器,按 非负整数索引。Python提供的内置序列包包括字符串,元组和列表。(序列就是可以通过索引或者切片访问的容器)

  • 所有的序列都是可以迭代的,即可以作为循环的迭代器。

  • 内置函数len()可以将任意一个容器作为参数,并返回该容器中元素的数量

  • 内置函数min()max()以一个可以比较的非空容器作为参数,返回其最小最大值。(如果给的参数不止一个,则返回最大或最小的 参数)

  • 对于字典使用min()max()则会返回字典最大或最小的

  • 关键字 in 可以检查某个元素是否在一个容器中。例如k in D(D是一个字典)则检查k是不是D当中的一个关键字。

  • reversed(seq)函数: seq代表一个可迭代对象,比如列表

    1
    2
    3
    4
    5
    >>> a = [1,2,3,4,5]
    >>> b = reversed(a) #此时b为一个迭代器
    >>> b1 = list(b) #将这个迭代器转化为列表
    >>> b1
    >>> [5,4,3,2,1]
  • sum()函数:

    1
    2
    sum(seq, start = m)   #sum()有两个参数,第二个为可选参数
    # 返回可迭代对象中的所有项目的和再加上start的值

一些基础数据类型的注意点

  • 输入一个数,获取其各个位的数值的方法:注意Python的整除符号与别的编程语言不同

    1
    2
    3
    4
    假设 x = 123
    个位 = x % 10
    十位 = x // 10 % 10 (注意,Python与其他编程语言的整除符号不同,比如C++就是 '/' 即表示整除,而Python为 '//')
    百位 = x //100 % 10
  • 复数:

    1
    2
    3
    4
    5
    a = complex(2,3)
    b = 1 + 2j
    c = 3 - 5j
    #a,b,c都是复数
    #要获取复数的实部和虚部,可使用例如:a.real(a的实部), a.imag(a的虚部),结果都是浮点型
  • 45e15表示45*10^15,这是科学计数法的写法

  • 要判断两个浮点数是否相等,如果不确定精度的情况下,最好不要使用==来判断。因为可能存在看起来一样的数实际上因为精度不同而被判定为不等。解决的方法是abs(x - y) < 1.0e-15,即是用两数之差的绝对值小于一个很小的数,即可判断两数近似相等。

  • 关于Python中的bool类型,与C++类似,非零数或非空容器为真,0,None和空容器为假

List

Python中list里的元素允许是不同的数据类型,这一点完全打破了C和C++体系的传统,所以平常编写程序不推荐这样做。list中也允许某个元素是list或者元组什么的。

  • 例: classmates = ["Mike","Davaid"]

  • len()函数可以获得list中的元素个数

  • 与其他编程语言不同的是,Python的list下标允许负数的index,例如: classmates[-1]就表示这个list的最后一个元素,以此类推。

  • append()方法:在list末尾末尾添加元素:classmates.append("Alex")

  • 把元素插入到指定的位置,比如索引号为1的位置:classmates.insert(1, 'Jack') 这样Jack的位置索引即为1,原来索引为1的元素及后面的元素依次后移。

  • 删除list末尾的元素,使用.pop()方法,要删除指定位置的元素,使用.pop(i)的方法,i为元素的索引。

tuple

  • 元组与;list非常类似,但是tuple一经初始化其内容便不允许修改,不允许插入和删除等操作。

  • 元组一般用来保存那些不允许修改的数据以保障安全。

  • 但是如果tuple中某个元素是list时,这个list中的元素还是可以修改的。

disk

disk(字典)是一种键-值对类型的数据结构,在其他语言中会被称为map。dict的key必须为不可变的量

注意,Python中的dick类型是以hash方式存储的,读取速度非常快。

  • 将数据添加进dick的方式,除了初始化时设定之外,还可以直接给一个键赋值的方式添加,例如:

    1
    2
    d = {'A': 95, 'B': 75, 'C': 85} #初始化添加元素
    d['E'] = 100 #直接赋值添加元素
  • 判断一个key是否存在的方法:

  1. "Thomas" in d #若不存在会返回false
  2. d.get("Thomas") #若不存在返回null
  3. d.get("Thomas",-1) #自己指定返回的值

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

  • 通过.add(key)的方法添加元素。

  • 通过.remove(key)的方法删除元素。

  • 符号 &| 分别表示集合的交和并

  • list的简单的去重:

    1
    2
    3
    4
    5
    6
    7
    >>> a = [1,2,2,3,4,5,5,6,1]
    >>> b= set(a)
    >>> b
    >>>{1,2,3,4,5,6}
    >>>a =list(b)
    >>>a
    >>>[1,2,3,4,5,6]

条件判断

  • Python的if判断语句的判断条件部分不需要用括号括起来,这与其他的大多数语言均不同

  • 格式:

    1
    2
    3
    4
    5
    6
    7
    8
    if <条件判断1>:
    <执行1>
    elif <条件判断2>:
    <执行2>
    elif <条件判断3>:
    <执行3>
    else:
    <执行4>
  • 例:

    1
    2
    3
    4
    5
    6
    7
    age = 20
    if age >= 6 and age <= 30: #多条件判断用 and 链接
    print('teenager')
    elif not (age >= 18): #not相当于 非,后面的内容用括号括起来
    print('adult')
    else:
    print('kid')
  • 与input结合(涉及数据类型转换):

    1
    2
    3
    4
    5
    6
    7
    s = input('birth: ')
    birth = int(s) #如果没有这句转换会报错,因为input进来的是str,不能直接和int比较,因此要先转换为int再比较。
    #但是如果此处的输入不是一个数值类型,int函数无法强制转化便会报错。
    if birth < 2000:
    print('00前')
    else:
    print('00后')
  • 利用运算符优先级: z = x if x > y else y

循环

  • 例(求和):

    1
    2
    3
    for x in [1,2,3,4,5,6]:
    sum = sum + x
    print(sum)
  • range()函数: 生成从0 - 输入数值-1 的一个迭代器,可用作循环条件。例list(range(5))的结果为 [0,1,2,3,4]

  • 例求 1- 100 的和:

    1
    2
    3
    4
    sum = 0
    for x in range(101):
    sum = sum + x
    print(sum)
  • while循环示例:(素数的判断)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import math
    m = int(input("Please enter a num: ")) #待判断的数 m
    i,j = 2, int(math.sqrt(m)) #只需要计算 2 到 根号m 范围内是否有m的因数即可,后面的计算均为重复计算
    flag = 1 #素数标志
    while i < j and flag == 1:
    if m % 1 == 0
    flag = 0 #不是素数的标志
    i += 1
    if flag and m > 1: #素数必须大于1
    print(m, "是素数")
    else:
    print(m, "不是素数")
  • while和for语句使用拖尾的else子句

    1
    2
    3
    4
    for ... :
    ...
    ...
    else ... #注意这个else是与for对齐的

    这种写法的else子句块会在循环 正常终止时执行。意思就是,如果循环中的break语句生效而导致的循环终止,是不会触发这个else子句的执行的。因此这种写法可以 优雅地判断一个循环是正常结束还是break掉了

  • 在循环中使用print()输出时,注意Print之后是否正确地结束循环或者进入下一个输出,否则可能出现重复输出大量重复数据的可能。

  • 求两个数的最大公约数(辗转相除法):

    1
    2
    3
    4
    5
    6
    7
    8
    a,b = eval(input("请输入两个整数: "))
    if a > b : a,b = b,a #Python中可以简便地交换两个变量的值
    r = a % b
    while r != 0
    a,b = b,r
    r = a % b
    print("最大公约数是:",b)
    print()
  • 输出[100,1000]以内的所有素数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import math
    n = 0
    for m in range(101,1000,2) #直接去掉100和1000,这两个肯定不是素数
    i,j = 2, int(math.sqrt(m))
    while i <= j:
    if not(m % j): #如果 m % j == 0 就是找到因数了,直接退出这一次循环,进入下一个循环
    break
    else:
    i = i + 1
    else:
    print(m, end = " ")
    n += 1
    if n % 10 == 0: print("\n") #每输出10个数就换行
    print()

函数


函数定义的格式

1
2
3
def 函数名([参数1,参数2,参数3...]):   #参数没有参数类型,如果要设置参数的默认值则要满足从右向左的原则
[函数体]
[return [返回值]] #没有写return或者直接写return都是返回None
  • Python中可以让函数返回一个有多个元素的tuple来实现返回多个值的要求。

一些注意点


  • abs() 函数的返回值与参数一致,而fabs() 的返回值均为浮点型

  • Python支持连续的不等式,例如a > b > c 等价于 a > b && b > c


最后更新于2018.4.28