python第一章(上)
python第一章(下)
程序流控制
- python系列
- @[TOC](程序流控制)
- 前言
- 一、条件表达式
- 关系运算符
- 逻辑运算符
- 二.选择结构
- 单分支结构:if
- 双分支结构 if.....else
- 多分枝结构 if.....elif.....else
- if语句嵌套
- 三.循环结构
- for语句
- 字符串本身迭代
- rang()函数生成迭代序列
- rang函数调用方式
- rang(n)
- rang(m,n)
- range(m,n,d)
- 例子
- while语句
- break和continue语句
- else子句
- 循环嵌套
- 四.andom库的使用
- 五.综合应用
- 顺序结构
- 分支结构
- 循环结构
一、条件表达式 关系运算符
运算符 | 描述 |
---|---|
== | 等于 |
!= | 不等于 |
<> | 不等于 |
“>” | 大于 |
< | 小于 |
“>=” | 大于等于 |
<= | 小于等于 |
- 若正确返回true,否则返回false
- 在python里关系运算符可以连用
a,b=10,20
print("a=",a,"b=",b)
print("a==b",a==b)
print("a,a<b)
print("0,0<a<b)#表示a>0且a
- 运行截图
print('a'>'b')
print('Python'<'python')
- 字符串比较按对于的Unicode编码
- 运行截图
运算符 | 描述 |
---|---|
and | 并且 |
or | 或者 |
not | 取反 |
a,b=10,50
print(a>10 and b<100)#表示a>10且b<100
print(not(a>10 and b<100))#表示将a>10且b<100的结果取反
print(a>10 or b<100)#表示a>10或者b<100
- 运行截图
- 使用各种运算符可以构建不同的表达式
x=x%2==0#(表示x为偶数)
x=x%3==0 and x%10==5#表示x是3的倍数且个位上数字为5
year=(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)#表示year为闰年
(a+b>c) and (b+c>a) and (a+c>b) and (a>0) and (b>0) and (c>0)#表示a,b,c能构成一个三角形
二.选择结构
单分支结构:if
表达式的形式为:
- 条件表达式后面的冒号不可缺少
- 写语句块的时候,代码必须缩进
- 当表达式成立,结果为true的时候,语句块将被执行。
- 若表达式不成立,语句块不会执行,程序会接着执行后面的语句
a = int(input("请输入整数a:"))
b = int(input("请输入整数b:"))
print("输入值 a={},b={}".format(a, b))
if a < b:#如果a < b,则调换a和b
a, b = b, a
print("比较后的值 a={},b={}".format(a, b))
- 运行截图
表达式形式为:
- 同样,后面的冒号不可少
- 如果条件表达式的值为True的,执行语句块1,否则执行语句块2。
- 例1: 编写一段代码,来判断用户输入的字符串是否为回文(从左往右读和从右往左读是一样的比如abcdcba)
str = input("请输入字符串:")
if (str == str[::-1]):
print(str+"为回文串")
else:
print(str+"不是回文串")
- 运行截图
表达式形式为:
#计算BMI值(BMI=体重(KG)÷(身高*身高)(M)))
height = eval(input("请输入您的身高(米):"))
weight = eval(input("请输入您的体重(千克):"))
BMI = weight/height/height
print("您的BMI指数是:{:.1f}".format(BMI))
if BMI < 18.5: print("您的体型偏瘦,要多吃多运动哦!")
elif 18.5 <= BMI < 24: print("您的体型正常,继续保持哟!")
elif 24 <= BMI < 28: print("您的体型偏胖,有发福迹象!")
elif 28 <= BMI < 32: print("不要悲伤,您是个迷人的胖子!")
else: print("什么也不说了,您照照镜子就知道了……")
- 运行截图
- if语句里再用if语句
- 这里给出例子,输一个三位数的整数选最大一位。
num = int(input("请输入一个三位正整数:"))
a = str(num)[0] # 取num的百位数字
b = str(num)[1] # 取num的十位数字
c = str(num)[2] # 取num的个位数字
if a>b:
if a>c:
max_num = a
else:
max_num = c
else:
if b>c:
max_num = b
else:
max_num = c
print(num,"中最大的数字是:",max_num)
- 运行截图
形式为:
- for和in都是关键字,语句中包含了三个部分,其中最重要的就是迭代器。
- 由关键字for开始的行称为循环的头部,语句块称为循环体。
- 语句块需要缩进,且块中各个语句的缩进量必须相同。
#以此打出abcde
for s in "abcde":
print(s, end=" ")
- 字符串类型本身就是一种迭代类型,可以直接放在for语句中作为迭代器使用。
- s作为变量,可以按顺序取到“abcde”中的每一个字符,反复执行语句“print(s, end=" ")”,就输出了每一个字符,
- end=“ ”里面两个空格,防止换行并在每次表达式输出后以两个空格结束。
- 运行截图
#统计英文句子中大写,小写和数字各有多少个
str = input("请输入一句英文:")
count_upper = 0
count_lower = 0
count_digit = 0
for s in str:
if s.isupper(): count_upper = count_upper+1
if s.islower(): count_lower = count_lower+1
if s.isdigit(): count_digit = count_digit+1
print("大写字符:", count_upper)
print("小写字符:", count_lower)
print("数字字符:", count_digit)
- 运行截图
- range是Python中的一个内置函数,调用这个函数就能产生一个迭代序列,因此适合放在for语句的头部。
得到的迭代序列是0到n-1,
for i in range(10):
print(i, end=" ")
- 运行截图
- i可以用不需要初始化等于零
得到的序列是从m到n-1
for i in range(10,20):
print(i, end=" ")
- 运行截图
得到的序列是从m开始,以步长d递增,若d为负数,则递减,直至接近n但不包括n。
for i in range(10,20,2):
print(i, end=" ")
- 运行截图
- 求1到100之和
sum=0
for i in range(1,100+1):
sum+=i
print("sum=",sum)
- 运行截图
- 求1到100奇数偶数之后
sumodd=0
sumeven=0
for i in range(1,100+1):
if i%2==0:
sumeven+=i
else:
sumodd+=i
print("偶数和sumeven=",sumeven)
print("奇数和sumodd=",sumodd)
- 运行截图
- 求正整数n的所有约数,即所有能把n整除的数字
n=int(input("enter a num:"))
for i in range(1,n+1):
if n%i==0:
print(i,end=" ")
- 运行截图
- 表达式为:
- 同样,这里条件表达式后的“:”不可省略,语句块注意缩进。
- 执行while语句的时候,先求条件表达式的值,如果值为True就执行循环体语句块一次,然后重复上述动作;当条件表达式的值为False的时候,while语句执行结束。
- 求1-100之和
#求1-100之和
n=1
sum=0
while n<=100:
sum +=n
n=n+1
print("sum=",sum)
- 运行截图
- 求非负数字序列中的最小值、最大值和平均值。用户输入-1就表示序列终止。
count=0
total=0
num=int(input("enter a num"))
min=num
max=num
while num!=-1:
count+=1
total+=num
if num<min: min=num
if num>max: max=num
num = int(input("enter a num"))
if count>0:
print("the max is{},min is{},average is{}".format(max,min,total/count))
else:
print("NO num")
- 运行截图
- 直接看代码更容易理解
for i in range(1, 10+1):
if i % 3 == 0:
break
print(i, end=' ')
- 运行截图
- 当i是3的倍数的时候,执行break语句。break语句的作用是立刻结束整个for循环,因此输出只有1和2两个数字。
for i in range(1, 10+1):
if i % 3 == 0:
continue
print(i, end=' ')
- 运行截图
- 当i是3的倍数的时候,执行continue语句。continue语句的作用是结束这一轮的循环,程序跳转到循环头部,根据头部的要求继续,因此输出不是3的倍数的所有数字。
- break是直接跳出当前循环,如果是循环嵌套的,break是在里面的循环内,则是跳出里面的循环,外面的循环会继续执行。
- continue是跳过这一次直接进行下一次循环
for i in range(5):
print(i, end = " ")
else:
print("for循环正常结束!")
- 运行截图
- 循环正常结束的时候就会执行else语句
for i in range(5):
print(i, end = " ")
if i >= 3: break
else:
print("for循环正常结束!")
- 运行截图
- 当代码执行到i=4,i大于3的时候,break跳出循环,非正常结束,不执行else
for i in range(5):
for m in range(10):
print("*",end="")
print()
- 运行截图
- 第一次for语句执行行,第二次for语句执行列
- 找出300以内的所有素数
for n in range(2,300):
for i in range(2,n):
if n%i==0:
break
else:print(n,end=" ")
- 第一个for循环是n依此从2选到299,第二个for循环是判断当前n是否能在2和n之前的数能除尽,若没有,正常结束第二个for循环,执行else,若有能和别的数能除尽,则执行break非正常结束循环,不执行else,然后第一个for循环执行下一个数。
- 运行截图
- 打印指定图案
for i in range(1,6):
for m in range(1,i+1):
print("*",end="")
print()
for i in range(1,6):
for m in range(1,6-i+1):
print("*",end="")
print()
- 上面的两个for循环打印图案的上一半。
- Python内置random库,提供了与随机数有关的功能,主要是提供了一些生成各种随机数的函数。
函数 | 描述 |
---|---|
random() | 返回左闭右开区间[0.0,1.0)中的一个随机浮点数。 |
randrange(n),randrange(m,n), randrange(m,n,d) | 返回给定区间里的一个随机整数。 |
randint(m,n) | 相当于randrange(m, n+1)。 |
choice() | 从序列s里随机选择一个元素。 |
uniform(m,n) | 生成一个[m, n]之间的随机小数。 |
sample(pop,k) | 从pop类型中随机选取k个元素,以列表类型返回。 |
shuffle(s) | 将序列类型中的元素随机排列,返回打乱后的序列。 |
seed(n) | 用整数n重置随机数生成器。seed()利用系统当时的时间重置随机数生成器,调用seed函数,相当于要求重新开始一个随机序列。 |
from random import *
print(random())#左闭右开区间[0.0,1.0)中的一个随机浮点数
print(randrange(0,10,3))#在0和10之间从0开始先择间隔3的数
print(choice('ABCDE'))#从字符串随机选一个
print(uniform(1,5))#生成1和5之间的小数
ls=[1,2,3,4,5,6]#这是列表
shuffle(ls)#打乱顺序
print(ls)
print(sample(ls,4))#随机选取列表里的4个元素
seed(125)#先设置随机种字,再用randon产生,只要seed里是125,那么random产生的是相对应125的随机数,不会改变
print(random())
- 运行截图
- 例子
赌场有一种游戏,称为“幸运7”,游戏规则是你丢两个骰子,如果其点数之和为7你就赢4元,不是7你就输1元,请你分析一下,这样的规则是否公平呢?
from random import *
count=0
for i in range(100000):
num1=randint(1,6)
num2=randint(1,6)
if num2+num1==7:
count+=1
print(count/100000)
- 运行截图
- 这里算出相加等于7的概率
- 如果你有10元,那么模拟一下输掉的过程
from random import *
count=0
money=10
while money>0:
num1=randint(1,6)
num2=randint(1,6)
if num2+num1==7:
money+=4
else:money-=1
print(money,end=" ")
- 运行截图
- 求水仙花数(水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身)
for i in range(100,1000):
a=i//100#求出百位
b=i//10%10#求出十位
c=i%10#求出个位
if a**3+b**3+c**3==i:
print(i)
- 运行截图
- 无穷级数
无穷级数4/1 - 4/3 + 4/5 - 4/7 + ……的和是圆周率π,请写一个程序计算出这一级数前n项的和。
n=int(input("请输入项数"))
PI=0
for i in range(1,n+1):
PI=PI+(-1)**(i+1)*(1/(2*i-1))
print("PI=",PI*4)
- 运行截图
- 项数越大,越接近PI
- 斐波那契数列(Fibonacci sequence),指的是这样一个数列:1、1、2、3、5、8、13、21、34、……。这个数列从第3项开始,每一项都等于前两项之和。现要求输出该数列的前n项,每行输出4个数字。
n=int(input("请输入项数"))
x1=1
x2=1
count=2
print("{:>8}{:>8}".format(x1,x2),end="")
for i in range(3,n+1):
x3=x1+x2
print("{:>8}".format(x3),end="")
count+=1
if count%4==0:
print()
x1=x2
x2=x3
- 运行截图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)