python第二章

python系列

python第一章(上)
python第一章(下)
python第三章(上)
python第三章(下)


前言

  • 顺序结构
  • 分支结构
  • 循环结构

一、条件表达式

关系运算符

运算符描述
==等于
!=不等于
<>不等于
“>”大于
<小于
“>=”大于等于
<=小于等于
  • 若正确返回true,否则返回false
  • 在python里关系运算符可以连用
a,b=10,20
print("a=",a,"b=",b)
print("a==b",a==b)
print("a<b",a<b)
print("0<a<b=",0<a<b)#表示a>0且a<b
  • 运行截图
    在这里插入图片描述
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))
  • 运行截图
    在这里插入图片描述

双分支结构 if…else

表达式形式为:
在这里插入图片描述

  • 同样,后面的冒号不可少
  • 如果条件表达式的值为True的,执行语句块1,否则执行语句块2。
  • 例1: 编写一段代码,来判断用户输入的字符串是否为回文(从左往右读和从右往左读是一样的比如abcdcba)
str = input("请输入字符串:")
if (str == str[::-1]):
    print(str+"为回文串")
else:
    print(str+"不是回文串")
  • 运行截图
    在这里插入图片描述
    在这里插入图片描述

多分枝结构 if…elif…else

表达式形式为:
在这里插入图片描述

#计算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语句里再用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语句

形式为:
在这里插入图片描述

  • 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)
  • 运行截图
    在这里插入图片描述

rang()函数生成迭代序列

  • range是Python中的一个内置函数,调用这个函数就能产生一个迭代序列,因此适合放在for语句的头部。
rang函数调用方式
rang(n)

得到的迭代序列是0到n-1,

for i in range(10):
    print(i, end="  ")
  • 运行截图
    在这里插入图片描述
  • i可以用不需要初始化等于零
rang(m,n)

得到的序列是从m到n-1

for i in range(10,20):
    print(i, end="  ")
  • 运行截图
    在这里插入图片描述
range(m,n,d)

得到的序列是从m开始,以步长d递增,若d为负数,则递减,直至接近n但不包括n。

for i in range(10,20,2):
    print(i, end="  ")
  • 运行截图
    在这里插入图片描述

例子

  1. 求1到100之和
sum=0
for i in range(1,100+1):
    sum+=i
print("sum=",sum)
  • 运行截图
    在这里插入图片描述
  1. 求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)
  • 运行截图
    在这里插入图片描述
  1. 求正整数n的所有约数,即所有能把n整除的数字
n=int(input("enter a num:"))
for i in range(1,n+1):
    if n%i==0:
        print(i,end=" ")
  • 运行截图
    在这里插入图片描述

while语句

  • 表达式为:

在这里插入图片描述

  • 同样,这里条件表达式后的“:”不可省略,语句块注意缩进。
  • 执行while语句的时候,先求条件表达式的值,如果值为True就执行循环体语句块一次,然后重复上述动作;当条件表达式的值为False的时候,while语句执行结束。
  1. 求1-100之和
#求1-100之和
n=1
sum=0
while n<=100:
    sum +=n
    n=n+1
print("sum=",sum)
  • 运行截图
    在这里插入图片描述
  1. 求非负数字序列中的最小值、最大值和平均值。用户输入-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")
  • 运行截图
    在这里插入图片描述

break和continue语句

  • 直接看代码更容易理解
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是跳过这一次直接进行下一次循环

else子句

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循环打印图案的上一半。

四.andom库的使用

  • 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="  ")
  • 运行截图
    在这里插入图片描述

五.综合应用

  1. 求水仙花数(水仙花数是指一个 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)
  • 运行截图
    在这里插入图片描述
  1. 无穷级数
    无穷级数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
  1. 斐波那契数列(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
  • 运行截图
    在这里插入图片描述
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X在学了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值