python基础知识
基于Python3.5的Python知识

1.1 变量
Python中的变量不需要先定义数据类型,直接使用,python会根据你的赋值情况判断变量数据类型。
name = “那小子” #Python不需要定义数据类型name数据类型是string
age = 23 #age的数据类型是int
1.2 输入输出
2.1输入
输入
name = input(“name:”)
age = input(“age:”)

注:input输入的数据类型默认为是string,如果需要改成整型
age = int(input(“age:”)) #数据类型被强制转换成整型
变量与字符串结合
2.2输出
输出Hello World
print(“HelloWorld”)
python执行文件不关注后缀名只关心内容,(.py是用来区分的)
2.2.1格式化输出:
mas =
‘’’
name = “那小子”
age = 23
‘’’
print(mas)输出的是

三引号除了可以注释多行以外,还可以打印多行
name = input ("name:")
age = int(input("age:"))
job = input("job:")
infor = '''
info of %s
name:%s
age:%d
job:%s
'''%(name,name,age,job) #这个%是关联把前面的字符串与括号里面的变量
#一个%s是一个占位符对应括号里面的值,s代表是string(字符串),还可以是%d(指定是int类型)对应的变量也应该是int,而%s的变量可以是int。
age%d强调age输入的必须是数字与前面的数据类型相对应
infor2 = '''
info of {0}
name:{0}
age:{1}
job:{2}
'''.format(name,age,job)
infor3 = '''
info
of {Name}
name:{Name}
age:{Age}
job:{Job}
'''.format(Name=name,Age=age,Job=job)
3.数据类型
数据类型大致分为,int(整型),string(字符串),bool(布尔),list(列表),tuple(元祖),dict(字典),set(集合)
3.1int:不可变类型
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
3.2str:不可变类型
单引号或者双引号里面的内容,或者多引号(用于多行字符串)
字符串可以进行简单的加和乘


常用操作:
增:由于字符串是不可变的,对他进行增的时候其实是生成了一个新的字符串。
s = "你好"
s2 = "世界"
print(s + s2)

删:由于字符串是不可变的,对他进行删的时候其实是生成了一个新的字符串。
s = "你好世界"
s2 = s[1:2]
print(s2)
print(s.replace('你',''))
print(s)

改:由于字符串是不可变的,对他进行替换的时候其实是生成了一个新的字符串,并不是在原字符串上改变。
s = "你好世界"
print(id(s))
s3 = s.replace('你','')
print(s)
print(s3)
print(id(s))
print(id(s3))

查:
s = 'hello word'
print(s.find('l')) #如果不存在返回-1
切片:
s = "hello word" print(s[1:2]) #切第2到第2位的数据 print(s[0:8:2]) #从第一位到第7中隔一位取一位 print(s[::-1]) #字符倒存

消除空格:
s = ' hello world! '
s.strip() #可以消除两边空格,中间的不行,还可按要求可以是其他字符(可以是字符串)
s.lstrip()
s.rstrip()
s2 = '***hello,world!***'
s2.strip('*')

