Python基础
1.数据类型和变量
整数(二进制前缀Oo,八进制前缀Ob,十六进制前缀Ox)
浮点数(即小数,另外,0.000012用科学计数法表示是:1.2e-5
)
字符串(是用单引号'
或双引号"
括起来的任意文本)
输出多行字符串时,在.py文件中可以 :print('''nihao
nihao
nihao
nihao''')#记得是三个单引号
布尔值(一个布尔值只有两种值,即True或False,与布尔代数表示一致)
空值(用None表示,切记None与0不同)
变量(变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_
的组合,且不能用数字开头)
2.字符串和编码
ASCII编码:是1个字节
Unicode编码:通常是2个字节
python的字符串
ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符
对字符串进行格式化:
#%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
print('hi,%s,you have $%d.'%('Michael',10000000))
# %还可以用作转义符号
print('hello %s,today is %s %%'%('张三','星期三'))
还可以用format()方法
3.list和tuple
list:是python内置的一种列表,其中的元素可以随意地增减(通过下标索引获取元素)
eg: classmate=['class1','class2','class3']
相关的函数:len()获取list元素个数
pop(),删除末尾元素(pop(i)删除指定下标的元素)
append(),在list末尾追加元素
insert(i,'data'),在指定位置插入元素
tuple:序列表——元组,注意,tuple一旦初始化就不能修改
eg:tuples=('abs','adc')
但是,如果tuple中含有list,则list中的元素可以修改
eg:TUPLES=('abs','adc',['asd','zxc'])#这种情况下的'asd'和'zxc'元素是可以被修改的
3.条件判断
if...else...语句
倘如需要进行多种判断,则可以使用if...elif........elif...else语句
eg:
age=18
if(age>12):
print("sorry")
elif(age>=18):
print("yes")
else:
print("more again")
注意: 该语句的执行特点是:从上往下判断,所以结果是打印"sorry"
4.循环
一种是for...in循环
另一种是while循环
注:continue语句是结束当前循环,然后进入下一轮循环,break是跳出总循环
另外,pass的作用有:空语句(什么都不做),保证格式完整,保证语义完整(即当函数
体或者循环体的内容尚未补充时,可以用pass来替代占个位置)。
5.使用dict和set
dict(全称dictionary),使用键值存储,具有极快的查找速度
d={'Michle':95,'joh':96,'Mandy':95}
print(d['Mandy'])#打印结果是:95
set和dict类似,不过set不存储value,而且key不能重复,有重复的会自动过滤
s=set([1,1,2,3,4])
print(s)#打印结果是:{1,2,3,4}
日期转换
1.先导入库:import datetime
2.获取当前日期和时间:now_time = datetime.datetime.now()
3.格式化成我们想要的日期:strftime()
比如:“2022-07-05”:datetime.datetime.now().strftime('%Y-%m-%d')
#将字符串转换成日期
string = '2022-07-05 12:30:30'
time1 = datetime.datetime.strptime(string,'%Y-%m-%d %H:%M:%S')
print(time1)
#datetime转字符串
time2=datetime.datetime.strptime(time1,'%Y-%m-%d %H:%M:%S')
print(time2)
函数
1.函数的调用
要调用一个函数,需要知道函数的名称和参数,例如:
#求绝对值的函数abs()
print(abs(-100)) #结果打印100
数据类型转换函数:int();float();bool();str()
2.定义函数
定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
eg:#定义my_abs()函
函数的参数
def power(x):#其中的x就是位置参数
return x*x
默认参数:
def power(x,n=2):#其中n=2是默认值
s=1
while n>0:
n=n-1
s=s*x
return s
print(power(2,3))#其中3这个参数如果不传入,那么就会默认为2
这里需要注意的是,默认参数必须放在必选参数(例如本函数的x)的后面;而且,默认参数必须指向不变对象!!
可变参数:
由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:
def calc(a):#将参数用list或者tuple传进来
sum=0
for n in a:
sum=sum+n*n
return sum
print(calc([1,2,3]))#结果是打印:14
当然,我们也可以不传入list或者tuple,此时只需要在参数前面加一个*号,这是参数就可以传入一个或者多个。例如:
def calc_1(*c):
sum=0
for m in c:
sum=sum+m*m
return sum
print(calc_1(1,2,3))#结果是打印:14
此时参数不能再传入list或者tuple,但是可以在list或者tuple前面加一个*,将其元素变成可变参数
关键字参数:
#关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。例如:
def person(name,age,**kw):
print('nmae:',name,'age:',age,'other:',kw)
datas={'city':'beijin','jod':'student'}
person('John',18,**datas)
表示定义关键字参数,在dict前加表示将这个dict的元素变成关键字参数传入
命名参数:
命名关键字参数需要一个特殊分隔符,后面的参数被视为命名关键字参数。
def person_1(name,age,*,city,job):
print(name,age,city,job)
person_1('jack',24,city='beijing',job='student')#除了city和job,其他的都无法被传入
命名参数传入时必须带上参数名,否则会报错
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
递归函数 递归函数即函数内部调用本身。例如
def fact(n):#计算阶乘n!
if n==1:
return 1
return n*fact(n-1)#在此处调用本身
print(fact(10))
模块
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。
模块的好处:
最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
文件读取
读和写文件
open() 将会返回一个 file 对象,基本语法格式如下:
open(filename, mode)
filename:包含了你要访问的文件名称的字符串值。
mode:决定了打开文件的模式
文件对象方法
①f.read()
为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。
②f.readline()
f.readline() 会从文件中读取单独的一行。换行符为 '\n'。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。
③f.readlines()
f.readlines() 将返回该文件中包含的所有行。
如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。
④f.write()
f.write(string) 将 string 写入到文件中, 然后返回写入的字符数。
⑤f.tell()
f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
⑥f.close()
在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置进行定位。
当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。
错误和异常
异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionError,NameError 和 TypeError。错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。
异常处理
我们通常用try...except....对异常进行捕获,系统会执行try中的语句,当系统检测到异常之后,就会和except后面的异常类型进行匹配,如果相同,就会执行except中的语句;如果没有检测到异常,就不会之执行except中的语句。当然一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。
eg:
except (RuntimeError, TypeError, NameError):
......
另外,还可以使用try...except...else语句,当try中的语句没有发生异常时,else中的代码就会被执行。还可以再else后面加上finally,finally中的语句,不管try中有没有发生有异常都会执行。
eg:
try:
x=int(input())
y=int(input())
except ValueError:
print("您输入的不是整数")
else:
print("输入正确")
print(x+y)
finally:
print("测试完成")
抛出异常
Python 使用 raise 语句抛出一个指定的异常。
raise语法格式如下:raise [Exception [, args [, traceback]]]
eg:
r1=4
r2=1
if r2<=4:
raise Exception('r2的值小于r1,r1的值是{},r2的值是{}'.format(r1,r2))
自定义异常
可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
num = input("请输入数字:")
if not num.isdigit(): # 判断输入的是否是数字
raise MyError(num) # 输入的如果不是数字,手动指定抛出异常
except MyError as e:
print("MyError:请输入数字。您输入的是:", e.value)