循环结构

循环结构就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in循环,一种是while循环。

for-in循环

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

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

说明:上面代码中的range(101)可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in循环中,就可以通过前面的循环变量x依次取出从1到100的整数。

range的用法

  • range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
  • range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
  • range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值
  • range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。

故计算1~100中偶数和的结果,如下:

sum=0
for i in range(2,101,2):
    sum+=i
print(sum)

while循环

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

下面我们通过一个“猜数字”的小游戏来看看如何使用while循环。

猜数字游戏的规则是:计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。

import random
answer=random.randint(1,100)
counter=0
while True:
    counter +=1
    num=int(input("请输入:"))
    if num>answer:
        print("小一点")
    elif num<answer:
        print("大一点")
    else:
        print("猜对了!")
        break
print(f'你一共猜了{counter}次')

 

说明:上面程序中用了random.randint(1,100),产生1-99随机的整数

循环也可嵌套。如输出一个九九乘法表

for i in range(10):
    for j in range(1,i+1):
        print(f'{j}*{i}={i*j}')

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

提示:素数指的是只能被1和自身整除的大于1的整数。

num=int(input("请输入一个整数:"))
if num<=1:
    print("输入错误!")
flag=True
for i in range(2,num):
    if num%i==0:
        flag=False
        break
if flag:
    print(f'{num}是素数')
else:
    print(f'{num}不是素数')

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

提示:两个数的最大公约数是两个数的公共因子中最大的那个数;两个数的最小公倍数则是能够同时被两个数整除的最小的那个数。辗转相减法:先比较两数字大小,得出大的数和小的数;第二步:大数=大数-小数(大数此时已经更新了);第三步:再次比较两数字大小,得出大的数和小的数;第四步:大数=大数-小数;……;直至结果相减结果为0时结束,此时的两数字已经相等,这时的数字即是最大公约数。最小公倍数=原数字相乘/最大公因数。

x=int(input("x="))
y=int(input("y="))
a=x
b=y
while True:
    if x==y:
        break;
    elif x>y:
        x=x-y
    else:
        y=y-x;
print(f'最大公约数为:{x},最小公倍数为:{a*b/x}')

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

注意:使用print()函数想要不换行,需要在后面注明end="",否则默认换行。

  

n=5
for i in range(n):
    for j in range(i+1):
        print('*',end="")
    print()
print()
for i in range(n):
    for j in range(n):
        if j<n-i-1:
            print(" ",end="")
        else:
            print("*",end="")
    print()
print()
for i in range(n):
    for j in range(2*n):
        if j<n-i-1:
            print(" ",end="")
        elif j>n+i-1:
            print(" ", end="")
        else:
            print("*",end="")
    print()

更多Python框架梳理,请参考: 【Python学习】Python最全总结

 有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