python学习笔记(一)---python基础

-数据类型和变量/字符串和编码

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义

print(r'\\\t\\')

输出结果

\\\t\\

 

练习:

打印出以下数值

# -*- coding: utf-8 -*-
n = 123
f = 456.789
s1 = 'Hello, world'
s2 = 'Hello, \'Adam\''
s3 = r'Hello, "Bart"'
s4 = r'''Hello,
Lisa!'''

python代码

print('n=',123)
print('f=',456.789)
print('s1=','\'hello,world\'')
print('s2=','\'hello,\\\'Adam\\\'\'')
print('s3=','r\'hello,\"Bart\"\'')
print('s4=','r\'\'\'hello,\nLisa!\'\'\'')

 

变量

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错如java

a='aaa'
b=111
print(type(a))
print(type(b))

结果如下:

<class 'str'>
<class 'int'>

  

常量

通常用全部大写的变量名表示常量

 

除法

整数的地板除//和取余%永远是整数,即使除不尽。要做精确的除法,使用/就可以。

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

 

格式化

%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

常见的占位符有:

%d 整数、%f 浮点数、%s 字符串 在代码内表示将当前当前的数据类型转换为字符串、%x 十六进制整数

print('%2d-%02d' % (3, 1))
print('%.2f' % 3.1415926)
print('Age: %s. Gender: %s' % (25, True))
print('growth rate: %d %%' % 7)

输出结果

 3-01
3.14
Age: 25. Gender: True
growth rate: 7 %

 

format()

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}{1}……,不过这种方式写起来比%要麻烦得多:

print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125))

输出结果

Hello, 小明, 成绩提升了 17.1%

 

-List和tuple

Python内置的一种数据类型是列表:list。

一、用 【中括号】来表示  list

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

1.查询。

① 正数表示的是正向获取,负数表示的是倒着取值

classmates = ['Michael', 'Bob', 'Tracy']
print(classmates[1])
print(classmates[-1])

结果

Bob
Tracy

 

② 查询长度

classmates = ['Michael', 'Bob', 'Tracy']
print(len(classmates))

结果

3 

 

③ list里面的元素的数据类型也可以不同,比如:

L = ['Apple', 123, True]
print(len(L))

s = ['python', 'java', ['asp', 'php'], 'scheme']
print(len(s))

p = ['asp', 'php']
s = ['python', 'java', p, 'scheme']

要拿到'php'可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到

2.添加。

classmates.append('Adam')
classmates.insert(1, 'Jack')

3.删除。

classmates.pop()
classmates.pop(1)

 

tuple

二、用 (小括号) 和逗号,

t = (1) 

定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

t = (1,)

  

这个序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

classmates = ('Michael', 'Bob', 'Tracy')

现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]classmates[-1],但不能赋值成另外的元素。

不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

那怎么才能使其可变呢 在tuple内嵌套list 如

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

 

-条件和判断  

条件语句后面都要加上:冒号表示这个条件的结束,是从上往下判断,只要上面的有一个满足下面的就不会再做判断直接输出答案

age = 20
if   age >= 6:
     print('you age is', age)
     print('you are a teenager')

elif age >=18:
     print('you age is ', age)
     print('you are an adult')
else:
     print('you are kids')

 

if判断条件还可以简写,比如写:

x = 1
if x:
    print('true')

只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False

因为input()返回的数据类型是strstr不能直接和整数比较,必须先把str转换成整数。Python提供了int()函数来完成这件事情

否则在输入为整数时 会报以下的错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()

 

s = input('birth: ')
birth = int(s)
if birth < 2000:
    print('00前')
else:
    print('00后')

 

但是因为强制类型转换的关系 如果你输入的是abc,原来int()函数发现一个字符串并不是合法的数字时就会报错,程序就退出了。

会出现以下的报错信息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'

 

-循环

一、for循环

for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。

range(101)就可以生成0-100的整数序列,计算1-100的和

sum = 0
for i in range(101): #if后要加 : 循环后面也要加 :
    sum = sum + i
    print(sum)

 

 

二、while 循环

只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

 

 

break直接跳出整个循环

continue直接跳过continue下面的所有语句,直接开始下一次循环

n = 0
while n < 10:
    n = n + 1
    break
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)

  

如果在这之前break 则当前什么都不会执行

 

 

- dict 和 set

一、dict

dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

用key就可以得到value的值 

d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print(d['Michael'])

为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字。无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。

dict就是第二种实现方式,给定一个名字,比如'Michael',dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。

你可以猜到,这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
print(d['Michael'])
d.pop('Bob')
print(d)

结果

{'Michael': 95, 'Tracy': 85}

使用 pop (key) 删除key对应的值

请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key:

可以根据in去判定 false代表这个没有在a的 dict里面

 

 

 

二、set

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

要创建一个set,需要提供一个list作为输入集合:

key 是 不能 重复的!!!!

增加///删除。

#set是不存储value的key的集合,不显示重复的key值,不可放入可变对象
s = set([1, 1, 2, 2, 3, 3])
s.add(4)
s.remove(2)
print(s)
#可变对象如list
a = ['c', 'b', 'a']
a.sort()
print(a)
#不可变对象如str
b = 'abc'
b.replace('a','A')
print(b)

输出结果可以看出

① set内不允许重复的key

② list是可变的

③ b虽然是字符串被替换了 但是当前没有指向b这个变量 所以输出的结果不会发生改变 如果在replace的 b 前 加上b = 则实际指向的结果会变成‘Abc’

 

 

 

 

 

  

 

 

 

 

  

  

posted @ 2019-12-23 08:46  陈晓猛  阅读(344)  评论(0编辑  收藏  举报