Python学习笔记二

Posted 老梧桐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习笔记二相关的知识,希望对你有一定的参考价值。

参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

一、输入和输出

通过“print()"函数可以向屏幕输出指定文字:

print("Hello World!")

这里通过双引号加入要输出的字符串,也可以通过单引号。该函数也接受多个字符串,之间用逗号”,"分隔,要注意的是这里解释器遇到分隔符逗号时会自动输出一个空格:

print("Hello","World","!")

通过input()函数可以让用户输入字符串:

name=input()

当上行代码运行后,系统就等待用户的输入了,输入完成后按回车键结束输入。输入的内容被存储到name这个变量中了。

一次完整、友好的输入输出程序如下:

print("Please enter your name:")
name = input()
print("Hello,",name)

上述的提示信息也可以直接用input()实现,input()的参数会先被系统打印出来,然后再等待用户输入:

name = input("Please enter your name: ")
print("Hello,",name)

二、Python基础

*Python程序是大小写敏感的;

*以“#"开头的语句是注释;

*作为良好的编程习惯,缩进建议使用4个空格符;

(一)数据类型

Python中的数据类型包括:整数、浮点数、字符串、布尔值、空值。

*字符串:通过单引号或双引号括起来的任意文本即是字符串,如"abc"、"k"、”123“等。某些情况下需要通过转义字符\来标识,对于字符串I‘m "OK"!,在Python中需要如下表示:‘I\‘m \"OK\"‘。

转义字符中\n表示换行,\t表示制表符,\\表示字符‘\‘本身。有一种情况Python可以通过r‘‘(字母r+两个单引号)表示其内部的字符串默认不进行转义:

print(\\\t\\)
#输出\         \
print(r\\\t\\)
#输出\\\t\\

*空值在Python中用None表示,并不能理解为0。

*变量:对于变量的数据类型不固定的程序语言称为动态语言,与之对应的是静态语言。Python即是一种动态语言,所以在实际使用中,并不需要声明这个过程就可以直接使用,在赋值后也可以再次赋予不同类型的值:

k=10
k="you"
k=True

对于下列代码的理解:

a="ABC"
#1、内存中创建一个“ABC”的字符串
#2、内存中创建一个名为a的变量,并把他指向上述“ABC"
b=a
#把a的指向赋值给b,即指向上述”ABC"
a="XYZ"
#1、内存中创建一个“XYZ”的字符串
#2、把a指向上述“XYZ"
print(b)
#输出"ABC",因为b的指向仍然为”ABC“

 (二)字符编码

       因为计算机是美国人发明的,所以最早只有127个字符(26个大小写字母加一些符号)被编码到计算机里,这个对应的编码表被称为ASCII编码,比如A对应的ASCII码是65(2进制为0100 0001),“z”对应编码为122(2进制为0111 1010);ASCII码长度为一字节,无法处理中文等其他符号,Unicode把所有语言都统一到一套编码中,通常用两个字节表示一个字符(除非特别生僻的会用到4个字节),字母A对应的Unicode编码为00000000 01000001;比ASCII码多出一倍的存储空间,因此又出现了可变长的UTF-8编码。UTF-8编码把Unicode字符根据不同的大小编码成1-6个字节,英文字母为1字节,中文汉字字符通常为3字节,很生僻的字符4-6字节,这样如果要处理的字符包含大量英文字母,那使用UTF-8编码就可以方便存储和传输。

       目前计算机系统通用的字符编码工作方式:在计算机内存中统一使用Unicode编码,当需要保存到硬盘或者需要传输时就使用UTF-8。比如用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存中,编辑完成后再转换成UTF-8进行保存到文件里。

      在最新的Python3中,字符串是以Unicode进行编码的,对于单个字符的编码,Python提供了ord()函数获取其整数编码值,chr()函数则反向把编码值转换成字符。

      由于Python中字符串类型是str,在内存中用Unicode表示,一个字符对应若干字节,如果要在网络上传输或者保存到硬盘里,就需要把str变为以字节为单位的bytes:

x=bABC

      需要区分‘ABC‘和b‘ABC‘,前者是字符串,后者虽然内容和前者一样,但是bytes的每个字符只占用一个字节,字符串可以通过encode()函数编码为指定的bytes:

>>>ABC.encode(ascii)
bABC
>>>中文.encode(utf-8)
b\xe4\xb8\xad\xe6\x96\x87‘
>>>中文.encode(ascii)
TraceBack(most recent call last):
....

      反过来,如果在硬盘或网络上读取了字节流,即数据为bytes,需要把bytes变为str,要用到decode()方法:

>>>b\xe4\xb8\xad\xe6\x96\x87.decode(utf-8)
中文
>>>bABC.decode(ascii)
ABC

      要计算str中包含多少个字符,可以使用len()函数,如果换成bytes,len()函数就计算字节数:

>>> len(ABC)
3
>>> len(中文)
2
>>> len(bABC)
3
>>> len(b\xe4\xb8\xad\xe6\x96\x87)
6
>>> len(中文.encode(utf-8))
6

      在操作字符串时,经常遇到str和bytes的互相转换,为了避免乱码,应坚持utf-8编码对str和bytes进行转换,由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

三、list、tuple、dict和set

(一)list

list是一种有序的集合,可以添加和删除元素。

