循环结构

for循环

  • 如果明确知道循环执行的次数,或者是要多一个容器进行迭代
  • 推荐使用for...in..循环
  • 循环结构也可以进行嵌套,即循环结构中还可以构造循环结构
  • range函数的使用
    range可以用来产生一个不变的数值序列,这个数列通常都是用在循环中
    range(101): 产生一个0-100的整数序列
    range(1, 100):产生一个1-99的整数序列
    range(1, 100, 2): 产生一个1-99的奇数序列,其中2是步长,即数值序列的增量。
  • 练习1 用for循环实现1-100求和.
"""
先定义一个变量sum,初始值为0,然后做一个for循环,num为下标(索引)
然后做一个循环递增运算 sum = sum + num,sum等于自己本身加上第一个索引值,
依次递加,直至最后一个,最后打印出来,如果在for循环里面,
则把每次的递加都打印出来,放外面,就直接打印求和结果。
"""
sum = 0
for num in range(1, 101):
    sum += num
    # sum = sum + num
    print(sum)
print(sum)
  • 练习2 用for循环实现1-100之间的奇数求和.
fum = 0
for num in range(1, 100, 2):
    fum = fum + num
    print(fum)
print(fum)
  • 练习3 用for循环实现1-100之间的偶数求和.
cum = 0
for num in range(2, 100, 2):
    cum += num
    print(cum)
print(cum)
# 也可以在循环中使用分支结构的方式来实现同样的功能.
sum = 0
for num in range(1, 101):
    if num % 2 == 0:
        sum += num
print(sum)
  • 练习4 用for循环实现九九乘法表.
for i in range(1, 10):  # i表示行
    for j in range(1, i + 1):  # j表示列
        print('%s*%s=%s' % (j, i, i * j), end='\t')  
        # end='\t'表示不换行
    print()
  • 练习5 输入一个正整数,判断是不是素数.
# 素数:又称质数。一个大于1的自然数,除了1和它自身外,
# 不能被其他自然数整除的数叫做质数;否则称为合数。
import math

num = int(input('请输入一个数:'))
is_prime = True  
# 这里设置一个bool运算,一般bool运算开始都设置为真,当该假设成立时,
即开始循环搜索素数
for x in range(2, int(math.sqrt(num) + 1)):  
# 这里用math.sqrt是表示对最大值开根号运算,
# 可以缩小取值范围,可以得到和原始值的范围其实一样的结果
    if num % x == 0:  
    # x在这里本身就是正整数,作为索引(下标)时,是在列表、元组中
        is_prime = False  # bool值为假时,循环结束
        break  # 跳出循环
if is_prime and num != 1: 
    print('%d是素数。' % num)
else:
    print('%d不是素数。' % num)
  • 练习6 输入两个正整数,计算最大公约数和最小公倍数.
"""
短除法:就是短除符号倒过来,在除法中写除数的地方写2个数公有的质因数,
然后写下2个数被公有质因数整除的商,之后再除,以此类推,直到结果互质为止。
互质:如果2个数最大公约数为1,则称这2个数互质。比如(2,3)(4,5)(5,6)(6,7)
最大公约数为左侧各位数字之积。
最小公倍数为左侧各位数字与下边各位数字之积。
文中的算法是,2个数的乘积除以最大公约数,也就是最小公倍数
"""
x = int(input('请输入第一个正整数:'))
y = int(input('请输入第二个正整数:'))

if x > y:
    (x, y) = (y, x)  # 如果x大于y,则交换x,y的位置,元组运算
    for factor in range(x, 0, -1):  
    # factor为最大公约数,x为最大的整数,为最小,-1为步长(按照-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
# 用定义函数来实现最大公约数和最小公倍数
def gcd(x, y):

    (x, y) = (y, x) if x > y else (x, y)  # 三元运算
    for factor in range(x, 0, -1):  # 这里factor是最大公约数,而不是元素的下标运算
        if x % factor == 0 and y % factor == 0:
            return factor


def lcm(x, y):
    return x * y // gcd(x, y)


if __name__ == '__main__':
    print(gcd(15, 25))
    print(lcm(58, 3))
  • 练习6 打印各种类型的图案.
"""
❤
❤❤
❤❤❤
❤❤❤❤
❤❤❤❤❤
❤❤❤❤❤❤
"""
row = int(input('请输入行数:'))
for i in range(1, row + 1):
    print('❤' * i)
"""
     ❤
    ❤❤
   ❤❤❤
  ❤❤❤❤
 ❤❤❤❤❤
❤❤❤❤❤❤
"""
row = int(input('请输入行数:'))
for i in range(1, row + 1):
    print(' ' * (row - i), end='')
    print('❤' * i)

while循环

  • 如果要构造出不知道具体循环次数的循环结构,即推荐使用while循环,
    while循环通过一个能够产生或转换出bool值的表达式,来控制循环,
    表达式的值为True,循环继续;表达式的值为False,循环结束。
  • 练习—猜数字游戏
"""
计算机随机出一个1-100之间的随机数,人输入自己猜的数字,计算机给出对应的
提示信息,直到人猜出计算机出的数字。计算机根据人猜的数字分别给出提示大一点、
小一点及猜对了。
"""
import random

answer = random.randint(1, 100)
counter = 0  # 这里表示计数器
while True:
    counter += 1  # 一直循环7次
    number = int(input('请输入一个数字:'))
    if number < answer:
        print('你猜小了!')
    elif number > answer:
        print('你猜大了!')
    else:
        print('你猜对了!')
        break
    print('你一共猜了%s次。' % counter)
    if counter > 7:
        print('你的智商有问题')  
"""    
用break关键字来提前终止循环,注意:break只能终止它所在的那个循环,这一点
在使用嵌套的循环结构时,需引起注意,continue可以用来放弃本次循环,让后续
的代码直接进入下一轮循环。
"""