从编程语言的几个方向来说
#python2 写法
print "Hello World!"
#python3 写法
print("Hello World!")
#如果要输出带有换行的,那么就用三对引号
print("""
第一行
第二行
""")
#如果在执行时报错或者乱码(输出中文会)
#在py文件的头加入:
#-*- coding:utf-8 -*-
什么是变量?
首先变量有一个名字,然后它有一个值。这就是变量
v(变量名) = 1(值)
v = 1
补充:这里的v所指向的不是1这个值,而是这个值所存在的内存地址
变量的命名规则:
变量名由字母,数字,下划线组成
变量不能是数字开头
禁止使用Python里面的关键字和内置函数的名字
常见关键字(help("keywords")可以查看)
help("keywords")
False def if raise
None del import return
True elif in try
and else is while
as except lambda with
assert finally nonlocal yield
break for not
class from or
continue global pass
如果记不住还有一点就是在使用IDE的时候如果是Python关键字那么它会变颜色
要见名知意(如下:
name = "nanke" #这让别人知道名字是nanke
#而不是
a = "nanke"
变量名写法
? 常量就是一般不更改的变量,一般用大写来表示。如:
LANGUAGE_NAME = "Python"
单行注释
#print("Hello World!")
多行注释
"""
name = "nanke"
print(name)
"""
其实本不该在这里列举的,因为基本数据类型里面有好多好多的操作方法。在这里我就简单介绍一下什么是整形,什么是字符串,什么是布尔
整形
val = 123
字符串
val = "123"
布尔
val = True
val = False
这里,是引号包裹起来的都是字符串,不管里面是什么
然后,不是引号包裹起来的数字几乎都是整型了
布尔型就只有两个一个真一个假(True和False)
python2
name = raw_input("请输入你的名字:")
python3
name = input("请输入你的名字:")
注意:不管是Python2还是Python3里面name接收的值的数据类型都是字符串类型。下面来举个栗子
n1 = input("请输入一个数字:")
n2 = input("请输入一个数字:")
val = n1 + n2
print(val)
n1 = input("请输入一个数字:")
n2 = input("请输入一个数字:")
val = int(n1) + int(n2)
print(val)
if
if 就是如果XX 那就XX
说人话就是 如果条件满足 就执行什么
比如
if 你是男人:
? 进男厕所
if gender == '男':
print('进男厕所')
if else
if gender == '男':
print('进男厕所')
else:
print('进女厕所')
if elif else
if gender == '男':
print('进男厕所')
elif gender == '女':
print('进女厕所')
else:
print('进宠物医院吧')
什么是循环?
i = 1
while i <= 10:
print('跑了'+str(i)+'圈')
i = i + 1
"""
跑了1圈
跑了2圈
跑了3圈
跑了4圈
跑了5圈
跑了6圈
跑了7圈
跑了8圈
跑了9圈
跑了10圈
"""
break
i = 1
while i <= 10:
print('跑了'+str(i)+'圈')
if i == 5:
break
i = i + 1
"""
跑了1圈
跑了2圈
跑了3圈
跑了4圈
跑了5圈
"""
continue
i = 1
while i <= 10:
if i == 5:
i = i + 1
continue
print('跑了'+str(i)+'圈')
i = i + 1
"""
跑了1圈
跑了2圈
跑了3圈
跑了4圈
跑了6圈
跑了7圈
跑了8圈
跑了9圈
跑了10圈
"""
总结
%s
name = 'nanke33'
msg = "今天是个好日子,%s好开心"%(name,)
print(msg)
%d和%i
n1 = 1
n2 = 2
msg = "%d+%i=%d"%(n1,n2,n1+n2,)
print(msg)
%%
print("80%%")
# +
print(1+2) #3
# -
print(2-1) #1
# *
print(2*2) #4
# / 除 (python3)
print(10/4) #2.5
# / 除 (python2)
print(10/4) #2
# % 取模
print(9/2) #1
# ** n1**n2 n1的n2次方
print(3**2) #9
# // 取整数
print(10/4) #2
#由于是比较运算,所以只有是或不是,返回布尔值,真或假
n1 = 1
n2 = 2
#等于
print(n1 == n2) #False
#不等于
print(n1 != n2) #True
#大于
print(n1 > n2) #False
#小于
print(n1 < n2) #True
#大于等于
print(n1 >= n1) #False
#小于等于
print(n1 <= n1) #True
n1 = 1
n2 = 2
# =
n3 = n1 + n2
# +=
n1 += n2 # n1 = n1 + n2
# -=
n1 -= n2 # n1 = n1 - n2
# *=
n1 *= n2 # n1 = n1 * n2
# /=
n1 /= n2 # n1 = n1 / n2
# %=
n1 %= n2 # n1 = n1 % n2
# **=
n1 **= n2 # n1 = n1 ** n2
# //=
n1 //= n2 # n1 = n1 // n2
and(与)
print(True and False) #False
or(或)
print(True or False) #True
not(非)
print(not True) #False
in
print('a' in 'abc')#True
not in
print('a' not in 'abc')#False
在Python2中有int 和 long
在Python3中只有int
在Python2中的/要显示小数
from __future__ import division
value = 3/2
print(value)
#整形除了0为False,其余的都是True
val = bool(1) #True
val = bool(0) #False
#字符串除了空字符串为False,其余的都是True
val = bool("") #False
val = bool("nanke") #True
n1 = "1"
n2 = "2"
val = n1 + n2
print(val)
#结果是12
如果有学过其他语言的小伙伴打印n条Hello World!会用循环来。在Python中有个简单的方法就是字符串相乘
val = "Hello World!\n"
print(val*8)
#结果
#Hello World!
#Hello World!
#Hello World!
#Hello World!
#Hello World!
#Hello World!
#Hello World!
#Hello World!
字符串的索引其实很简单,就比如一个单词Hello,它的第一个是H第二个是e...类似的,找它第几个就是字符串的索引,使用方法:
val = "Hello"
print(val[1])
#结果e
什么是切片?切片其实就是把一个单词切成你想要的。
如:Hello你只想要Hel怎么做呢?
val = "Hello"
print(val[0:3])
#结果
#Hel
什么又是步长呢?
我们又拿Hello举栗子,如果我想要Hlo这要怎么办呢?
val = "Hello"
print(val[::2])
#结果
#Hlo
可能机智的你已经意识到了对于字符串变量[a???c] a b 代表范围 c 代表步长
我们再举个栗子123456789
如果我要这里面的1 3 5 7怎么做呢
val = "123456789"
print(val[0:7:2])
#结果
#1357
见名知意就是把字符串的小写全部转换成大写
val = "Hello"
print(val.upper())
#结果
#HELLO
val = "Hello"
print(val.lower())
#结果
#hello
val = "hello"
print(val.capitalize())
#结果
#Hello
val = "Hello"
print(val.swapcase())
#结果
#hELLO
val = "Hello"
print(val.startswith('H')) #True
val = "Hello"
print(val.startswith('h')) #False
val = "Hello"
print(val.startswith('e')) #False
val = "Hello"
print(val.endswith('o')) #True
val = "Hello"
print(val.endswith('O')) #False
val = "Hello"
print(val.endswith('h')) #False
val = "Hello"
print(val.count("l"))#2
print(val.count("H"))#1
val = "Hello"
print(val.find("H"))#0
val = "Hello"
print(val.find("l"))#2
结果不应该是2 和 3吗?
那如果找一个这个字符串里面不存在的呢
val = "Hello"
print(val.find('a')) #-1
定义变量name = "nanke33" 我要把nanke33换成nanke2333怎么做呢?
name = "nanke33"
print(name.replace("33","2333"))#nanke2333
val = " Hello World! "
print(val.strip())#Hello World
val = "name.age.gender"
print(val.split("."))#['name', 'age', 'gender']
val = "Hello {}"
new_val = val.format("World!")
print(new_val)#Hello World!
isdigit()判断是不是阿拉伯数字
val = "nanke33"
print(val.isdigit())#False
isalnum()判断是不是数字和字母
val = "nanke33"
print(val.isalnum())#True
isalpha()判断是不是纯字母和汉字
val = "nanke33"
print(val.isalpha())#False
下面就是补充一点点了
len()获取长度
val = "nanke33"
print(len(val))#7
while循环打印一个字符串
val = "nanke33"
count = 0
while count < len(val):
print(val[count])
count += 1
for循环打印一个字符串
val = "nanke33"
for item in val:
print(item)
如果理解了前面字符串索引的意思,那么列表的索引也就明白了
lst = ['name','age','gender']
print(lst[0])#name
你以为这样就结束了?不不不还有呢,我还能改lst[0]的值
lst = ['name','age','gender']
lst[0] = "姓名"
print(lst)#['姓名', 'age', 'gender']
其实列表的切片与字符串的切片几乎都差不多
lst = ['nanke1', 'nanke2', 'nanke3', 'nanke4', 'nanke5', 'nanke6']
print(lst[0:4])#['nanke1', 'nanke2', 'nanke3', 'nanke4']
print(lst[1:5:2])#['nanke2', 'nanke4']
append()
lst = [1, 2, 3]
lst.append(4)
print(lst)#[1, 2, 3, 4]
insert()
lst = [1, 2, 3]
lst.insert(1, 4)#第一个参数是在下标是1的地方插入第二个参数,原来的往后移动
print(lst)#[1, 4, 2, 3]
extend()
lst = [1, 2, 3]
lst.extend([4, 5])#将一个课迭代对象里面的东西迭代进lst
print(lst)#[1, 2, 3, 4, 5]
pop()
lst = [1, 2, 3]
lst.pop()
print(lst)#[1, 2]
lst = [1, 2, 3]
lst.pop(1) #pop里面可以传参数,参数就是列表的下标,如果不传就默认删除最后一个
print(lst)#[1, 3]
remove()
lst = [1, 2, 3]
lst.remove(2)#删除这个值是这个参数的元素
print(lst)#[1, 3]
clear()
lst = [1, 2, 3]
lst.clear()#清空列表里面的所有东西
print(lst)#[]
reverse()
lst = [1, 2, 3]
lst.reverse()#将列表反转
print(lst)#[3, 2, 1]
sort()
lst = [2, 1, 3]
lst.sort()#将列表内的数字排序,默认从小到大
print(lst)#[1, 2, 3]
lst = [2, 1, 3]
lst.sort(reverse=True)#加了这个参数就是从大到小排序了
print(lst)#[3, 2, 1]
count()
lst = [1, 2, 3]
print(lst.count(2))#统计列表中2的出现次数#1
len()
当然列表也是可以获取它的长度的
lst = [1, 2, 3]
print(len(lst))#3
range实际上可以理解为范围
print(range(6))#range(0, 6)
什么?不理解?
lst = list(range(6))
print(lst)#[0, 1, 2, 3, 4, 5]
理解了吧,当然还有
lst = list(range(0,6,2))
print(lst)#[0, 2, 4]
什么是字典?
dic = {'k1':'v1', 'k2':'v2'}
print(dic['k1'])#v1
字典有什么用?
什么是集合?
集合中的元素是不能重复的,要都是可以哈希的,且会自己按顺序排列
set1 = {2, 3, 3, 1}
print(set1)#{1, 2, 3}
add()
set1 = {1, 2, 3, 4, 5}
set1.add(6)
print(set1)#{1, 2, 3, 4, 5, 6}
pop()
set1 = {1, 2, 3, 4, 5}
set1.pop()#随机删除一个
print(set1)#{2, 3, 4, 5}
remove()
set1 = {1, 2, 3 ,4, 5}
set1.remove(2)
print(set1)#{1, 3, 4, 5}
clear()
set1 = {1, 2, 3 ,4, 5}
set1.clear()
print(set1)#set()
集合的一些常用操作
s1 = {1, 2, 3}
s2 = {3, 4, 5}
#交集
print(s1 & s2)#{3}
print(s1.intersection(s2))#{3}
#并集
print(s1 | s2)#{1, 2, 3, 4, 5}
print(s1.union(s2))#{1, 2, 3, 4, 5}
#差集
print(s1 - s2)#{1,2}
print(s1.difference(s2))#{1,2}
#反交集
print(s1 ^ s2)#{1, 2, 4, 5}
print(s1.symmetric_difference(s2))#{1, 2, 4, 5}
#子集
print(s1 < s2)#False
print(s1.issubset(s2))#False
#超集
print(s1 > s2)#False
print(s1.issuperset(s2))#False
什么是子集?
如果s1里面的元素s2里面都有,那么s1就是s2的子集,并且还是真子集
什么是超集?
在说深浅拷贝前我来说一说一些小东西
==
n1 = 10
n2 = 10
print(n1 == n2)#True
id(获取变量所指的内存地址的)
v1 = "nanke33"
v2 = "nanke33"
print(id(v1),id(v2))#2040780017936 2040780017936
is(判断两个值之间的内存地址是否相同)
v1 = "nanke33"
v2 = "nanke33"
print(v1 is v2)#True
浅拷贝
我来创建一个列表lst1 = [1,2,[3,4,[5,6]]]
我们来浅拷贝一下
lst1 = [1,2,[3,4,[5,6]]]
lst2 = lst1.copy()
print(lst2)#[1,2,[3,4,[5,6]]]
是不是没区别,那我们再来操作一下
lst1 = [1,2,[3,4,[5,6]]]
lst2 = lst1.copy()
lst1[0] = 9
print(lst2)#[1,2,[3,4,[5,6]]]
为啥还是一样呢?
我们再来操作一波
lst1 = [1,2,[3,4,[5,6]]]
lst2 = lst1.copy()
lst1[2][1] = 9
print(lst2)#[1, 2, [3, 9, [5, 6]]]
深拷贝
我们再来创建一个列表lst1 = [1,2,[3,4,[5,6]]]
我们来深拷贝一下
import copy
lst1 = [1,2,[3,4,[5,6]]]
lst2 = copy.deepcopy(lst1)
print(lst2)#[1, 2, [3, 4, [5, 6]]]
同样的没有变化,那我们来操作一波
import copy
lst1 = [1,2,[3,4,[5,6]]]
lst2 = copy.deepcopy(lst1)
lst1[0] = 9
print(lst2)#[1, 2, [3, 4, [5, 6]]]
和浅拷贝一样,依旧没有变化。
你能想到我下一步是动第二层了,那是不是和浅拷贝一样的结果呢?
import copy
lst1 = [1,2,[3,4,[5,6]]]
lst2 = copy.deepcopy(lst1)
lst1[2][1] = 9
print(lst2)#[1, 2, [3, 4, [5, 6]]]
哈哈哈,我猜你已经知道答案了,恭喜你。
那么你是否知道为什么呢?
首先我有一个1.txt的文件
123321
3213123
r
f1 = open('1.txt',mode='r',encoding='utf-8')
print(f1.read())
f1.close()
#123321
#3213123
rb
f1 = open('1.txt',mode='rb')
print(f1.read())
f1.close()
#b'123321\r\n3213123'
r+
f1 = open('1.txt',mode='rb',encoding='utf-8')
print(f1.read())
f1.write("321")
f1.close()
#123321
#3213123
123321
3213123321
r+b
f1 = open('1.txt',mode='r+b')
print(f1.read())
f1.write("321")
f1.close()
#b'123321\r\n3213123'
123321
3213123321
w
f1 = open('1.txt',mode='w',encoding='utf-8')
f1.write("123")
f1.close()
123
wb
f1 = open('1.txt',mode='wb')
f1.write("123")
f1.close()
#报错
f1 = open('1.txt',mode='wb')
f1.write(b"123")
f1.close()
w+
f1 = open('1.txt',mode='w+',encoding='utf-8')
f1.write("123")
print(f1.read())#
f1.close()
w+b
a
f1 = open('1.txt',mode='a',encoding='utf-8')
f1.write("123")
f1.close()
123321
3213123123
ab
f1 = open('1.txt',mode='ab')
f1.write(b"123")
f1.close()
123321
3213123123
a+
f1 = open('1.txt',mode='a+',encoding='utf-8')
print(f1.read())
f1.write("123")#
f1.close()
a+b
seek()
seek(0,0)#移动到开头写成seek(0)也行
seek(0, 2)#移动到结尾
seek(0, 1)#表示当前位置
seek(n)#n>0 表示光标移动几个字节
tell()
tell()#就是告诉你当前光标的位置
readline()
f1 = open('1.txt',mode='r',encoding='utf-8')
print(f1.readline())
f1.close()#123321\n
f1 = open('1.txt',mode='r',encoding='utf-8')
print(f1.readline().strip())
f1.close()#123321
readlines()
f1 = open('1.txt',mode='r',encoding='utf-8')
print(f1.readlines())
f1.close()#['123321\n', '3213123']
大文件如何操作?
f1 = open('1.txt',mode='r',encoding='utf-8')
for line in f1:
print(line.strip())
f1.close()
#123321
#3213123
with...as...
我们如果用平常的方法
f1 = open('1.txt',mode='r',encoding='utf-8')
f1.close()
这样来组合,我们有的时候说不定就会忘记了,要close,所以我通常使用这种方法,效果是一样的
with open('1.txt',mode='r',encoding='utf-8') as f1:
for line in f1:
print(line.strip())
#123321
#3213123
原文:https://www.cnblogs.com/nanke33/p/12026759.html