Python学习-Day04-循环结构-for, while,break,continue,以及else的另一种用法

最近在GitHub上发现了一个python100天从新手到大师学习指南,现已有2万+star,
GitHub:https://github.com/jackfrued/Python-100-Days
在此记下学习过程中的笔记。也当作自己学习完python基础之后的查漏补缺与进阶。

1、for循环–如果明确的知道循环执行的次数或者是要对一个容器进行迭代,推荐使用for-in循环

(1) 输出乘法口诀表(九九表)

for i in range(1, 10):
    for j in range(1, i + 1):
        print('%d*%d=%d' % (i, j, i * j), end='\t')
    print()
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81

(2) 输入一个正整数判断它是不是素数

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)
请输入一个正整数: 15
15不是素数

(3) 输入两个正整数计算最大公约数和最小公倍数

x = int(input('x = '))
y = int(input('y = '))
​
if 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
x = 24
y = 18
18和24的最大公约数是6
18和24的最小公倍数是72

(4) 打印各种三角形图案

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()
请输入行数: 5
*
**
***
****
*****
    *
   **
  ***
 ****
*****
    *
   ***
  *****
 *******
*********

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

(1) 猜数字游戏

# 计算机出一个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('你的智商余额明显不足哦~')
请输入: 50
大一点
请输入: 75
小一点
请输入: 63
大一点
请输入: 69
大一点
请输入: 73
恭喜你猜对了!
你总共猜了5次

3、else–当循环终止时执行,例如for循环执行完毕或while循环最后的执行结果是false时执行else语句;若循环中间使用break跳出循环,则else语句不执行;

(1) 寻找素数

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '不是素数')
            break
    else:
        print(n, '是素数')
2 是素数
3 是素数
4 不是素数
5 是素数
6 不是素数
7 是素数
8 不是素数
9 不是素数

while语句的用法与for语句差不多。

(2) else还可以与异常处理搭配,只要try语句块里没有出现任何异常,就执行else语句块里的内容。

try:
    int('abc')
except ValueError as reason:
    print('出错啦: ' + str(reason))
else:
    print('没有任何异常!')
出错啦: invalid literal for int() with base 10: 'abc'
try:
    int(2)
except ValueError as reason:
    print('出错啦: ' + str(reason))
else:
    print('没有任何异常!')
没有任何异常!

4、continue–continue后面的语句不执行,直接进行下一轮的循环

(1) 寻找奇偶数

for num in range(2, 10):
    if num % 2 == 0:
        print('Found an even number', num)
        continue
    print('Found an odd number', num)
Found an even number 2
Found an odd number 3
Found an even number 4
Found an odd number 5
Found an even number 6
Found an odd number 7
Found an even number 8
Found an odd number 9

你可能感兴趣的:(python)