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