文章目录
注:需要对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()