count计数:
s = ' hello world! '
print(s.count('l')) #可在字符后面制定起始位置和终止位置
def count(self, sub, start=None, end=None): # real signature unknown; restored from __doc__
"""
从一个范围内的统计某str出现次数
S.count(sub[, start[, end]]) -> int
Return the number of non-overlapping occurrences of substring sub in
string S[start:end]. Optional arguments start and end are
interpreted as in slice notation.
"""
return 0
def encode(self, encoding='utf-8', errors='strict'): # real signature unknown; restored from __doc__
"""
encode(encoding='utf-8',errors='strict')
以encoding指定编码格式编码,如果出错默认报一个ValueError,除非errors指定的是
ignore或replace
S.encode(encoding='utf-8', errors='strict') -> bytes
Encode S using the codec registered for encoding. Default encoding
is 'utf-8'. errors may be given to set a different error
handling scheme. Default is 'strict' meaning that encoding errors raise
a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
'xmlcharrefreplace' as well as any other name registered with
codecs.register_error that can handle UnicodeEncodeErrors.
"""
return b""
def center(self, width, fillchar=None): # real signature unknown; restored from __doc__ """ 原来字符居中,不够用空格补全 S.center(width[, fillchar]) -> str Return S centered in a string of length width. Padding is done using the specified fill character (default is a space) """ return ""def format(self, *args, **kwargs): # known special case of str.format
"""
格式化输出
三种形式:
形式一.
>>> print('{0}{1}{0}'.format('a','b'))
aba
形式二:(必须一一对应)
>>> print('{}{}{}'.format('a','b'))
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: tuple index out of range
>>> print('{}{}'.format('a','b'))
ab
形式三:
>>> print('{name} {age}'.format(age=12,name='lhf'))
lhf 12
S.format(*args, **kwargs) -> str
Return a formatted version of S, using substitutions from args and kwargs.
The substitutions are identified by braces ('{' and '}').
"""
pass
1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加r,如name=r'l\thf'
2.unicode字符串与r连用必需在r前面,如name=ur'l\thf'
字符串的其他函数参考:
https://blog.csdn.net/zhanh1218/article/details/21826239
3.3 布尔:
TRUE和FALSE主要用于判断对错(一个语句是否成立)
True/False的求值
Tip
尽可能使用隐式false
定义:
Python在布尔上下文中会将某些值求值为false. 按简单的直觉来讲, 就是所有的”空”值都被认为是false. 因此0, None, [], {}, “” 都被认为是false.
优点:
使用Python布尔值的条件语句更易读也更不易犯错. 大部分情况下, 也更快.
缺点:
对C/C++开发人员来说, 可能看起来有点怪.
结论:
尽可能使用隐式的false, 例如: 使用 if foo: 而不是 if foo != []: . 不过还是有一些注意事项需要你铭记在心:
- 永远不要用==或者!=来比较单件, 比如None. 使用is或者is not.
- 注意: 当你写下 if x: 时, 你其实表示的是 if x is not None . 例如: 当你要测试一个默认值是None的变量或参数是否被设为其它值. 这个值在布尔语义下可能是false!
- 永远不要用==将一个布尔量与false相比较. 使用 if not x: 代替. 如果你需要区分false和None, 你应该用像 if not x and x is not None: 这样的语句.
- 对于序列(字符串, 列表, 元组), 要注意空序列是false. 因此 if not seq: 或者 if seq: 比 if len(seq): 或 if not len(seq): 要更好.
- 处理整数时, 使用隐式false可能会得不偿失(即不小心将None当做0来处理). 你可以将一个已知是整型(且不是len()的返回结果)的值与0比较.
- Yes: if not users:
- print 'no users'
- if foo == 0:
- 10. self.handle_zero()
- 11.
- 12. if i % 10 == 0:
- 13. self.handle_multiple_of_ten()
14. No: if len(users) == 0:
- 15. print 'no users'
- 16.
- 17. if foo is not None and not foo:
- 18. self.handle_zero()
- 19.
- 20. if not i % 10:
- 21. self.handle_multiple_of_ten()
- 注意‘0’(字符串)会被当做true.
3.4列表
是可变的
增
li = [1,2,3,4,5,6]
li.append(7)
print(li)
li.insert(1,10)
print(li)

删
li = [1,2,3,4,5,6,1,2,2,3]
print(li.pop(1)) #可指定索引值删除,默认是删除最后的,并返回被删掉的值,位置超出范围会报错
print(li)
li.remove(2) #只删除从左开始的第一个符合条件的元素,如果不存在会报错
print(li)

改
li = [1,2,3,4,5,6]
li[0] = 0
print(li)

查
li = [1,2,3,4,5,6]
print(li.index(1)) #索引值
print(2 in li) #使用in判断2是否在li表内

3.5元祖
1.可存放多个值
2.不可变
3.按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序
元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变
3.6字典
本身是可变的
1.key-value结构
2.key必须可hash、且必须为不可变数据类型、必须唯一;value是可变的
3.可存放任意多个值、可修改、可以不唯一
4.无序
增
dic = {"name":"ni","age":"23"}
print(dic)
dic["job"] = "IT"
print(dic)
dic.setdefault("addr", "ZJ")
print(dic)

