Python基础语法知识

106 阅读17分钟

1.认识python

在cmd中写python源代码:
  • 先输入python,进入python环境
print("hello python") #按回车,就可以输入该语句
a=2 #按回车
print(a) #按回车,就可以输出a的结果
b=a+2 #按回车
print(b) #按回车,就可以输出b的结果
  • 退出python环境:输入exit(),然后回车;或者Ctrl+z,回车。
  • 执行文件夹里的python文件(后缀名是.py)
d: #文件在D盘中,输入d:然后回车,就进入d盘了
python python.py #输入python+文件名,就可以执行文件了,
    #Tab键可以补全文件名
在pycharm中写代码:格式化输出
age=1
print("年龄是%d岁"%age)
age+=1
print("我今年的年龄是%d岁"%age)
age+=2
print("我今年的年龄是%d岁"%age)

print("我的名字是%s,我的国籍是%s"%("崔小玉","中国"))
name="周"
c="中国"
print("我的名%s,我的国%s"%(name,c))
#就记得 %d 和 %s 就行,整型和字符型;%f,浮点实数
补充几个小例子:
print("aaa","bbb","ccc") #这样写中间都空一个格
print("www","baidu","com",sep=".") #sep是分隔符
print("hello",end="") #end里什么都没有表示之间连接不换行
print(123,end="\t") #\t是制表符,往后缩进的
print("python",end="\n") #\n是换行
print("bai")
输入
password=input("请输入密码:")
print("刚刚输入的密码是:",password)
print(type(password)) #type()表示获取变量的类型

c=int(password) #int(),强制类型转换为int()整型
print(type(c),c)

2.判断语句和循环语句

判断语句
  • if后之间加条件,然后冒号:
  • 缩进一定要一致,if后可以跟好多语句,看缩进一致的为同一
  • elif 条件:,最后else 后没有条件,直接加:
小案例:石头剪刀布
import random

print("请输入:剪刀(0),石头(1),布(2)")

a=int(input("你的输入为"))
b=random.randint(0,2) #生成随机整数,导入random,调用randint即可
print("随机生成数字为",b)

if (a==0 and b==0)or(a==1 and b==1)or(a==2 and b==2):
    print("平局")
elif (a==0 and b==1)or(a==1 and b==2)or (a==2 and b==0):
    print("我输了")
elif (a==0 and b==2)or(a==1 and b==0)or(a==2 and b==1):
    print("我赢了")
# 与and; 或or; 非not
导入相应模块import
import somemodule #将整个模块somemodule导入
from somemodule import somefunction #从某个模块中导入某个函数
from somemodule import f1,f2,f3 #从某个模块中导入多个函数
from somemodule import \* #将某个模块中的全部函数导入
循环语句for
for i in range(5):
    print(i)
#打印结果为012345每个数字都换行,默认范围都是从0开始

for i in range(1,10,3):
    print(i)
#range表示范围,第一个是上限,第二个数字是下限,第三个数字是步长
#都包括上下限
#打印结果为147每个数字都换行
循环语句格式for
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码

#demo
name="zjt"
for i in name:
    print(i)
    
a=["aa","bb","cc","dd"]
for x in range(len(a)):
    print(x,a[x])
#这种写法要求必须掌握 列表下标访问
循环语句while
i=0
while i<5 :   #记住格式,后边用冒号
    print("第%d次循环:"%(i+1),end=" ")
    print("i=%d"%i)
    i+=1
    
#1到100求和 while循环
sum=0
i=1
while i<=100 :
    sum+=i;
    i+=1
print("1到100的和为%d"%sum)

#1到100求和 for循环
sum=0
for i in range(101):
    sum+=i
    i+=1
print(sum)
拓展:while...else语句
i=0
while i<3 :
    print("%d小于3"%i)
    i+=1
else:
    print("%d大于或等于3"%i)
#在条件语句为false时执行else语句块
break语句和continue语句和pass语句
  • break语句可以跳出for和while的循环体
  • continue语句跳过当前循环,之间进行下一轮循环
  • pass是空语句,一般用做占位语句,不做任何事情
案例:打印九九乘法表,用for和while语句
#while循环
i=1
while i<10:
    j=1
    while j<=i:
        print("%d*%d=%-2d"%(i,j,i*j),end=" ")
        j+=1
    print() #这样就是换行,不用\n了
    i+=1

#for循环
for i in range(1,10): #从1开始,不包括10
    for j in range(1,i+1):
        print("%d*%d=%-2d"%(i,j,i*j),end=" ")
    print()

3.字符串、列表、元组、字典

3.1字符串

  • 可以用单引号、双引号、三个双引号来表示。
  • 三引号是可以写多行语句,一次性输出。
  • 建议都使用双引号来表示,方便
  • 用\表示转义字符,(\‘)
  • 字符串支持拼接、截取等多种运算
