程序=算法+数据结构
id():获得变量的身份标识,即变量分配的内存地址标识
type():获取其数据类型
upper()函数:实现小写字母转化为大写字母
Python运算符优先级是指运算符的优先级顺序,用于确定在表达式中哪些运算符会首先被计算。以下是Python常见的运算符优先级从高到低的顺序:
- ( ) : 括号
- ** : 幂运算
- ~ + -:单目运算,按位取反、正、负
- *, /, //, % : 乘法、除法、整除、取模
- +, - : 加法、减法
- <<, >> : 位左移、位右移(二进制中的1左右移动)
- & : 位与
- ^ : 位异或(如果两个对应的二进制位相同,则结果为0;如果两个对应的二进制位不同,则结果为1)
- | : 位或
- <, <=, >, >=, ==, != : 比较运算符
- not : 逻辑非
- and : 逻辑与
- or : 逻辑或
算数运算符>位运算符>关系运算符>逻辑运算符
注意:在表达式中遇到优先级相同的运算符时,Python将按照从左到右的顺序进行运算。如果想要改变运算的顺序,可以使用括号来明确指定。
基本数据类型
Python有数字类型、字符串类型、布尔类型等常规数据类型,还有Python特色的列表、元组、字典和集合数据类型。
数字类型
Python语言提供整数、浮点数、复数三种数字类型。
整数类型
十进制:默认情况
二进制:0b或0B,如0b101
八进制:0o或0O,如0o711
十六进制:0x或0X,如0xABC
取值范围受限于运行Python程序的计算机内存大小,一般认为没有取值范围限制。
pow(x, y)函数是Python语言的内置函数,用于计算。
浮点数类型
例:4.3e-3的值为0.0043,9.6E+5的值为960000
Python语言只能提供浮点数的15位数字的精确计算,但能够支持无限制且准确的整数计算
标准库decimal提供了一个更精确的数字类型Decimal,它利用整数运算方法提供高精度浮点数运算,并可以用getcontext().prec参数自定义浮点数精度的位数
import decimal
a = decimal.Decimal('3.141592654')
b = decimal.Decimal('1.23456789')
decimal.getcontext().prec = 18
print("{}".format(a*b))
浮点数的运算存在误差,故应该尽量避免在浮点数之间直接进行相等性测试,而应该以二者之差的绝对值是否足够小作为两个实数是否相等或相近的依据
>>>0.5 - 0.4 == 0.1
FALSE
>>>abs(0.5 - 0.4 - 0.1) < 1e-6
TRUE
复数类型
Python中,复数的虚数部分通过后缀“J”或“j”来表示,实数部分和虚数部分的数值都是浮点类型,可以用z.real和z.imag分别获得它的实数部分和虚数部分
1.23e-4+5.67+89j.real=0.000123
1.23e-4+5.67+89j.imag=5.67e+89
x.conjugate():共轭复数
数字类型的操作
内置的数值运算操作符
注:只展示了和C语言不同的地方:
x//y:x和y的整数商,即不大于x与y的商的最大整数,符号由除数决定
x**y:x的y次幂数字类型之间相互运算所生成的结果是“更宽”的类型,基本规则如下:
(1)整数之间运算,如果结果是整数,则输出整数,小数则输出浮点数
(2)整数和浮点数混合运算,输出浮点数
(3)整数或浮点数与复数运算,输出浮点数
内置的数值运算函数
abs(x):x的绝对值,若x输入为复数,也表示复数的绝对值
divmod(x,y):(x//y,x%y),输出为二元组形式
pow(x,y[,z]):与(x**y)%z相同,但比后者速度更快
round(x[,ndigits]):对x四舍五入,保留ndigits位小数,不输入默认返回整数值
max(x1,x2,x3,...,xn):x1到xn的最大值,n无限定,min同理bin():将整数转换为二进制
oct():转换为八进制
hex():转换为十六进制
字符串类型
可以使用单引号、双引号、三个单引号、三个双引号作为定界符来表示字符串
>>> x = ' ' ' He said, "Let's go." ' ' '
>>> print(x)
He said, "Let's go."
字符与编码转换函数:ord() / chr()
>>> ord( 'a' )
97
>>> chr(65)
'A'
数字与字符串转换函数:str() / eval()
>>> str(1234.5)
'1234.5'
>>> eval('1234.5')
1234.5
布尔类型
布尔类型数据只有True和False两个值,分别用1和0表示
>>> True and False #与运算
False
>>> True or False #或运算
True
列表、元组、字典、集合
分别用[]、()、{}、{}作为定界符,详细介绍在下一周。
基本运算
位运算
运算符 | 功能说明 | 例子 |
| | 位或 | 3 | 5 = 7 |
^ | 位异或 | 3 ^ 5 = 6 |
& | 位与 | 3 & 5 = 1 |
<< | 左移位 | 3 << 2 = 12 |
>> | 右移位 | 16 >> 2 = 4 |
~ | 位求反 | ~ 3 = -4 |
注意取反操作:
因为计算机中存储的是补码,取反也是对补码进行。所以输入一个数取反,输出的是该数的补码取反的结果。
例:对1进行位取反操作
1原码:00000001
#对于原码中的正数,补码和原码相同,故1的补码同上;
#对于原码中的负数,先将原码的符号位保持不变,其余位取反,然后在最后加1。
1的补码取反:11111110
#已知补码求原码:开头1则取反+1,正数则直接原码等于补码
故该补码表示的数是:10000001>>>10000010>>>-2
比较运算
Python支持连续不等式(好混乱,同时学C和Python感觉要长脑子了。。。)
>>> 2 < 5 < 7
True
>>> 3 < 5 > 2
True
成员运算
用于判断一个对象是否包含另一个对象:in / not in
>>> 2 in [1,2,3,4,5]
True
>>> 3 not in [1,2,3,4]
False
对象运算
用于判断两个量是否引用同一个对象(相同内存空间):is / is not
>>> a = 3.2
>>> b = 3.2
>>> c = a
>>> a is b
False
>>> a is c
True
is 和 == 的区别:is 用于判断两个变量引用的对象是否是同一个内存空间,==用于判断两个变量的值是否相等。但!Python为了提高效率,会将相等的小整数([-5,256])放入同一个缓存空间。
==进行值的比较,is比较内存空间地址,输出True或False:
[-5,256]之内的两个相同的整数用is比较,返回True,其余(超过该范围的整数、浮点数)返回为False。
函数与模块
常用函数
input()函数:返回结果均为字符串形式
形式:变量 = input("提示性文字")
TempStr = input("请输入温度值:")
eval()函数:eval("字符串")的作用是将输入的字符串转变为Python语句并执行
eval("hello"):eval()函数去掉两个引号,hello被解释成一个变量
eval("'hello'"):'hello'被解释成字符串
input输入的是字符串,eval()可以将其转化为数字进行计算:
value = eval(input("please input a number:"))
print(value*2)
print()函数
print("The temperature is {}C".format(C))
print("The temperature is {:.2f}C".format(C))
{:.2f}表示输出数值取两位小数点
print("hello","world", sep='*')
输出:hello*world
调用函数库
用turtle函数库来绘制蟒蛇图案
#DrawAPython.py(#用于注释)
import turtle
turtle.setup(650,350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
import turtle:调用函数,turtle库用于绘制图形
xxx.xxx():用于表示调用一个对象的方法,或者表示调用一个函数库中的函数
使用import引用函数库的方式:
①
import <库名>
此时,程序可以调用库名中的所有函数,格式如下:
<库名>.<函数名>(<函数参数>)
②
from <库名> import <函数名1,函数名2,...>
from <库名> import *
其中*表示所有函数,此时调用该库的函数不需要使用库名,格式如下:
<函数名>(<函数参数>)
因此第一个绘制蟒蛇的程序可以修改为:
#DrawAPython.py(#用于注释)
from turtle import *
setup(650,350,200,200)
penup()
fd(-250)
pendown()
pensize(25)
pencolor("purple")
seth(-40)
for i in range(4):
circle(40,80)
circle(-40,80)
circle(40,80/2)
fd(40)
circle(16,180)
fd(40*2/3)
turtle库语法元素分析
1、turtle.setup()
turtle.setup(width, height, startx, starty)
作用:设置主窗体的大小和位置
width:窗口宽度。若值为整数,表示像素值;若为小数,则表示窗口宽度与屏幕比值。height同理。
startx(y):窗口左侧(顶部)与屏幕左侧的像素距离,若值为None,则窗口位于屏幕水平中央。
2、turtle.penup()和turtle.pendown()
1、penup:抬起画笔,之后移动画笔不绘制形状
2、pendown:落下画笔,移动画笔绘制形状
3、turtle.pensize()和turtle.pencolor()
用于设置画笔宽度和颜色
1、turtle.pencolor("colorstring")
2、turtle.pencolor((r,g,b))
#第二种在使用前需要调用函数colormode()
例:
colormode(255)
turtle.pencolor((0, 0, 255))
4、turtle.fd()和turtle.seth()
fd():用于控制画笔当前前进方向前进的距离
seth():用于设置前进的方向(角度)
5、turtle.circle(radius, extent)
用于根据半径radius绘制extent角度的弧形
radius:值为正时,半径在海龟左侧,反之在右侧
extent:不设置参数或设置为None时,绘制整个圆形
函数的封装
def drawSnake(radius, angle, length)
#DrawAPython.py(#用于注释)
from turtle import *
def drawSnake(radius, angle ,length):
seth(-40)
for i in range(length):
circle(radius, angle)
circle(-radius, angle)
circle(radius, angle / 2)
fd(40)
circle(16, 180)
fd(40 * 2 / 3)
setup(650, 350, 200, 200)
penup()
fd(-250)
pendown()
pensize(25)
pencolor("purple")
drawSnake(40, 80, 4)
done()
最后一行turtle.done函数用于停止在绘图界面而不直接退出
程序练习题
1、使用turtle函数库绘制一条直线、一个完整的圆、一个包含9个同心圆的靶盘
2、按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序
3、绘制一条彩色的蟒蛇,即在每个小段,画笔的颜色发生变化
4、绘制一个正方形螺旋线
参考:
#绘制一条直线
from turtle import *
setup(650, 350, 200, 200)
penup()
fd(-250)
pendown()
pensize(20)
pencolor("black")
seth(0)
fd(500)
done()
#绘制一个完整的圆
from turtle import *
setup(650, 350, 200, 200)
penup()
fd(-100)
pendown()
pensize(20)
pencolor("black")
seth(-90)
circle(80, None)
done()
#绘制一个靶盘
from turtle import *
setup(650, 350, 200, 200)
for i in range(1, 10):
penup()
seth(-180)
fd(10)
pendown()
pensize(1)
pencolor("black")
seth(-90)
circle(10*i, None)
done()
#美元与人民币互换
MonStr = input("请输入带有单位的钞值:")
if MonStr[-1] in ['R', 'r']:
D = (eval(MonStr[0:-1]))/6
print("转换为美元为{}元".format(D))
elif MonStr[-1] in ['$']:
R = (eval(MonStr[0:-1]))*6
print("转换为人民币为{}元".format(R))
else:
print("输入格式错误")
#DrawAPython.py(#用于注释)
from turtle import *
from random import *
def drawSnake(radius, angle ,length):
seth(-40)
for i in range(length):
colormode(255)
pencolor(randint(0,255),randint(0,255),randint(0,255))
circle(radius, angle)
circle(-radius, angle)
pencolor(randint(0, 255), randint(0, 255), randint(0, 255))
circle(radius, angle / 2)
fd(40)
circle(16, 180)
fd(40 * 2 / 3)
setup(650, 350, 200, 200)
penup()
fd(-250)
pendown()
pensize(25)
drawSnake(40, 80, 4)
done()
#正方形螺旋线
from turtle import *
setup(650, 350, 200, 200)
pendown()
pensize(1)
pencolor("black")
angle = 90
seth(angle)
for i in range(1,20):
seth(angle)
fd(10*i)
angle += 90
seth(angle)
fd(10*i)
angle += 90
done()