删
dic = {"name": "ni", "age": "23"}
print(dic.pop("age")) # 如果字典中存在key,删除并返回key对应的vuale;
# 如果key不存在,且没有给出default的值,则引发keyerror异常;
print(dic)
dic.clear() #删除字典中的所有项或元素;
print(dic)

改
dic = {"name":"ni","age":"23"}
dic["name"] = "na" #对key的value进行更改
print(dic)
dic2 = {"name":"ni","job":"IT"}
dic.update(dic2) #会对两个字典拼接,存在key相同的,对应的value取新的那个value
print(dic)

查
dic = {"name":"ni","age":"23"}
print(dic["name"]) #返回字典中key对应的值,若key不存在字典中,则报错;
print(dic.get("name")) #返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)

get()函数取val比较好,不会出现不存在key会报错的情况,不存在返回默认值None。
1、dic.keys() 返回一个包含字典所有KEY的列表;
2、dic.values() 返回一个包含字典所有value的列表;
3、dic.items() 返回一个包含所有(键,值)元祖的列表;
4、dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表;

3.7集合
1.确定性(元素必须可hash)
2.互异性(去重)
3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。
注意:集合存在的意义就在于去重和关系运算
set1 = {1,2,3,4,5}
set2 = {3,4,5,6,7,8,9}
print(set1&set2)
print(set1.intersection(set2)) #交集
print(set1 | set2)
print(set1.union(set2)) #并集
print(set1.difference(set2))
print(set1-set2) #集合1与集合2的差集
print(set1.symmetric_difference(set2))
print(set1^set2) #对称差集

包含关系
in,not in:判断某元素是否在集合内
==,!=:判断两个集合是否相等
两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:
- set.isdisjoint(s):判断两个集合是不是不相交
- set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
- set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b
增加:
![]()
元素的删除
set.discard(x)不会抛出异常
set.remove(x)会抛出KeyError错误
4.流程控制:
4.1 if判断语句
#!/usr/bin/env
python
import getpass
_name = "naxiaozi"
_password = "123"
name = input("name:")
password = getpass.getpass("password:")
if name == _name and _password == password:
print("welcome")
else:
print("name or password is
wrong")
if :
else:
if :
elif :
注:Python通过缩进的方式来体现语句的关系
if条件满足的语句要缩进,else是和if并列的所以不必缩进。
4.2while
while Ture:
while 条件:
else:
while的else只在中间不执行break才执行。
break 结束当前所在的循环
continue结束本次循环,进行下次循环
4.3for
for i in range(10): #rang从1到10每次加一,rang(1:10:2)从1到10每次加2
print("loop:",i)
![]()
命名规则:
模块名,包名 :小写字母, 单词之间用户_分割。
类名:首字母大写。
全局变量: 大写字母, 单词之间用户_分割。
普通变量: 小写字母, 单词之间用户_分割。
函数: 小写字母, 单词之间用户_分割。
实例变量: 以_开头,其他和普通变量一样 。
私有实例变量(外部访问会报错): 以__开头(2个下划线),其他和普通变量一样 。
专有变量: __开头,__结尾,一般为python的自有变量(不要以这种变量命名)。
练习1:猜年龄游戏 (10分钟)
要求:
- 允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
#!/usr/bin/env python
count = 0
old_of_boy = 23
while count < 3:
count +=1
guss_old = int(input("guss
old:"))
if old_of_boy == guss_old :
print("yes,you get it")
break
elif old_of_boy > guss_old:
print("think bigger")
elif old_of_boy < guss_old:
print("think smaller")
else :
print("you have tried too many
time ")
练习2:猜年龄游戏升级版 (10分钟)
要求:
- 允许用户最多尝试3次
- 每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
- 如何猜对了,就直接退出
#!/usr/bin/env
python
count = 0
old_of_boy = 23
while count < 3:
count +=1
guss_old = int(input("guss
old:"))
if old_of_boy == guss_old :
print("yes,you get it")
break
elif old_of_boy > guss_old:
print("think bigger")
elif old_of_boy < guss_old:
print("think smaller")
if count == 3:
print("是否还想猜:")
k = input("想就输入‘是’,否则输入‘否’")
if k == '是':
count = 0
elif k == 'N'or k == 'n':
exit()
else :
print("you have tried too many
time ")



浙公网安备 33010602011771号