#字符串的截取
str="pingdingshan"
print(str)
print(str[0])
print(str[0:5])
print(str[1:10:2]) #[起始位置:结束位置:步进值]

print(str[:3]) #前边不写,默认从头开始
print(str[10:]) #后边不写,默认就是到最后

print(str+",你好") #字符串连接用加号
print((str+"\t") * 3) #乘号就是连着打印三次,str+几个空格,括起来,输出三次

print("hello\npython") #\n换行
print(r"hello\npython") #在字符串前边+r,\这个转义字符就失去作用了,原封不动打印出来输出内容,不论是单引号还是双引号
字符串的常见操作 或者 字符串函数。

网上可以直接搜。文档里也有。

序号方法及描述
1capitalize()将字符串的第一个字符转换为大写
2count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数。
如果 beg 或者 end指定,则返回指定范围内 str 出现的次数
3find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中。
如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
4isalpha() 如果字符串至少有一个字符并且所有字符都是字母,则返回 True, 否则返回 False
5isdigit() 如果字符串只包含数字,则返回 True ,否则返回 False.
6isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False
7join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
8len(string) 返回字符串长度
9lstrip() 截掉字符串左边的空格或指定字符。
10max(str) 返回字符串 str 中最大的字母。
11min(str) 返回字符串 str 中最小的字母。
12rstrip() 删除字符串字符串末尾的空格。
13split(str="", num=string.count(str)) num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串

3.2列表list

  • 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
  • 列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表。
  • 列表索引值以 0 为开始值,-1 为从末尾的开始位置。
  • 列表可以使用+操作符进行拼接,使用*表示重复。
#遍历
list0=[] #定义一个空列表

list1=["zhou","cui",9]
print(list1[0])
print(list1[2])

#for循环和while循环遍历列表内容
for name in list1:
    print(name)
    
i=0
while i<len(list1):
    print(list1[i])
    i+=1
常用操作:增删改查
增操作:append()、extend()、insert()
#append()
list1=["zhou","cui",9]
list1.append("xiao")
print(list1) #打印结果:['zhou', 'cui', 9, 'xiao']

list2=[8,"yu"]
#list1.append(list2) #将一个列表作为一个整体,加入到列表末尾
#print(list1) #打印结果:['zhou', 'cui', 9, 'xiao', [8, 'yu']]

#extend()
list1.extend(list2) #将列表2中的每个元素,逐一追加到列表1中(扩展)
print(list1) #打印结果:['zhou', 'cui', 9, 'xiao', 8, 'yu']

#insert()
a=[0,1,"wang"]
a.insert(2,"li") #第一个表示下标,第二个表示插入的元素(对象)
print(a) #指定下标位置插入元素,打印结果:[0, 1, 'li', 'wang']
删操作:del()、pop()、remove()
a=[0,0,1,"wang"]
#del a[1] #在指定位置删除一个元素
#a.pop() #弹出末尾最后一个元素
a.remove(0) #直接删除指定内容元素(如果有重复数据,只删除第一个)
print(a)
改操作:直接修改指定下标的元素内容
a=[0,0,1,"wang"]
a[1]=3 #修改指定下标的元素内容
print(a)
查操作:在不在列表中 in ;not in
a=[0,3,1,"wang"]
b=int(input("请输入要查找的内容:")) #找数字,要强制转换为int类型,不然输入的都是字符串类型的
if b in a:
    print("找到了")
else:
    print("找不到")

#拓展一个查找的例子
a=[0,3,1,"wang"]
print(a.index("wang",2,4)) #可以查找指定下标范围的元素,并返回找到对应数据的下标。能找到返回下标,找不到就报错;范围区间左闭右开。
反转reverse()、排序sort()
a=[3,9,1,7]
print(a)

a.reverse() #反转
print(a)

a.sort() #升序
print(a)

a.sort(reverse=True) #降序
print(a)
列表的嵌套(列表可以当做一维数组,列表的嵌套当作二维数组)
a=[[],[],[]] #定义三个空列表

b=[["北京","上海"],["南京","天津","河北"],["青岛","哈尔滨"]]
print(b[0]) #打印结果:['北京', '上海']
print(b[1][0]) #打印结果:南京
应用:一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配
import random

offices=[[],[],[]] #三间办公室,8个老师,随机分办公室
names=["a","b","c","d","e","f","g","h"]

for name in names:
    index=random.randint(0,2) #随机生成序号
    offices[index].append(name) #添加名字在办公室里

#开始打印
i=1
for office in offices:
    print("办公室%d的人数为:%d"%(i,len(office)))
    i+=1
    for name in office:
        print("%s"%name,end="\t")
    print()
    print("-"*18)
