百战python04-循环结构

本文介绍了Python中的循环结构,包括for-in循环和while循环。通过趣味进度条引入,详细讲解了for-in循环的语法、range()函数的使用,以及练习案例。同时,文章探讨了while循环的实现,如猜数字游戏,并提到了break和continue的使用。此外,文章提供了四个编程练习,如判断素数、求最大公约数和最小公倍数等。
摘要由CSDN通过智能技术生成


注:需要对python有基本了解,可查看本作者python基础专栏,有任何问题欢迎私信或评论(本专栏每章内容都将不定期进行内容扩充与更新)


趣味进度条:通过一个简单的进度条来进入循环的世界吧

使用第三方库函数,实现简单的进度条

import tqdm
import time
for i in tqdm.tqdm(range(100)):
    time.sleep(0.1)

在这里插入图片描述

for-in循环

在这里插入图片描述

语法

for 变量名 in 可迭代对象: #可迭代对象:字符串\列表\字典,也可以是tuple(),set()

内置函数range()

range(起始数,截止数,步长) #注意左闭右开
在这里插入图片描述

练习:累和

如果明确的知道循环执行的次数或者要对一个容器进行迭代,那么我们推荐使用for-in循环,例如下面代码中计算1~100求和的结果:

"""
用for循环实现1~100求和
"""

sum = 0
for x in range(101):
    sum += x
print(sum)

用for循环实现1~100之间的偶数求和

"""
用for循环实现1~100之间的偶数求和
"""

sum = 0
for x in range(2, 101, 2):
    sum += x
print(sum)
"""
也可以通过在循环中使用分支结构的方式来实现相同的功能:
用for循环实现1~100之间的偶数求和
相较于上面直接跳过奇数的做法,下面这种做法很明显并不是很好的选择
"""
sum = 0
for x in range(1, 101):
    if x % 2 == 0:
        sum += x
print(sum)

下面是使用for循环对字符串(第一个for)、range函数的循环取值示例

#for-in 循环
for i in 'pyhton':
   print(i)
for i in range(10):
   print(i)
for _ in range(5):#在不用变量的情况下,执行五次
   pass
#1-100偶数和
sum=0
for i in range(1,101):
    if i%2==0:
        sum+=i
print(sum)
##程序执行结果如下图所示

在这里插入图片描述

for循环对字典、列表取值(后面会讲解字典,列表)

# 下面为字典
dic = {'name':'lsj','age':18,'gender':'male'}
for k in dic:  # for 循环默认取的是字典的key赋值给变量名k
    print(k,dic[k])
# 下面为列表
l = ['ljg','a','b']
for x in l:
    print(x)
# 打印结果如下

在这里插入图片描述
在这里插入图片描述

while循环

如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环。while循环通过一个能够产生或转换出bool值的表达式来控制循环,表达式的值为True则继续循环;表达式的值为False则结束循环。

注:for循环是python提供第二种循环机制(第一种是while循环),理论上for循环能做的事情,while循环都可以做。

while循环实现猜数字小游戏

"""
猜数字游戏
通过一个“猜数字”的小游戏来看看如何使用while循环。猜数字游戏的规则是:计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
"""
import random
answer = random.randint(1, 100)
counter = 0
while True:
    counter += 1
    number = int(input('请输入: '))
    if number < answer:
        print('大一点')
    elif number > answer:
        print('小一点')
    else:
        print('恭喜你猜对了!')
        break
print('你总共猜了%d次' % counter)
if counter > 7:
    print('你的智商余额明显不足')
"""
上面的代码中使用了break关键字来提前终止循环,需要注意的是break只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了break之外,还有另一个关键字是continue,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。
"""

结束循环的操作break、continue

break 结束整个循环
continue结束当前循环
下面的比较将比较直观

break:

for i in range(1,10):
    if i==3:
        break
    else:
        print('i=',i,'被循环访问到了')

在这里插入图片描述
continue:

for i in range(1,10):
    if i==3:
        continue
    else:
        print('i=',i,'被循环访问到了')

在这里插入图片描述

练习

1:输入一个正整数判断是不是素数

"""
输入一个正整数判断它是不是素数
素数指的是只能被1和自身整除的大于1的整数
sqrt() 用来求给定值的平方根
"""
from math import sqrt
num = int(input('请输入一个正整数: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
    if num % x == 0:
        is_prime = False
        break
if is_prime and num != 1:
    print('%d是素数' % num)
else:
    print('%d不是素数' % num)

为什么判断一个数是否为素数时只需开平方根就行了

这属于算法上的问题,好好考虑一下算法,还要考虑一下素数的定义。
素数是只有1和本身能整除的整数。所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数了。但是从算法上考虑,为了减少重复量,开平方后面的数就不用相除了,因为a/b(平方数)=c(小一点的数),同样a/c=b。举例说明:
25,开平方以后是5,那么整除2~5就可以了,如果有满足条件的,就是素数。
这样做可以减少循环次数,素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt© ,一个小于sqrt© 。所以m必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。

2:输入两个正整数,计算它们的最大公约数和最小公倍数

"""
输入两个正整数计算它们的最大公约数和最小公倍数.
两个数的最大公约数是两个数的公共因子中最大的那个数;两个数的最小公倍数则是能够同时被两个数整除的最小的那个数.
"""
x = int(input('x = '))
y = int(input('y = '))
# 如果x大于y就交换x和y的值
if x > y:
    # 通过下面的操作将y的值赋给x, 将x的值赋给y
    x, y = y, x
# 从两个数中较小的数开始做递减的循环
for factor in range(x, 0, -1):
    if x % factor == 0 and y % factor == 0:
        print('%d和%d的最大公约数是%d' % (x, y, factor))
        print('%d和%d的最小公倍数是%d' % (x, y, x * y // factor))
        break

3:打印如下所示的三角形图案

在这里插入图片描述

"""
打印三角形图案
"""

row = int(input('请输入行数: '))
for i in range(row):
    for _ in range(i + 1):
        print('*', end='')
    print()


for i in range(row):
    for j in range(row):
        if j < row - i - 1:
            print(' ', end='')
        else:
            print('*', end='')
    print()

for i in range(row):
    for _ in range(row - i - 1):
        print(' ', end='')
    for _ in range(2 * i + 1):
        print('*', end='')
    print()

4.九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print(i,'*',j,'=',i*j,end='\t')
    print()

在这里插入图片描述

  • 44
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心灵排骨汤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值