学到中年的python学习笔记02--循环结构

循环结构


应用场景

循环结构是计算机语言中非常神奇的结构,因为我们会把很对重复的、流水线的活儿交给他去完成。python中有两种循环结构for......in循环,还有while。

for......in循环

如果我们已经知道循环执行的次数,也可以是要对一个容器进行迭代,建议使用for......in循环,例1-100进行求和。

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

range(101)是构造i的一个取值范围,可以打印range(101),当我们使用循环的时候就会把1-100的值依次赋值给循环变量x,当然range非常灵活。

range语法:

range(start, stop[, step])

start 开始计数标识,range(5)等于range(0,5),默认左开右关(记起老夫学得还算可以的高中数学)。

stop 计数到stop结束,不包括stop。记住左开右关就可以了。

step 步长,默认为1。步长其实就是数字间间隔大小。range(5)等于range(0,5,1)。

使用python如何打印100以内所有偶数的和呢?

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

while循环

如果我们不知道具体的循环次数,建议使用while循环。while循环通过产生或转换出bool值的表达式来控制循环。判断表达式的值为True时继续执行,为False时则结束循环。简单来说就是while循环可以设定循环基数,在代码块内编写循环规则,完成需要循环的内容。

# 打印1-100的和
sum = 0 
i = 100
while i > 0:
    sum += i 
    i -= 1
print(sum) 

理解原理后我们来一个较复杂一点的while循环,结合前面所学的判断,完成一个随机猜数的小游戏,请看。

# 从1-100随意产生一个数跟我们输入的一个数去对比,给出提示信息(偏大、偏小或者猜对了),并输出最终猜对后的次数。
import random

RanNum = random.randint(1,100)
counter = 0
while true:
    counter += 1
    number = int(input('请输入:'))
    if number > RanNum:
        print('偏大')
    elif number < RanNum:
        print('偏小')
    else:
        print('猜对了呢!!!!')
        break
print('你在猜了%d后,成功猜对了' %(counter))
if counter > 8:
    print('wocao,妈妈炒的黄花菜都凉透了')

在上面的循环实例中我们使用的东西,对于新手来说可能面对着一个不小的挑战,我们用到了循环嵌套,还有终止循环break,学习的时候很多资源大家都能在网络资源中寻找到,排除天赋这个神奇的东西为什么有很多童鞋学的快呢?很大一部分原因在于梳理、回顾、然后尝试尝试再尝试。

和分支判断一样循环也能进行多重嵌套,也就是说循环中还能接着循环。

# 我们来输出新手必需玩的99乘法表
for i in range(1,10): 
    for j in range(1,i+1):
        print('%d * %d = %d' %(i,j,i*j),'\t') # '\t' 换行
    print(' ')

# 使用while循环打印99乘法表
i = 1
j = 1
while i < 10:
    while j <= i:
        print('%d*%d=%d' %(i,j,i*j),end=' ')
        j += 1
    print(" ")
    j = 1 
    i += 1

编程练习


#输入一个正整数判断是否为素数
ints = int(input('请输入一个正整数:'))
is_prime = True
if ints > 0:
    for i in (2,ints):
        if ints % i ==0:
            is_prime = False
            break
    if is_prime and ints != 1:
        print('你输入的整数%d为素数' %(ints))
    else:
        print('你输入的整数%d为非素数' %(ints))
else:
    print('限定范围为正整数哦!')
# 求两个正整数的最大公约数和最小公倍数
randx = int(input('输入一个正整数x:'))
randy = int(input('输入一个正整数y:'))

if randx > randy or randx < randy:
    randx,randy = randy,randx
    for number in range(randx,0,-1):
        if randx % number == 0 and randy % number == 0:
            print('%d 和 %d 的最大公约数为 %d' %(randx,randy,number)) 
            print('%d 和 %d 的最小公倍数为 %d' %(randx,randy,(randx * randy // number))) 
            break       
else:
    print('两个相等的数你说你为啥要求那啥')
# 根据输入行数打印*
row = int(input('输入你要打印*行数:'))

for i in range(row):
    for j 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 j in range(row - i - 1):
        print(' ',end=' ')
    for j in range(2 * i + 1):
        print('*',end=' ')
    print()

 

 

你可能感兴趣的:(高级编程语言,python)