这里是一张夜景,给大家放松一下。
!!无锡南长街
python是一门同时支持面向过程与面向对象的高级语言,由于开放源码的特性,具有移植性好,可跨平台,具有丰富的第三方库。扩展名名为.py
。
python中常见的数字有三种类型·:整数(integer
),浮点数(float
),与复数(complex
)。
这里我来演示一下复数定义:
a=10.0+20.0J # a=10.0+20.0j 这里的j可大写也可小写,需要注意一下,
print (a.real) #虚数是由实部与虚部组成,10.0是实部,20.0是虚部,可以是整数或者其他数值
print(a.imag)
字符串:在其他编译语言里面,字符串一般由双引号组成,而python可以用单引号、双引号、三引号表示。这个是区别于其他的编程语言的。
a="sz"
b='sz'
c='''sz'''
print (a)
print (b)
print (c)
这里需要注意:三引号除了定义单行字符串,也可以定义多行字符串,大家可以去测试一下。在python里面除了是用来定义数值,他还是作为多行注释。
数据类型转换:格式 数据类型(数值)
a=int(10.0)
b=float(10)
c=int('123')
print (a)
print (b)
print (c)
这里需要注意,如果要转换字符串,那么被转换的字符串里面,一定要是数值,不能是字母!
定义标识符命名规则:
(1)用户标识符由数字、字母(区分大小写)、下划线,汉字组成。
(2)以字母或下划线开头。
(3)不可选用关键字,关键字不可以做为用户标识符。
(4)区分大小写。
练习:下列哪一个是合法的用户自定义标识符______。答案:C
A、while (不可以选择关键字)
B、begin?end (?不可以出现在自定义标识符中)
C、__for
D、2nd_run (数字不可以开头)
and | as |
---|---|
assert | break |
continue | class |
def | del |
elif | else |
expect | for |
finally | from |
False | global |
if | import |
in | is |
lambda | not |
nonlocal | None |
or | pass |
return | try |
True | while |
with | yield |
运算符与表达式:
`*` : **例**: 2*8结果为16,“hello”*2结果为“hellohello”
`+` : **例**: 2+8结果为10,”hi“+”你好“结果为”hi你好“
`/` : 实数(浮点)除法,最后结果一定为小数 **例**:2/8结果为0.25
`//` : 整数除法(向下取值), **例**:2//8结果为0, -13//3结果为-5
`%` : 取余数, **例**:2%8结果为2
**
: 乘方(次方),例:2**3结果为8
练习:可利用//
(整除)和%
(求余也称为模运算)对一个整数进行各位数字的分离,对于一个变量num = 12345
来说,以下能取到其百位数3的表达式________
结果:12345//100%10
< 、 > 、 >=、 <= 、 == 、!=
(注意 =
与==
的区别)
not 、or、and
表达式
①正确书写编程语言中的表达式,注意与数学表达式的区别
②条件表达式: y = True if a>b else False
这里的条件表达式,运算规则,如果if
后面的条件成立,则输出if
前面的表达式,否则输出else
后面的表达式。
input:输入;默认为字符串类型
print:输出;默认分隔符为空格,结束标识符为换行。
print('{:.4e}'.format(234.56789))
# 用科学计数法,表示数字,并且保留四位小数
#结果为2.3457e+02 ,
程序流程的三种基本结构是顺序结构,选择结构、循环结构。
赋值语句和函数调用语句是控制该结构的主要语句。函数调用语句中最常用的是:input()和print()
用if…else、elif实现。
if语句有三种形式:单分支if、双分支if…else、嵌套if…elif…,if后的条件通常是关系或逻辑表达式,但是实际语法上可以是任何表达式,仅以该表达式是0或非0来判断条件的假或真。
if (x==y) : x与y相等结果为True,不相等则结果为False
(1)Python 用while
和for…in…
来构造两种不同的循环结构。
注意while属于当型循环,若while
后的条件为True
则继续循环,若为False
则结束。
(2)for…in…
是遍历序列中的每一个项目。
(3)辅助流程控制语句:break
和continue
循环体内满足某条件执行break
语句则提前结束循环。
在循环体中可以用continue
表示忽略本次循环体中的后续语句,重新开始下一次循环条件的判断,以便决定是否要继续循环。
注意:在循环时候要注意循环条件
比如: for in range (0,4):
这里一共循环四次,因为循环条件里面是“包前不包后”的。
我们一起来看两道题目:
练习题:(代码答案在照片下面)
1、编写程序,以每行五个形式输出100以内的所有素数(质数)。
2、编写程序,输出100到1000之间的所有水仙花数,输出格式不限,(水仙花数是指一共三位数,每一位的立方和为该数本身)。
1、
count=0
for i in range(3,100):
for j in range(2,i):
if(i%j==0):
break
else: #else放在这个位置,是为了将内部整个循环都遍历完了,再将符合条件的数输出,而不是每遍历一个,就输出一次该数
print(i,end=" ")
count+=1
if count%5==0:
print("\n")
2、
for i in range(100,1000):
a=i%10
b=i//10%10
c=i//100
if a**3+b**3+c**3==i:
print(i)
如果上面两题都做了的话,意犹未尽,可以尝试做下面这题:
利用递归/非递归方法来对斐波那契数列问题的求解。
#递归
def fib2(n):
def fib3(i):
if i<2:
return 1
else:
return fib3(i- 1) + fib3(i - 2)
for i in range (0,n): #输出所有数值
print(fib3(i))
#非递归
list=[]
def fac(n):
for i in range (0,n):
if i==0 or i==1:
list.append(1)
else:
list.append(list[i-2]+list[i-1])
print(list)
fib2(3)
这里我想再和大家分享一些教训:
#输入的是第n个数
def fib2(n):
if n == 1 or n == 2:
return 1
else:
return fib2(n - 1) + fib2(n - 2)
print(fib2(3))
其实我们前面的一些算法里面已经使用过函数了,可以看出,有一个固定的格式:
def 函数名(参数): #定义
....
函数体
....
函数名(实参) #调用
函数若有返回值,可以用return
表达式将值返回给调用方。return
可以是一个值,也可以返回多个信息。
在函数调用时候需要注意,有一个规则,“定义是从右向左依次定义,赋值是从左到右”。
#注意,这里是形参的定义,不是调用
def gac(a=1,b=1,c=1):
def gac(a=1,b=1,c):
#这里就不行,因为它跳过了最右边的c赋值,应该从c开始,赋值顺序是cba,
#当然也可以是下面这种情况;
def gac(a,b,c=1):
#调用
def gac(x,y=2,z=2):
#我们现在调用这个函数,赋值顺序应该是从最左边开始,第一个x并未给值,
#那么此时的形参的默认值就会给到x,即为x=1(这里的1是a给的)
这里我在第一篇有讲过,大家可以点下面链接:匿名函数相关函数的定义与使用
这里我想为大家在拓展一个输入函数,就是input()
的使用,如果我们想要同时输入多个值得话,可以通过下面函数实现:
a,b=map(int,input().split())
#map(类型,input.split()),split(),括号里面是我们输入多个值时候得分隔符。
#比如我们输入1,2 那么split()可以写成split(",")。
(1)全局变量——在所有函数之外定义的变量,可以被整个程序中的其他语句访问。
(2)局部自动变量——在某函数内部定义的变量,只能被定义它的函数中的语句访问。
注意:在函数中可以使用global
声明变量,表示该变量是在函数外定义的全局变量。
模块是以.py
结尾得文件,只要在其他函数或文件中引用该模块就可以调用其中函数。
有以下几种引用方法:
import 模块
from 模块名 import 函数名
from 模块名 import*
我在之前一篇也详细讲了各种函数的用法,可以从点击这里跳转:
列表、元组、字符串详细解说
下面的讲解是对前面一篇的补充,可以先看前面的一篇,再回来看看就会简单许多。
元组是不可改变元素值的序列
tup1 = (1,2,3,4,5)
tup1[1:4] #使用分片访问元组的一段元素
(2,3,4)
tup2 = (‘a’,’b’,’c’)
tup3 = tup1 + tup2
(1,2,3,4,5,’a’,’b’,’c’)
定义元组时候,需要注意一种特殊的列子:
(12,)
与(12)
这两个是不同的意思,
第一个是定义元组,我们在元组里面只定义一个数值,那么一定要在数值后面加上逗号,否则的话,仅仅表示数值。
列表是Python中最常用的数据结构之一,一个列表中可以存放多个数据。
可以创建列表、访问列表(可以用索引或分片访问列表中的元素)、修改列表元素的值、删除列表元素。
常用的操作方法:
append,clear,copy,extend,insert,index,count,remove,reserve,sort
内置函数:
len、max、min、sorted
定义:字符串是由字母、数字、下划线组成的一组字符,用一对引号包含。
’ My name is %s ’ % ( ’ Tom ’ )
My name is Tom
在%
的左侧放入需要格式化的字符串,右侧放入希望格式化的值。这个值可以是字符串或数字,或和元组、字典。其中的%s
是格式化符,它们标记了需要插入值得位置,并且该值转为字符串类型。
print('my name is %s'%('sz'))
print('my name is %f'%(20))
print('my name is %c'%('a'))
find()
方法:
val=‘I love hmz’
val.find(‘love’)
2 //若有该内容则返回其下标
val.find(‘name’)
-1 //表示没有该字符
join()
方法:
使用字符串中得该方法,可以在队列中添加元素,需要注意的是,需要添加得队列元素必须都是字符串类型的数据。
作用:将队列中的字符串通过val1连接在一起
val=[ ’ 1 ’ , ’ 2 ’ , ’ 3 ’ , ’ 4 ’ , ’ 5 ‘]
val1=’ * ’
val1.join(val)
’ 1* 2 * 3 * 4 * 5 ’ //输出
split()
方法:
该方法是join的逆方法,可以将连接的字符串分开。
str=’ 1* 2 * 3 * 4 * 5 ’
str.split(’ * ')
[ ’ 1 ’ , ’ 2 ’ , ’ 3 ’ , ’ 4 ’ , ’ 5 '] //输出
strip()
方法:
该方法时为了去除字符串两端的空格。
val=' I love hmz'
val.strip()
print(val)
# 输出:'I love hmz'
lower()
、upper()
两个方法
val='I love hmz'
print(val.upper())
print(val.lower())
这里给大家出一道题目,编写程序,输入一段英文,输出该句子中字母为3的单词。
答案在图片下面:
str1=input().split(' ')
for i in str1:
if(len(i)==3):
print(i)
字典是Python中唯一内建的映射类型,字典中的值没有特殊的顺序,但存储在特定的键下。字典有多个键值对组成,键和值之间通过冒号分隔。元组可以作为键,列表不可以作为键。
来看一段代码:
name = ['lin','wang','zhang']
dictionary = {i:0 for i in name}
print(dictionary)
while True:
vote = int(input())
if vote == 1:
dictionary['lin']+=1
elif vote == 2:
dictionary['wang']+=1
elif vote == 3:
dictionary['zhang']+=1
else: break
print(dictionary)
这里先建立name
为名的列表。之后建立字典,而键(key)时name中相对应得字符串。
集合有几个特点:
看代码理解:如下
a=set('123456') #创建一个集合 固定格式set()
a=set('aabbcdee')
print(a)
add()`方法:
#创建一个集合 固定格式set()
a=set('i love')
a.add('hmz')
print(a)
这里后加入得hmz
时作为一个整体加入集合中,因而最后输出不需要拆分。
update()
方法:
#创建一个集合 固定格式set()
a=set('i love')
a.update('hmz')
print(a)
而采用update
,就是将所要添加得元素以拆分,最后形成单个字符加入集合里面。
只能删除已有元素,这里需要记住。
a=set('123456')
a.remove('2')
print(a)
我在之前文章也提到过该模块:(可点击下面链接跳转)
类与对象的定义:定义类的格式,对象实例化,对象属性与类属性,初始化方法
来看一段代码:
#定义类的格式,对象实例化,对象属性与类属性,初始化方法
class Stu: #创建类(学生类)
def __init__(self,name,age,sex): #初始化方法,也就是其他编程语言里面的构造方法
self.name=name
self.age=age
self.sex=sex
def get_name(self):
print(self.name)
def get_age(self):
print(self.age)
def get_sex(self):
print(self.sex)
def get_allinfor(self):
print("姓名:{},年龄:{},性别:{}".format(self.name,self.age,self.sex))
stu=Stu("sz",21,"men") #对象实例化
stu.get_age() #用对象访问方法
stu.get_name()
stu.get_sex()
#也可以通过直接访问类属性来进行输出
print(stu.name)
print(stu.age)
print(stu.sex)
#也可以定义方法直接输出所有
stu.get_allinfor()
注意:__init__()
在创建对象
时由系统自动调用,访问类的数据成员,类的继承。
#定义类的格式,对象实例化,对象属性与类属性,初始化方法
class Stu: #创建类(学生类)
def __init__(self,name,age,sex): #初始化方法,也就是其他编程语言里面的构造方法
self.name=name
self.age=age
self.sex=sex
def get_name(self):
print(self.name)
def get_age(self):
print(self.age)
def get_sex(self):
print(self.sex)
def get_allinfor(self):
print("姓名:{},年龄:{},性别:{}".format(self.name,self.age,self.sex))
class Son(Stu): #括号里面写父类名
def __init__(self,name,age,sex,mark):
Stu.__init__(self,name,age,sex)
self.mark=mark
def get_allinfor(self):
print("姓名:{},年龄:{},性别:{},成绩:{}".format(self.name,self.age,self.sex,self.mark))
son=Son("sz",21,"men","good") #对象实例化
son.get_allinfor()
我在之前文章也提到过该模块:(可点击下面链接跳转)
我们来看一段代码加以理解,基础部分可以看上面链接:
#常用组件Button,Label,Entry,Listbox的作用。
import tkinter as tk
top=tk.Tk() #创建顶层窗口对象
top.title("hello") #创建窗口标题
lab1=tk.Label(top,text="yours name:") #创立标签,放入top的窗口
lab2=tk.Label(top,text="copy your name:")
entry1=tk.Entry(top) #创立文本框,放入top的窗口
entry2=tk.Entry(top)
lab1.pack() #与调用pack()顺序有关
entry1.pack()
lab2.pack()
entry2.pack()
def button_click( ): #动作事件:将文1内容复制给文2
entry2.delete(0,tk.END) #清空文2内容
text=entry1.get() #提取文1
entry2.insert(0,text) #复制
btn=tk.Button(top,text="copy",command=button_click)
btn.pack()
top.mainloop()
学习目标:设置画笔的颜色、调整画笔角度、向前移动、向后移动、提笔、落笔、绘画速度、RGB色彩格式、Turtle坐标系
import turtle #导入库
turtle.color("red") #为画笔上色
for i in range(5):
turtle.forward(100) #前进100
turtle.right(144) #右转144度 这里需要注意,是在原地转
turtle.forward(100)
turtle.left(72)
turtle.done() #结束当前绘图工作
为大家在下面列举常用的函数:都是通过turtle.
来访问
操作符 | 功能 |
---|---|
forward (distance)/ fd(distance) | 沿着海龟当前方向前进一段距离 |
back(distance) / bk(distance) / backword(distance) | 沿着海龟当前方向后退一段距离 |
right(angle) / rt(angle) | 右转角度 |
left(angle) / lt(rangle) | 左转角度 |
goto(x,y=None) | 将海龟移动到指定位置 |
setheading(to_angel) / seth(to_angle) | 将海龟的朝向调整到某个角度 ,0°朝右,180°朝左 |
circle(radius,extent=None,steps=None) | radius是圆弧的半径,extent是有关角度,用来画圆弧 |
begin_fill() | 从海龟当前位置开始设置填充颜色 |
end_fill() | 从海龟当前位置开始结束填充颜色,完成填色 |
注意:(考点)
-海龟的位置,是一个箭头标志,并不是海龟
speed()
,要想直接得到图形,在参数里面设置速度为0
即可。我在之前文章也提到过该模块:(可点击下面链接跳转)
异常处理方法:
有以下常见的异常
NameError
尝试访问一个没有声明的变量引发的错误IndexError
索引超出序列范围引发的错误IndentationError
缩进错误ZeroDivisionErro
r除数为0引发的错误SyntaxError
语法错误看个代码:
for i in range (0,4):
try:
a=12
c=a/i
print(c)
except ZeroDivisionError: #此处可写异常,可不写
print("{}处出错了".format(i))
文件操作的步骤
打开文件: f = open(“book.txt”,’w’)
或者 with open(“book.txt”,’w’) as f
打开文件方式: r,w,a,b,+进行组合
读文件 str = f.read() str = f.readlines()
使用readlines函数可以读取文件中所有的行
with open("student.txt","r") as file: #或者file = open("D:/li07-1.txt", 'r'):
for line in file.readlines():
l = line.rstrip('\n').split("\t")
for x in l:
print(x,end=',')
print()
第一篇万字文章,大概花了一个星期为大家整理了python知识点,可用于初学者,复习的等等
快快分享给你的伙伴吧!