classmates=[Michael,Bob,Tracy]
#输出列表长度3
len(classmates)   
#各个元素的访问
classmates[0]
classmates[1]
classmates[2]
classmates[-1]
classmates[-2]
classmates[-3]
#在列表尾部添加元素
classmates.append[Adam]
#指定位置插入元素
#插入后列表为:‘Michael‘ ‘Bob‘ ‘Jenny‘  ‘Tracy‘ ‘Adam‘
classmates.insert(2,Jenny)
#删除列表尾部元素并返回
classmates.pop()
#删除指定位置的元素并返回
#删除后列表为:‘Michael‘ ‘Jenny‘  ‘Tracy‘ ‘Adam‘
classmates.pop(1)
#列表内的元素的数据类型可以不相同
Lista=[123,88,abc,True,[1,2,12]]
#返回‘12‘
Lista[4][2]

(二)tuple

tuple是另外一种有序的列表,但其一旦初始化就不能进行修改,也没有insert、append这些方法,所以代码更安全。

#定义一个tuple
t=(1,2)
#定义一个空元素的tuple
t1=()
#定义一个元素的tuple,元素后必须加一个逗号
t2=(1,)

对于如下代码:

t=(a,b,[A,B])
t[2][0]=X
t[2][1]=Y

可以发现t改变了,如何在这里理解tuple元组的不可变呢?元组t在定义时候有三个元素,为两个字符串和一个列表;要注意这里第三个元素的指向始终是这个列表,只是这个列表最开始是指向了存储‘A‘和‘B‘的内存,随后又指向了新创建的两个字符串‘X‘和‘Y‘的内存。元组中第三个元素的指向并没有变,变的是其指向的列表的指向。

(三)dict

Python内置的数据类型字典dict使用键:值的方式存储,具有极快的查询速度。

d={Michael:95,Bob:75,Tracy:85}
#只需要知道键就可以直接查询到值
print(d[Tracy])

与列表不同,列表是有序的,查询列表需要从下标0开始逐个查找,直到查找到为止。字典是先直接计算出键对应的位置,然后直接取出其值,所以对于这种key:value的存储方式,在添加元素的时候,必须根据key算出value的存储位置,这种算法称为哈希算法。要保证哈希算法的正确性,作为key的对象就不能变,因此key 必须是不可变类型,即整数、字符串、浮点数、元组。也因此字典中一个键只能对应一个value。

d={Michael:95,Bob:75,Tracy:85}
#直接添加新元素
d[Jenny]=90
#多次添加同一键的值,后面会覆盖前面的值
d[Jenny]=96
#如果访问一个不存在的键会报错
print (d[Tom])
#可以用in先进行判断
str=input(please enter the name:)
if str in d:
    print (d[str])
#通过get()方法返回其值,如果参数键不存在返回None
#也可以在get(‘key‘,?)中第二个参数自定义如键不存在则返回的值
print (d.get(Tom,查询的键不存在))
#pop(key)方法可以删除一个键及其值
x=pop(Bob)

(四)set

set类似于dict,是一组key的集合,所以set的元素必须也为不可变类型,但其不存储值,因为key不能重复,所以set中也不能有重复的元素。

#set的创建需要通过set()方法,并提供一个列表作为输入集
#创建后s={1,2,3},重复元素会被过滤掉
s=set([1,2,2,3,1])
#通过add()方法添加元素
s.add(4)
s.add(2)
#s={1,2,3,4}
#通过remove()方法删除元素
s.remove(4)
#s={1,2,3}
#两个set可以做数学意义上的交集合集等操作
s0={[1,3,5]}
sn1=s&s0
#sn1={1,3}
sn2=s|s0
#sn2={1,2,3,5}

 

四、循环

Python中的循环有两种方式:

(一)for/in循环

依次把需要循环的每个元素迭代出来:

names=[Michael,Bob,Tracy]
for name in names:
    print (name)

如果要计算1到10之间的整数和:

t=(1,2,3,4,5,6,7,8,9,10)
sum=0
for x in t:
    sum+=x
print (sum)

那么如果要计算更大区间的整数之和,比如1到100的,就可以用到range()函数,先生成一个整数序列,再通过list()函数将其转换成list。如range(5)生成的序列从0到小于5的整数:0,1,2,3,4。

list(range(5))
#生成[0,1,2,3,4]
sum=0
for x in range(101):
    sum+=x
print(sum)

(二)while循环

只要条件满足,就不断循环,直到条件不满足时退出。

#计算100以内奇数之和
sum=0
i=0
while (2*i+1<=100):
    sum+=2*i+1
    i++
print(sum)

(三)break

break语句一般用于循环中的提前退出:

n=1
while n<100:
    if n>10:
        break
    print(n)
    n=n+1
print(end)

(四)continue

用于循环过程中跳出当前次的循环,直接进入下一次循环:

#continue计算100以内奇数之和
sum=0
i=0
while i<=100:
    if i%2==0:
        i++
        continue
i++
sum+=i print(sum)

 


以上是关于Python学习笔记二的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记(集合的使用文件操作字符编码与转码函数)

《深度学习入门 基于Python的理论与实现》书中代码笔记

python3学习笔记 错误处理

Python 学习笔记

Python基础学习笔记

python爬虫学习笔记-M3U8流视频数据爬虫