1、简介
python是一种面向对象的解释型计算机程序设计语言。
2、变量
2.1、变量赋值
a=1 #将1的值赋给变量a
b=2
a=3 #将3的值赋给变量a
print(a) #输出a的值为3
代码都是从上到下一次执行的,可以看到,第一步是给变量a赋值,第三部再次给变量a赋值,此时a=3,输出a时,显示a=3;
2.2、变量的命名
a、变量名只能包含字母、数字、下划线。可以以字母或下划线打头,但不能以数字打头。例如变量可以命名为student_1,但不可以命名为1_student;
b、变量名不能包含空格,但可以使用下划线来分隔其中的单词;
c、不要将python的关键字和函数名用作变量名;
d、变量名应该既短又具有描述性
e、慎用小写字母l和大写字母o,因为可能被错认为1和0;
3、简单数据类型
3.1、数字
a、整数
a=12
b、浮点数
b=2.2
3.2、字符串
age=18 #定义了一个整型
message='happy'+age+'rd birthday' #定义了一串字符串
print(message) #理想状态下是输出 happy 23rd birthday ,但是执行后报错了
需要注意的是,上述是一个类型错误,整型和字符串混合在一起,这时需要调用函数str(),将非字符串的整型23转换为字符串
age=18
message='happy'+str(age)+'birthday' #类型转换后,就不会再报错了
3.3、列表
列表是由一系列按特定顺序排列的元素组成。
a、增加元素
name = ['朝朝','小明','王芳','郭霞']
name.append('白云') #方法append是在元素末尾增加元素
#如果想在列表的指定位置增加元素,用.insert方法
name.insert(0,'郭振') #0,代表在下标为0的位置,添加元素'郭振'
b、删除元素
#用del语句删除元素
name = ['朝朝','小明','王芳','郭霞']
del name[3] #删除name列表里下标为3的元素,也就是删除元素'郭霞'
#根据元素值来删除元素 如果不知道元素的位置,只知道要删除的元素的值
name.remove('王芳') #删除元素值为王芳的元素 如果列表里有多个
#相同的元素只会删除第一个
#使用方法.pop删除元素
name.pop() #方法pop是删除列表末尾的元素,并且能够接着使用这个元素
#pop的方法又叫弹出,可以理解为,列表就像一个栈,而删除末尾元素相当于
#弹出栈顶元素;
#用pop方法删除指定位置的元素
name.pop(2) #弹出下标为2的元素
#注意:del和pop的区别是,del删除元素,并且不再以任何方式使用它;如果想要
#在删除元素后还想要继续使用它,就用pop方法
c、修改元素
name = ['朝朝','小明','王芳','郭霞']
name[0]='朝阳' #修改可以理解为重新赋值,将'朝朝'改为'朝阳'
d、查找元素
name = ['朝朝','小明','王芳','郭霞']
print(name[0]) #根据下标查找元素
print(name.count('小明')) #查找某个元素在列表中的出现次数 可以应用在
#注册界面,看看用户是否已经注册
print(name.index('王芳')) #查找元素的下标
name.reverse #reverse是反转列表,但是reverse是没有返回值的,
print(name) #需要再输出一下才能看到结果
name.clear #清空列表
name.sort
print(name) 对列表进行永久性排序,升序排列,同样没有返回值
name.sort(reverse=ture) #如果reverse=ture,,则是降序排列
print(name)
len(name) #查找列表的长度
name = ['朝朝','小明','王芳','郭霞']
name2 = ['王敬','张毅','章程','小南']
name.extend(name) #把列表name的值添加到name2列表里,
print(name2) #name2 = ['王敬','张毅','章程','小南','朝朝','小明','王芳','郭霞']
name3=name+name2 #将name和name2的值合并到一个name3的列表里
学完列表,做一个小练习题,校验用户是否注册
name=[‘zhenxw’,’gan’,’nn’] 假设这是数据库中的用户名列表
for i in range(5):
username=input('用户名:')
if username=name.count>0: #方法count判断用户是否在数据库列表中
print('用户名已注册')
else :
print('用户未注册')
name.append(username)
for i in range(5):
username=input('用户名:')
if username in name: #也可以用 not in 来判断用户是否已经注册
print('用户已注册')
else :
print('用户未注册')
name.append(username)
e、多维数组
list可以分为一维数组,也可以有二维,多维数组
nums1=[1,2,3] #一维数组
nums2=[1,2,3,[4,56]] #二维数组 #想要取出num2里的56,该怎么办?
print(nums2[-1][-1]) #多维数组取值需要先确定一共有几层数组,下标的
#负数代表从右往左数,-1代表最后一个
nums=[1,2,3,4,['a','b','c','d','e',['一','二','三']],['四','五']
#这是一个三维数组
print(nums[4][5][1]) #值为二
f、遍历循环列表
passwords=['123456','123123','7891234','password']
for i in passwords:
print(i) #python仅用2行代码实现了循环列表;
#如果想要给数组中的每个值加上'abc'头缀
index=0
for i in passwords:
password[index]='abc'+i
index+=1
print(i)
#更简单的一种方法
passwords=['123456','123123','7891234','password']
for index,p in enumerate(passwords):
print(index,p) #使用枚举函数,自动计算出下标和元素显示出来
passwords[index]='abc'+p
print(passwords)
想一道题:
l=[1,1,1,2,3,4,5] #筛选出这个列表里的偶数
# 0,1,2,3,4,5,6 这个代表下标
for i in l:
if i%2!=0:
l.remove(i)#运行一下这个代码,[1, 2, 4],会发现有奇数混在里面
#原因在于,在循环的时候,把下标0的值删除后,列表内的下标就有了变化,
#下标为1的值此时为下标为0,下次循环会接着从下标1的值开始循环,因此,会漏掉
#一部分的值,所以不能在循环的时候删除列表
#有几种解决方案:
1、重新定义一个和l的值一样的变量
l2=[1,1,1,2,3,4,5] #这个时候在内存里l和l2指定不同的内存
2、浅拷贝
l=[1,1,1,2,3,4,5]
l2=l #这是浅拷贝,查询一下l和l2的id,发现指向一个地址,所以改变一个,另一个也改变
print(id(l))
print(id(l2)) #显示结果一样
3、深拷贝
import copy
l2=copy.deepcopy(l) #深拷贝,在内存地址里重新划分了一个地方给l2,此时
#l和l2指向不同的地址,操作l而不会对l2产生影响
g、切片
切片就是取列表中的部分元素。
list = ['a','b','c','d','e','j','k','l','m','n','o']
print(list[2:5]) #顾头不顾尾,所以结果是取下标2到4的值
#结果是['c', 'd', 'e']
print(list[:5]) #代表从头开始取
print(list[2:]) #代表从下标为2取到最后;
print(list[::3]) #代表步长是3,每隔三个取一个
#['a', 'd', 'k', 'n']
#如果取1到100之间的所有奇数或者偶数,该怎么写呢?
num=list(range(1,101))
print(list[::2]) #取奇数
print(list[1::2]) #取偶数
print(list[::-1])
#步长是整数,代表从左往右取数,如果是负数,代表从右往左数
word='十一放假快乐'
print(word[::-1]) #切片也适用于字符串
#写一个验证是否是回文的小程序
#'上海自来水来自海上' 回文就是正着反着都是一句话
for i in range(10):
message=input('请输入一串字符串:')
if len(message)<2: #避免像输入1,也会返回是回文
print('字符串必须大于1')
elif message==message[::-1]:
print('是回文')
else:
print('不是回文')