作业:

现有商品列表如下:

1、products = [["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]],需打印出以下格式:

------ 商品列表 ------ 0 iphone 6888 1 MacPro 14800 2 小米6 2499 3 Coffee 31 4 Book 60 5 Nike 699

2、根据上面的products列表写一个循环,不断询问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购买的商品列表。

#作业1
products=[["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]
print("------\t商品列表\t------")

i=0
for p in products:
    print("%d\t%s\t%s"%(i,p[0],p[1]))
    i+=1

#作业2
products=[["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]]
carts=[]
print("------\t商品列表\t------")

while True:
    wen=input("请问您想买什么?")
    if wen=="q":
        break
    else:
        wen_index=int(wen) #将用户输入的商品编号换成整数
        carts.append(products[wen_index]) #将用户选择的商品编号对应的整个商品信息添加到 carts 列表中。

i=0
for cart in carts:
    print("%d\t%s\t%s"%(i,cart[0],cart[1]))
    i+=1

3.3元组Tuple

  • tuple与list类似,不同之处在于tuple的元素不能修改。
  • tuple写在小括号里,元素之间用逗号隔开。
  • 元组的元素不可变,但可以包含可变对象,如list。
  • 注意:定义一个只有1个元素的tuple,必须加逗号。
元组的定义与访问
tup0=() #定义了一个空元组
#tup1=(1) #<class 'int'>
tup1=(1,) #<class 'tuple'>
print(type(tup1)) #不加逗号,类型为整型;加逗号,类型为元组

#元组的访问
tup1=(1,2,9,4,0)
tup2=("wnag","li","zhou")
print(tup1)
print(tup1[2]) #通过下标访问
print(tup2[0:4]) #切片,左闭右开

#元组的连接组合
tup1=(1,2,9,4,0)
tup2=("wnag","li","zhou")
tup3=tup1+tup2
print(tup3)

#元组的删除
tup1=(1,2,9,4,0)
tup2=("wnag","li","zhou")
print(tup1)
del tup1 #只能删除整个元组,不能删除元组部分内容
print(tup1) #删除之后再访问,会报错
常用操作
  • 访问:直接通过下标访问。
  • 遍历元组,可以用for循环
  • 切片:[ : : ],上限;下限;步长值
  • 元组合并(组合)
  • 元组成员关系:在不在元组里,用in
  • 得到重复元组数量:tup1.count(1)
  • 获取长度len()、最大值max()、最小值min()、强制类型转换tuple()

3.4 字典dict

  • 字典是无序的对象集合,使用键-值(key-value)存储,具有极快的查找速度。
  • 键(key)必须使用不可变类型
  • 同一个字典中,键(key)必须是唯一的。
字典的定义 和 根据键访问值
d={"name":"吴彦祖","age":18}
print(d["name"])
print(d["age"])

#访问不存在的键
print(d["sex"]) #直接访问会报错

print(d.get("sex")) #使用get方法,没有找到对应的键,默认返回None

print(d.get("sex","m")) #没找到的时候可以设定默认值

增、删、改、查

#增
d={"name":"吴彦祖","age":18}
id=input("输入一个id:")
d["id"]=id
print(d.get("id"))

#删 del 、  clear
d={"name":"吴彦祖","age":18}
print(d["name"])
del d["name"]
del d #也可以全部删除
#print(d["name"]) #删除指定键值对后,再次访问会报错

d.clear()
print(d) #clear() 清空内容,打印结果:{}

#改
d={"name":"吴彦祖","age":18}
d["age"]=30 #直接根据键修改值即可
print(d) 

#查
d={"name":"吴彦祖","age":18,"sex":"man"}
print(d.keys()) #得到所有的键(列表形式)
print(d.values()) #得到所有的值
print(d.items()) #得到所有的项,每个键值对是一个元组

#遍历所有的键
for i in d.keys():
    print(i)
#遍历所有的键值对
for i,j in d.items():
    print("%s %s"%(i,j))
    
#使用枚举函数,同时拿到列表中的下标和元素内容(拓展)
lists=["a","b","c","d","e"]
for i,x in enumerate(lists):
    print(i,x)

3.5 集合set

不是重点,简单过一下。

  • set和dict类似,也是一组key的集合,但不存储value。
  • 由于key不能重复,所以,在set中,没有重复的key。
  • set是无序的,重复元素在set中自动被过滤。
s=set([1,2,"wang"])
print(s) #打印结果:{1, 2, 'wang'}

s=set([1,1,2,2,"wang"])
print(s) #打印结果:{1, 2, 'wang'} 过滤掉重复元素

常用操作:

  • 遍历,for循环
  • 添加add、移除remove、弹出pop、清除clear、删除集合del
总结
是否有序是否可变类型
列表[ ]有序元素类型可变,可以是int可以是str,可以通过下标访问
元组( )有序不可变,内容不可改,改了报错
字典{ }无序(键顺序,无序)key不可变,val可变
集合{ }无序值可变(不重复)

4.函数

函数概念

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。

函数的定义、调用、带参数的函数、带返回值的函数、返回多个值的函数
#函数的定义
def printinfo():
    print("1111111")

#函数的调用
printinfo()

#带参数的函数
def addn(a,b):
    c=a+b
    print(c)

addn(2,5)

#带返回值的函数
def addn(a,b):
    return a+b

#print(addn(2,8))
c=addn(2,8)
print(c)

#返回多个值的函数
def divide(a,b):
    shang=a/b
    yushu=a%b
    return shang,yushu #多个返回值,中间用逗号分隔

sha,yu=divide(5,2) #需要多个值来保存返回内容
print("shang=%d,yushu=%d"%(sha,yu))

课堂练习
  1. 写一个打印一条横线的函数。(提示:横线是若干个“-”组成)
  2. 写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
  3. 写一个函数求三个数的和
  4. 写一个函数求三个数的平均值(提示:调用上面的函数)
#1、
def p():
    print("-"*15)
p()

#2、
i=int(input("需要打印几行横线:"))
while i:
    p()
    i-=1
    
#3、
def add(a,b,c):
    return a+b+c
#print(add(1,2,3))

#4、
def ave(a,b,c):
    sum=add(a,b,c)
    c=sum/3
    return c
print(ave(1,2,3))
全局变量和局部变量
  • 在函数外边定义的变量叫做 全局变量
  • 全局变量能够在所有的函数中进行访问。
  • 如果在函数中修改全局变量,那么就需要使用 global 进行声明,否则出错。
  • 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧:强龙不压地头蛇。

5、文件操作

文件,就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

文件的打开、关闭、读写操作
f=open("test.txt","w") #打开文件,w(写模式),文件不存在就新建,新建在项目里
f.write("hello cxy zjt") #将字符串写入文件中
f.close() #关闭文件

#a是内容追加的写,w是内容覆盖的写
f=open("test.txt","a")
f.write("\nhhhhhhhhh")
f.close()

#read方法,读取指定的字符,开始时定位在文件头部,每执行一次向后移动指定字符数
f=open("test.txt","r")
content=f.read(5) 
print(content)
content=f.read(5)
print(content)
f.close() #记得关闭文件

#readlines方法
f=open("test.txt","r")
content=f.readlines() #一次性读取全部文件为列表,每行一个字符串元素
print(content)
i=1
for temp in content:
    print("%d:%s"%(i,temp))
    i+=1
f.close()

#readline方法,每次读一行
f=open("test.txt","r")
content=f.readline() #每次读一行
print(content)
content=f.readline()
print(content)
f.close()

文件的相关操作

有些时候,需要对文件进行重命名、删除等一些操作,还有创建文件夹、获取当前目录、改变默认目录、获取目录列表、删除文件夹。python的os模块中都有这么功能

import os #需要导包,调用里边的方法
os.rename("test.txt","test1.txt")

6、错误与异常

异常

当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。

#把可能出现问题的代码,放在try中
#把处理异常的代码,放在except中
try:
    print("123.txt","r") #不存在这个文件
except IOError:
    pass

#except可以捕获多个异常
try:
    open("2.txt","r") #如果123.txt文件不存在,那么会产生 IOError 异常
    print(num) #如果num变量没有定义,那么会产生 NameError 异常
except (IOError,NameError): #如果想通过一次except捕获到多个异常可以用一个元组的方式,即加括号,逗号隔开
    pass

#捕获所有的异常,用Exception。打印异常信息:
try:
    open("a.txt")
except Exception as result: #捕获所有异常,并且存储异常信息
    print(result) #输出异常信息
try...finally...

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用 finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等等。

import time
try:
	f = open('test.txt')
	try:
		while True:
			content = f.readline()
			if len(content) == 0:
				break
			time.sleep(2)
			print(content)
	except:
		#如果在读取文件的过程中,产生了异常,那么就会捕获到
		#比如 按下了 ctrl+c
		pass
	finally:
		f.close()
		print('关闭文件')
except:
	print("没有这个文件")
作业
  1. 应用文件操作的相关知识,通过Python新建一个文件gushi.txt,选择一首古诗写入文件中。
  2. 另外写一个函数,读取指定文件gushi.txt,将内容复制到copy.txt中,并在控制台输出“复制完毕”。
  3. 提示:分别定义两个函数,完成读文件和写文件的操作。尽可能完善代码,添加异常处理。