暑假留校Python学习——Day 1

python字符串编码

捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间

python字符串

对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符

>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'

str与bytes编码互换

‘ABC’表示str,b’ABC’表示bytes类型,值得注意的是,用bytes编码,只占一个字节,以Uncode表示的str可以通过encode()方法表示编码为指定的bytes表示,如:

>>>'ABC'.encode("ascii")
b'ABC'
>>> '大鹿鹿'.encode("utf-8")
b'\xe5\xa4\xa7\xe9\xb9\xbf\xe9\xb9\xbf'
>>> '大鹿鹿'.encode("ascii")
  File "<stdin>", line 1
    '大鹿鹿'.encode("ascii")
               ^
SyntaxError: invalid character in identifier

可以看出,纯英文字符可以使用ascii码表示,也可以使用utf-8编码表示,但是中文只可以使用utf-8编码表示,用ascii会报错,由于中文表示超过了ascii编码表示的范围。



反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

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



使用list和tuple

list

list类似与c/c++里面的数组,如:

>>> name= ['da','lu','lu']
>>> name[0]
'da'
>>> name[1]
'lu'
>>> name[2]
'lu'
>>> name[3]]
  File "<stdin>", line 1
    name[3]]
           ^
SyntaxError: invalid syntax
>>>

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:


>>> name[-1]
'lu'
>>>

以此类推,可以获取倒数第2个、倒数第3个:

>>> name[-1]
'lu'
>>> name[-2]
'lu'
>>> name[-3]
'da'
>>>

list是一个可变有序表,可以使用append()方法追加元素至末尾,也可以使用insert()方法插入元素到指定位置,要删除指定位置元素可以用pop(i)i是指定索引位置,如:

>>> name.append('luo')
>>> name
['da', 'lu', 'lu', 'luo']
>>> name.insert(4,'xuan')
>>> name
['da', 'lu', 'lu', 'luo', 'xuan']
>>> name.pop()
'xuan'
>>> name
['da', 'lu', 'lu', 'luo']
>>> name.pop(3)
'luo'
>>> name
['da', 'lu', 'lu']
>>>

计算list的长度方法len()

扫描二维码关注公众号,回复: 2237845 查看本文章
>>> len(name)
3
>>>

tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,它也没有append()insert()这样的方法。其他获取元素的方法和list是一样的

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来。

定义的方法为t =('da','lu','lu')




条件判断与循环

内容基本与c\c++相似,值得 注意的有一下几个方面:

1.Python是通过首行缩进来判断是否在语句体,而且,相比于c/c++,else if变为elif,同时,在进入一个语句体中时,必须加上:
如:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

注意事项: input()函数返回的为str类型,如果要用input()函数的返回结果与整形比较,则需要用int()函数。
如:

>>> num = input("Name_ID:")
Name_ID:12132131
>>> if num < 2000000:
...       print("True")
... else:
...       print("False")
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'
>>>

>>> type(num)
<class 'str'>
>>> type(int(num))
<class 'int'>
>>>

2.循环条件参数逻辑不一样:
for :

>>> for x in [1,2,3,4,5,6,7,8,9,0]:
...      print(x)
...
1
2
3
4
5
6
7
8
9
0
>>>

while

>>> sum = 0
>>> i = 0
>>> while i < 101:
...     sum = sum + i
...     i = i + 1
...
>>> print(sum)
5050
>>>



dist和set

dict:

Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。

如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果;通过remove(key)方法可以删除元素:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
-----------------------------------------------------

>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

练习

import math

def quadratic(a, b, c):
     r = b*b - 4*a*c
     if r < 0:
         print("此方程无解!")
     elif r == 0:
         x1 = -b/2*a
         x2 = x1
     elif r > 0 :
         x1 = (-b + math.sqrt(r))/(2*a)
         x2 = (-b - math.sqrt(r))/(2*a)
         return x1, x2

print('quadratic(2, 3, 1) =', quadratic(2, 3, 1))
print('quadratic(1, 3, -4) =', quadratic(1, 3, -4))

if quadratic(2, 3, 1) != (-0.5, -1.0):
    print('测试失败')
elif quadratic(1, 3, -4) != (1.0, -4.0):
    print('测试失败')
else:
    print('测试成功')

返回

quadratic(2, 3, 1) = (-0.5, -1.0) 
quadratic(1, 3, -4) = (1.0, -4.0) 
测试成功 

猜你喜欢

转载自blog.csdn.net/qq_38743140/article/details/81087860