python的后台是PyPI
变量
变量名,通常是由字母、数字和下划线构成,但不能以数字打头;
变量名区分大小写,可以是中文;
变量值可以替换,取决于最后一次赋值
变量值可以传递
x = 3
y = 5
x, y = y, x
print(x,y) #5,3
Python字符串的编写方式多种多样,主要有Single quotes、Double quotes、Triple quoted
- Single quotes:使用一对单引号将文本包含起来
- Double quotes:使用一对双引号将文本包含起来
print("let's go !")
print('i love u')
print('"life is short"')
print('\"life is short"\')
print("\"life is short"\") #转义字符
转义字符
转义字符:都是以”\“开头,紧接着另一个字符构成的特殊的含义
print("I love Python.\nI love fish")
print("D:\\three\\two\\one\\now")
原始字符串raw strings
print(r"D:\three\two\one\now")
加上“r”就说明字符串是一个原始字符串,转义字符将不再有效,只能当作原始的字符,每个字符都没有特殊的含义
“\”不能放到字符串的末尾,反斜杠如果放在末尾就表示这个字符串还没有结束,就可以进行换行,起到一个跨行字符串的作用
长字符串的发明就是为了实现跨行字符串,使用长字符串就不需要再在每一行的末尾都加上一个反斜杠来表示字符串还没有结束
长字符串Triple quoted
也叫三引号字符串,三个单引号或者三个双引号都可以,但是一定要前后呼应成双成对
字符串的加法和乘法
520 + 1314
'520' + '1314'
字符串可以使用加法进行拼接,还可以使用乘法进行复制
print("我爱你\n" * 999)
""" 用Pythoiin设计第一个游戏 """
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
if guess == 8:
print("你是小甲鱼心里的蛔虫吗?")
print("哼,猜中了也没有奖励")
else:
print("猜错啦,小甲鱼现在心里想的是8")
print("游戏结束,不玩啦")
“=” 赋值运算符
“input” 用于接收用户的输入并且返回
int()函数:将里面的内容转换为整数
比较运算符
代码改进
""" 用Pythoiin设计第一个游戏 """
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
if guess == 8:
print("你是小甲鱼心里的蛔虫吗?")
print("哼,猜中了也没有奖励")
else:
if guess < 8:
print("小啦")
else:
print("大啦")
print("游戏结束,不玩啦")
循环结构
while循环语句
while 条件:
如果条件为真(True)执行这里的语句
counts = 3
while counts > 0:
print("hello")
counts = counts - 1
""" 用Pythoiin设计第一个游戏 """
counts = 3
while counts > 0:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
if guess == 8:
print("你是小甲鱼心里的蛔虫吗?")
print("哼,猜中了也没有奖励")
break
else:
if guess < 8:
print("小啦")
else:
print("大啦")
counts = counts - 1
print("游戏结束,不玩啦")
random
生成一个伪随机数
import random #导入模块
random.randint(1,10) #1到10之间的随机整数
""" 用Pythoiin设计第一个游戏 """
import random
counts = 3
answer = random.randint(1,10)
while counts > 0:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
if guess == answer:
print("你是小甲鱼心里的蛔虫吗?")
print("哼,猜中了也没有奖励")
break
else:
if guess < answer:
print("小啦")
else:
print("大啦")
counts = counts - 1
print("游戏结束,不玩啦")
random生成的随机数是可以被重现的,要实现对伪随机数的攻击,那么就要拿到它的种子。
默认情况下,random使用当前操作系统的系统时间来作为随机数种子,可以使用getstate()这个函数来获取随机数种子加工之后随机数生成器的内部状态。
random.getstate()
x = random.getstate()
print(x)
random.randint(1,10)
random.randint(1,10)
random.setstate(x)
random.randint(1,10)
random.randint(1,10)
Python的数字类型
Python有三种不同的数字类型:整数、浮点数、复数
整数 integers
python的整数长度是不受限制的,它有无限大的精度,所以可以随时随地的进行大数运算
121324235444232/12132323343 //结果是小数
python的除法,就算能够被整除,也会产生带小数的结果
小数在python中是以浮点数的形式存放的
浮点数 floating point numbers
0.1 + 0.2 #0.3000000000004
i = 0
while i < 1:
i = i + 0.1
print(i)
python的浮点数之所以是具有误差的,是因为python跟c语言一样,都是采用IEEE754的标准来存储浮点数的,所以会产生一定精度上的误差
由于浮点数不是百分之百精确的,所以拿浮点数来做比较就要特别担心了
0.3 == 0.1 + 0.2 #false
0.3 < 0.1 + 0.2 #true
如何做到精确的计算浮点数
需要借助一个叫作 decimal 的模块
decimal 就是十进制的意思
import decimal
a = decimal.Decimal('0.1') #实例化一个对象,这里的0.1是个字符串
b = decimal.Decimal('0.2')
print(a + b) #0.3
c = decimal.Decimal('0.3')
a + b == c #true
E记法
E记法 即平时所说的科学计数法,用于表示一些比较极端的数
0.00005
5e-05 #5乘以10的-5次方
复数 complex numbers
复数 包含了一个实部和虚部,无论是实部还是虚部,他们都是以浮点数的形式存放的
1 + 2j # 1是实部,2j是虚部 结果:(1+2j)
x = 1 + 2j
x.real #获取实部的数值-----1.0
x.imag #获取虚部的数值-------2.0
数字之间的运算
// 确保两个数相除的结果是一个整数,如果不是整数,则向下取整
3 // 2 # 1
-3 // 2 # 2
取比目标结果小的最大整数-------向下取整
x == (x // y) * y + (x % y)
divmod(3 , 2)
复数没有绝对值,但是有模,abs()返回的结果就是复数的模
z = 1 + 2j
abs(z) #2.23606797749979
int('520') #520
int(3.14) #3
int(9.99) #9 不是四舍五入,是直接抹掉
float('+1E6') #1000000.0
complex("1+2j") #(1+2j) 内部不能有空格,不然会出错
pow(2, 3) #8
2 ** 3
pow()函数支持三个参数,如果传入第三个参数,那么会将幂运算的结果与第三个参数进行取余运算
pow(2, 3, 5) #3
布尔类型
False True
bool("假") #true
bool("False") #true
bool(False) #false
bool(" ") #true
结果为false的情况
Fraction(0,1) ----------- 分子为0,分母为1的有理数
1 == True
0 == False
True + False #1
True - False #1
True * False #0
True / False #出错,除数不能为0
布尔类型就是特殊的整数类型
逻辑运算符Boolean Operations
逻辑运算也叫布尔运算,有了逻辑运算我们就可以将多个比较的结果合并在一起进行判断了
not True #False
not False #True
not 250 #False
not 0 #True
python中任何对象都能直接进行真值测试(测试该对象的布尔类型值为 True 或者 False ),用于 if 或者 while 语句的条件判断,也可以作为布尔逻辑运算符的操作数
短路逻辑和运算符优先级
((not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)) == 4
and 和 or 这两个运算符都要遵从短路逻辑
短路逻辑
短路逻辑的核心思想:从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作时进行求值
3 and 4 #4
4 or 5 #4
0 or 4 #4
"FishiC" and "LOVE" #'LOVE'
"FishiC" or 250 #'FishiC'
从python角度看,根本没有必要将最终的的结果判断完再汇报,直接把影响结果的关键值给扔出来就可以了-------短路逻辑
运算符优先级
not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9 ==4
从低到高,上面优先级最低,下面优先级最高
0 or False #False
流程图
流程图是一种用于表示算法或代码流程的框图组合,它以不同类型的框框代表不同种类的程序步骤,每两个步骤之间以箭头连接起来
函数 function
在流程图中,使用一个有左右两条垂直线的长方形来表示函数的
def temp_conversion(c):
f = c * 1.8 + 32
return f
c = float(input("请输入摄氏度:"))
f = temp_conversion(c)
print("转换成华氏度是:" + str(f))
流程图是线性思维的方式
思维导图
思维导图又叫心智图,是表达发散性思维的有效的图形思维工具,它简单却又极其有效,是一种革命性的思维工具
eg:开发一个小游戏
eg:开发一个页面
思维导图侧重设计,流程图更注重实现
分支和循环
分支结构:
if
判断一个条件:
如果这个条件成立,就执行其包含的某条语句或某个代码块
如果条件不成立,就执行另外的某条语句或某个代码块
if condition:
statement(s)
else:
statement(s)
判断多个条件,如果第1个条件不成立,则继续判断第2个条件,如果第2个条件还不成立,则接着判断第3个条件…
if condition1:
statement(s)
elif condition2:
statement(s)
elif condition3:
statement(s)
在上述情况下添加一个else,表示上面所有的条件均不成立的情况下,执行某条语句或某个代码块
if condition1:
statement(s)
elif condition2:
statement(s)
elif condition3:
statement(s)
...
else:
statement(s)
条件表达式
条件成立时执行的语句 if condition else 条件不成立时执行的语句
if语法结构:
if age < 18:
print("抱歉,未满18岁禁止访问。")
else:
print("欢迎您来")
条件表达式:
print("抱歉,未满18岁禁止访问。") if age < 18 else print("欢迎您来")
small = a if a < b else b
print(small)
score = 66
level = ('D' if 0 <= score < 60 else
'C' if 60 <= score < 70 else
'B' if 70 <= score < 80 else
'A' if 80 <= score < 90 else
'S' if score == 100 else
"请输入0~100之间的分值")
print(level)
一句代码使用多行表示除了在末尾加上反斜杠实现换行外,还可以加上一个封闭的小括号把代码给包裹起来
分支结构的嵌套
age = 18
isMale = True
if age < 18:
print("抱歉,未满18岁禁止访问")
else:
if isMale:
print("任君选购")
else:
print("抱歉,本店商品可能不适合小公举哦")
循环结构
while循环
for循环
while循环
while condition:
statement(s)
love = "yes"
while love == "yes":
love = input("今天你还爱我吗?")
ctrl + c 强制结束
死循环也是可以被设计的
跳出循环体的语句:
break
continue
break
跳出循环体,执行循环体后面的语句
while True:
answer = input("主人,我可以退出循环了吗?")
if answer == "可以!":
break
print("哎,好累~")
art + p 退回到上个语句
continue
只是跳出本轮循环,它还会回到循环体的条件判断位置,然后继续下一轮的循环,如果条件还成立的话,还会执行下一轮的循环
else
i = 1
while i < 5:
print("循环内,i的值是", i)
else:
print("循环外,i的值是", i)
i = 1
while i < 5:
print("循环内,i的值是", i)
print("循环外,i的值是", i)
else语句:当循环不再为真的时候,else语句才会被执行
break语句:跳出循环,条件依旧为真,else语句并不会被执行
i = 1
while i < 5:
print("循环内,i的值是", i)
if i == 2:
break
i += 1
else:
print("循环外,i的值是", i)
while…else实质作用:
day = 1
while day <= 7:
answer = input("今天有好好学习吗?")
if answer != "有":
break
day += 1
else:
print("非常棒,你已经坚持了7天连续学习!")
循环结构的嵌套nested loop
i = 1
while i <= 9:
j = 1
while j <= i:
print(j, "*", i, "=", j * i, end=" ")
j += 1
print()
i += 1
print末尾会自动加一个换行符,end=" "表示不换行,把默认的换行改成“”里的东西
外层循环操纵的是横排的打印,
内层循环操纵的是每一列的打印
无论是break语句还是continue语句,它们只能作用于一层循环体
day = 1
hour = 1
while day <=7:
while hour <=8:
print("今天,我一定要坚持学习8个小时")
hour += 1
if hour > 1:
break
day += 1
for循环
for 变量 in 可迭代对象 :
statement(s)
可迭代对象:元素能够被单独提取出来的对象,比如:字符串
for each in "FishiC":
print(each)
i = 0
while i < len("FishC"):
print("FishC"[i])
i += 1
sum = 0
for i in 1000000:
sum += 1 #出错,'int' object is not iterable ,数字是不可迭代的
range(),帮助生成一个数字序列,经常和for一起使用
range()
range(stop) #从0开始到stop的序列,不包括stop
range(start,stop) #从start到stop,不包括stop
range(start,stop,step) #step可以是负数
无论使用哪一种,参数都只能是整型
for i in range(10):
print(i)
for i in range(5, 10):
print(i)
for i in range(5, 10, 2):
print(i)
for i in range(10, 5, -2):
print(i)
eg:计算0到10000000的和
sum = 0
for i in range(1000001):
sum += i
print(sum)
eg: 0到10之间的素数
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, "=", x, "*", n // x)
break
else:
print(n, "是一个素数")