1.程序的流程图
程序流程图用一系列图形,流程线和文字说明描述程序的基本操作和控制流程,它是程序分析和过程描述的最基本方式。
流程图的基本元素包括:

- 起止框:表示程序逻辑的开始或结束。
- 判断框:表示一个判断条件,并根据判断结果选择不同的执行路径。
- 处理框:表示一组处理过程,对应于顺序执行的程序逻辑。
- 输入输出框:表示程序中的数据输入或结果输出。
- 注释框:表示程序的注释。
- 流向线:表示程序的控制流,以带箭头直线或曲线表达程序的执行路径。
- 连接点:表示多个流程图的连接方式,常用于将多个较小流程图组织成较大流程图。

- 程序由三种基本结构组成:顺序结构,分支结构和循环结构。
- 任何程序都由这三种基本结构组合而成。
- 基本结构都有一个入口和一个出口。
循环结构是程序根据条件判断结果向后反复执行的一种运行方式, 根据循环体触发条件不同,包括条件循环和遍历循环结构 。
2.顺序结构
顺序结构是程序按照线性顺序依次执行的一种运行方式, 其中语句块1S1和语句块S2表示一个或一组顺序执行的语句 。

3.程序的分支结构
(1).单分支结构:if语句
if <条件>:
语句块
# 示例:判断用户输入数字的奇偶性
s = eval(input('请输入一个整数:'))
if s % 2 == 0:
print('这是一个偶数')
print('输入数字是:{}'.format(s))
# 条件可以是一个或多个条件,多个条件采用and或or进行逻辑组合,
# and表示多个条件‘与’的关系,
# or表示多个条件'或'的关系,
(2).二分支结构:if-else语句
if 条件:
语句块1 # 语句块1在if中满足条件时,执行
else:
语句块2 # 语句块2在if中不满足条件时,执行
# 更简洁的表达方式:语句块1 if 条件 else 语句块2
# 示例:
username = input('请输入登录账号:')
password = int(input('请输入登录密码:'))
if username == 'admin' and password == 123456:
print('登录成功!')
else:
print('账号或密码错误!')
(3).多分支结构:if-elif-else语句
# 多分支结构通常用于判断同一个条件或一类条件的多个执行路径。
# 多分支结构从上到下依从评估判断条件,寻找并执行第一个结果为True条件对应的语句。
# 示例:将百分制创建转换为五分制成绩
score = eval(input('请输出一个百分制成绩:'))
if score >= 90.0:
grade = 'A'
elif score >= 80.0:
grade = 'B'
elif score >= 70.0:
grade = 'C'
elif score >= 60.0:
grade = 'D'
else:
grade = 'E'
print('成绩等级为:{}'.format(grade))
4.程序的循环结构
(1)遍历循环: for
# 遍历循环可以理解为从遍历结构中逐一提取元素, 放在循环变量中, 对于每个所提取的元素执行一次语句块。
for <循环变量> in <遍历结构>:
语句块
# <遍历结构>可以为字符串,文件,range()函数以及组合数据类型等
# 遍历字符串:
for <循环变量> in <字符串变量>:
语句块
# 遍历range():
for <循环变量> in range(循环次数):
语句块
# 示例:
for s in 'py':
print('循环执行中:' + s)
else:
s = '循环正常结束'
print(s)
(2).无限循环:while
while <条件>:
<语句块>
# 判断条件是否为True,是,则执行语句。语句结束后返回再次判断while语句的条件。
# 当条件为False时,循环终止。
# while语句扩展模式:
while <条件>:
<语句块1>
else:
<语句块2> # 循环正常执行之后,才执行else下的语句
# 示例:求1-10以内的整数
i = 1
while i <= 10:
print(i)
i += 1
else:
print('执行结束')
(3)循环控制:break和continue
- break用来跳出最内层for或while循环, 脱离该循环后程序从循环后代码继续执行。 如果有2层或多层循环, break退出最内层循环。
- continue用来结束当前当次循环, 即跳出循环体中下面尚未执行的语句, 但不跳出当前循环。
- 区别是: continue语句只结束本次循环, 不终止整个循环的执行, 而break具备结束循环的能力。
while True:
s = input("请输入一个名字(按Q退出): ")
if s == "Q":
break
print("输入的名字是:", s)
print("程序退出")
for s in "PYTHON":
if s == "Y" or s == "y":
continue
print(s, end="")
5.异常处理
-
-
异常机制:指当程序出现错误后,程序的处理方法。
- python中异常的类都是基于继承来实现的,BaseException是所有异常类的基类,所有的内置异常都是它的派生类。
-
SystemExit:Python退出异常
KeyboardInterrupt: 键盘打断(Ctrl+C)
GeneratorExit: 生成器退出
Exception: 普通异常(只会使用这部分的异常)
Exception是除了SystemExit,GeneratorExit和KeyboardInterrupt之外的所有内置异常的基类,包括自定义异常。
-
StopItertion:当迭代器中没有数据项时触发,由内置函数next()和迭代器的next方法触发。
-
ArithmeticError:算法异常的基类。
-
AssertionError:assert语句失败时触发。
-
AttributeError:属性引用和属性赋值异常。
-
BufferError:缓存异常,当一个缓存相关的操作不能进行时触发。
-
EOFError:文件末尾,当内置函数input()时生成,表示到达文件末尾。
-
ImportError:导入异常。
-
LookupError:当使用映射或者序列时,如果键值或者索引无法找到的时候触发,它是KeyError和IndexError的基类。
-
MemoryError:内存错误,当操作超出内存范围时触发。
-
NameError:名称异常,在局部或者全局中无法找到文件名称时触发。
-
OSError:当一个系统函数返回一个系统相关的错误时触发。
-
ReferenceError:引用异常,当底层的对象被销毁后访问时触发。
-
RuntimeError:包含其他分类中没有被包括进去的一般错误。
-
SyntaxError:编译器的内部错误。
-
TypeError:类型异常,当操作或者函数应用到不合适的类型时触发。
-
ValueError:值异常,当操作或者函数的类型正确,但是值不正确时触发。
-
Warning:警告。
5.1 try...except.....
try:
<语句块1>
except:
<语句块2>
# 语句块1是正常执行的程序内容, 当执行这个语句块发生异常时, 则执行except保留字后面的语句块2。
# 如果在except子句后将异常类型设置为exception,异常处理程序将捕获除了程序中断外的所有异常。因为excetion类是其他异常类的基类。
try:
open('hello.text','r')
except: # 异常时,给出的提示
print('hello.text文件不存在')
5.2 捕获具体的异常
# 捕获具体的异常:
try:
open('hello.text','r')
except FileNotFoundErrorr: # 只要FileNotFoundErrorr类的异常时,才会给出来的提示
print('hello.text文件不存在')
except: # 除了FileNotFoundErrorr类的异常时,报出来的错误
print('程序错误')
5.3 try...except...else....
try:
result = 10/0
except ZeroDivisionError: # 只要FileNotFoundErrorr类的异常时,才会给出来的提示
print('0不能被整除')
except: # 除了FileNotFoundErrorr类的异常时,报出来的错误
print('程序错误')
else: # 若没有触发异常则执行以下代码
print(result)
5.4 嵌套异常
try:
s = 'hello'
b = 'world'
try: # 嵌套异常
print(s - b)
except:
print('字符串不支持减法运算')
except: # 如果外层语句执行错误,则内层语句将不执行
print('异常')
5.5 try...findally.....
# finally子句的作用:无论异常是否发生,finally子句都会被执行。finally子句通常用于关闭因异常而不能释放的系统资源。每一个try语句都必须有一个except子句和finally子句与之对应。
try:
s = 'hello'
b = 'world'
try:
print(s - b)
except:
print('字符串不支持减法运算')
except:
print('异常')
finally: # 无论是否异常,都执行
print(s + b)
# 当程序中出现错误时,python会自动引发异常,也可以通过raise语句显示的引发异常。但是执行了raise语句,raise语句后的代码将不能被执行。
try:
s = None
if s is None:
print('s是空对象')
raise NameError
except TypeError:
print('异常')
5.7 自定义异常
# 自定义异常必须继承Exception类,自定义异常按照命名规范以Error结尾。自定义异常使用raise语句引发,而且只能通过手工发生触发。
from __future__ import division
class DivisionException(Exception): # 自定义异常
def __init__(self, x, y):
Exception.__init__(self, x, y)
self.x = x
self.y = y
if __name__ == '__main__':
try:
x = 3
y = 4
if x % y > 0:
print(x / y)
raise DivisionException(x, y)
except DivisionException as div: # 抛出异常
print('异常DivisionException:x / y = %.2f' % (div.x / div.y))
t = 'hello' assert len(t) >= 2 # 条件为True,不抛出异常 assert len(t) == 1 # 条件为False,断言失败,抛出异常。
6.案例
import random
target = random.randint(1,1000)
count = 0
while True:
try:
guess = eval(input('请输入一个猜测的整数(1至1000): '))
except:
print('输入有误, 请重试, 不计入猜测次数哦! ')
continue
count = count + 1
if guess > target:
print('猜大了')
elif guess < target:
print('猜小了')
else:
print('猜对了')
break
print("此轮的猜测次数是:", count)
来源:https://www.cnblogs.com/Cyzhouke/p/11177241.html