紧接上一片,for循环的格式是这样的
for 变量 in 集合: #这个变量是集合的单个对象的变量
语句
else: 当所有的元素都被访问了之后,执行else
语句
range() :产生一个集合(start,end,step),返回一个列表,一般用在循环当中
for i in range(5):
print(i)
0,1,2,3,4,
例子:
分别用for 和while 做200 以内的累加
while:
sum=0
i=1
while i<=200:
sum+=i
i=i+1
print(sum)
for:
sum=0
for i in range(1,201):
sum=sum+i
print(sum)
嵌套循环
打印金字塔
*
* * *
* * * * *
* * * * * * *
* * * * * * * *
两个方法:
1、
print( * )
print( * * * )
print( * * * * *)
print(* * * * * * *)
2、
j = 0
n= 10
for i in range(n):
a = n - i
b = 2 * i + 1
for j in range(a):
print(' ', end='')
for k in range(b):
print('*',end='')
print('')
习题:
以这个直角三角为架构:
打印9*9 乘法表:
j = 1
while j <= 9:
i = 1
while i <= j:
print(f'{i} * {j} = {i*j}', end='\t')
i += 1
print()
j += 1
运算符:
算术:
%:取余数
/ :float
//: 整数型
** a**b a的b次方
逻辑关系:
比较运算符:
== 对象是否相等
!=
<> python3 已经不用
>=
<=
赋值运算符
=
+=
-=
*=
%=
逻辑运算符
and
or
not
成员运算符
in 在序列中能找到的 True
not in True
身份运算符:
is 判断两个对象是否引用同一个对 ,True,多数用于类的判断
is not
位运算符
& 与运算 bit 与的操作,如两个位是1结果就是1
| 或运算 bit 有一个为1结果是1
<< 左移动运算符,高位丢弃,低位补0
>> 右移动运算符
运算符的优先级
最高到最低
**
* / %
+ -
<< >>
$
|
比较运算符
is is not
and or 逻辑运算符
分支
if
单分支 if …
双分支 if… else
多路分支 if…elif …else
应用:
把三个数由小到大进行输出 ,使用if
45,565,24
x y z
x,y,z=eval(input("please input the x,y,z:"))
if x>y:
x,y=y,x
if x>z:
x,z=z,x
if y>z:
y,z =z,y
print(x,y,z)
还有一种方法,那就是使用异或
#!/bin/python
x,y,z=eval(input("Please input x,y,z:"))
if x>y:
x=x^y
y=y^x
x=x^y
if x>z:
x=x^z
z=z^x
x=x^z
if y>z:
y=y^z
z=z^y
y=y^z
print(x,y,z)
例子:
判断输入的年份是否是闰年
思路
if 能够被4,但是不能被100整除的或能够被400整除的年份:
print()
else :
print()
#!/bin/python
year=int (input("Please input years:"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0 and year % 3200 != 0) :
print ("闰年")
else:
print ("非闰年")
列子:
猜数字的小程序
随机产生数字的函数
是只有一次机会,改成猜多次的,只要正确的就推出,错误要不停的猜
#!/bin/python
import random
data=random.randint(1,10)
var=1
while var==1 :
guess=int (input("Please input 1-10:"))
if guess==data:
print("OK",data)
exit()
else:
print("Flase.Re input")
data=random.randint(1,10)
if语句嵌套格式
if 表达式:
if 表达式:
语句
else:
语句
elif:
if 表达式:
语句
elif:
语句
练习:
某地出租车的收费方法如下:
1、起步价7元,最多可行驶3公里(不包含3公里);
2、3~8公里(不包含8公里)按1.7元/公里计算(不足1公里,按1公里计算);
3、8公里以后按2.0元/公里计算(不足1公里,按1公里计算)。
编写程序,输入所行使里程数,计算并输出车费。
程序写法会有很多种
#!/bin/python
import math
dis=float (input("Please input: "))
DIS=math.ceil(dis)
if DIS < 0:
print("Please input positive numbers greater than 0")
elif DIS < 3:
money=7
print("Required cost:",money)
elif DIS < 8:
val=DIS-3
money=7+1.7*val
print("Required cost:",money)
else:
val=DIS-8.0
money=7+1.7*5+2*val
print("Required cost:",money)
函数:
def 函数名(参数0 或多个):
函数体
return 返回值
比如:
计算n!
def fact(n):
s=1
for i in range(1,n+1):
s*=i
return s
d=fact(10)
参数
def fact(n,m=1): #m就是可选的参数
print("")
fact(10)
fact(10,5) #m被替换成5 ,m 不给值,默认就是1
def fact(n,*b): *b 表示是一个可变的参数
def fact(n,*b):
print("")
fact(10,3)
fact(10,3,5,3,2)
def fact(n,m=1):
fact(10,5) # 位置传递
fact(n=10,m=5) # 名称传递
fact(m=10,n=9)
函数可以有返回值,也可以没有返回值,0 或多个返回值
def fact(n,m=1):
s=1
for i in range(1,n+1):
s*=i
return s//m,n,m
函数当中的局部变量和全局变量
k,l=10,100 # 全局变量
s=100
def fact(n,m=1):
s=1 # 局部变量
for i in range(1,n+1):
s*=i
return s
print(fact(10),s) # s 是全局变量s=100 的值 ,s不是函数的返回值,fact(10)
全局变量与局部变量
n,s=10,100
def fact(n):
global s # 全局变量了
for i in range(1,n+1):
s*=i
return s
print(fact(10),s) # s 是多少呢?s=fact(10)的值,而不是100
全局变量的规则是
ls=[“f”,“e”,“y”]
def func(a):
ls=[] # 如果我们把这个重新定义,变成局部变量
ls.append(a)
return
func(“c”)
print(ls) # 是否能把c 加入列表呢 ?
总结:
使用规则
1、通常在函数体外定义的变量称为全局变量,在函数体内定义的变量就局部变量。
2、在函数体外定义的全局变量,可以通过global 保留字在函数内部声明全局变量 。
3、在函数体外当定义集合的数据类型后,在函数内如果没有真实的创建,它就全局变量,当集合在函数内重新创建后,它就是局部变量。
关于函数:
通过def 定义函数
有可变参数
return 多个返回值
global 声明全局变量
生成器和迭代器
容器是可以迭代的对象
l1=[1,1,23,4,4]
y=iter(l1)
当我运行:
for i in l1:
print(i)
for 循环要干的事情:python for (反编译过程)
1、y=iter(l1)
2、 where
next()
生成器是成生迭代器的一个函数。
生成器是成生成迭代器的一个函数。
1、通过生成器函数(只需要以yiled 关键字(iter()或next())) 把一个函数编程迭代器
def func(n):
p,c=0,1
where True:
yiled c # 和return
p,c=c,c+p
1,1,2,3,4,8,13,21,34,53
f=func(10)
for i in f:
print()
s1=“sgsgsa”
for i in s1:
2、生成器表示式
a=(x*x for x in range(10))
a变成了一个迭代器