Skip to content

Latest commit

 

History

History
384 lines (266 loc) · 11.3 KB

File metadata and controls

384 lines (266 loc) · 11.3 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0174
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

break 中断条件

回忆

  • 上次深入了循环
  • 明确了循环的核心
    • 循环条件
    • 只要满足循环条件就会不断循环
    • 甚至死循环
  • 循环中可以改变某些变量
    • 然后再用变量当做循环条件的因素
    • 就可以控制循环次数
    • 可以遍历某些元素
  • 我想把中文所有的基础字符遍历一遍可以么?🤔

unicode 范围

图片描述

图片描述

  • 基本范围在(4e00)16进制-在(9FA5)16进制

直接比较

  • 0x4e000本质是什么?
0x4e00
type(0x4e00)
  • 0x4e00
    • 类型是int
    • 数值为19968
    • 本质上就是19968
    • 只不过用16进制的方式书写

图片描述

  • 那我们来遍历一次

遍历字符

  • 控制首末位置
    • 开始字
    • 结束字
zi = 0x4e00
while zi <= 0x9fa5:
    print(zi,hex(zi),chr(zi))
    zi += 1

  • 每字一行
    • 输出是没有问题的

图片描述

  • 但是我想要一行 16 个字符可以么?

格式输出

  • 控制回车
zi = 0x4e00
while zi <= 0x9fa5:
    if zi%16 == 0:
        print("\n", hex(zi), ":", end="")
    print(chr(zi), end=" ")
    zi += 1

  • 格式输出是没有问题的

图片描述

  • 但是 我想要
    • 不从 0x4e00 开始
    • 从 某个字符的时候 才开始
  • 比如 遇字开始
    • 遇洪而开
    • 可以么

遇洪而开

  • 本来 从 0x4e00 一直循环到 0x9f95 的
    • 一旦遇到了这个字
    • 就会运行 break
    • 直接跳出来
    • 这就 把字前面的字 都略过去
zi = 0x4e00
while zi <= 0x9fa5:
    if zi == ord('洪'):
        break
    zi += 1

while zi <= 0x9fa5:
    if zi%16 == 0:
        print("\n", hex(zi), ":", end="")
    print(chr(zi), end=" ")
    zi += 1
  • 再 从字开始
    • 输出到 结尾

图片描述

  • 来一个简单点的

循环亿次

  • 这个循环
    • 正常要循环一亿次
num = 1
while num < 10 ** 8:
    print(num)
    num += 1
  • 没完没了

图片描述

  • 我要在 7 这个位置
    • 直接打断他
    • 让他停止施法

打断施法

num = 1
while num < 10 ** 8:
    print(num)
    num += 1
    if num == 7:
        break

  • 一遇到七这个数字
    • 就 break 打断
    • 跳出循环

图片描述

  • 这个 break 到底什么意思?🤔

break 的词源

  • 把原来的稳固的东西
    • 暴力地弄成碎片
    • 这就是 break

图片描述

  • 稳固的就是循环
    • 打碎 循环
    • 就是 跳出绕圈
    • 这在生活中很常见

做菜

  • 锅烧热之后需要
    • 用葱姜蒜炝锅
    • 放佐料 之后 要等多久 放菜?

图片描述

  • 一般来说
    • 闻到香味就可以继续
      • 没香味 就继续等
      • 一出现 香味 就不等了
      • 往后走
  • 如果是英文字符
    • az
      • 我想在遇到o的时候 跳循环
  • 怎么办?🤔

遇 o 则停

c = 'a'
while True:
    print(ord(c), c)
    if ord(c)==ord('o'):
        break
    c = chr(ord(c) + 1)

  • 到 o 可以停
    • 但还是把 o 给打出来了

图片描述

  • 如果 不想让 o 出现
    • 应该怎么办?

截止条件

  • 先判断
    • 满足条件就打断
    • 不管后面的东西是啥!
    • 就这么坚决
c = 'a'
while True:
    print(ord(c), c)
    if c=='o':
        break
    c = chr(ord(c) + 1)

  • 跳出来之后
    • 打印啥的 不会被执行

图片描述

  • 如果 我想的是
    • 遇 o 则开始呢?

遇 o 而开

c = 'a'
while True:
    if c == 'o':
        break
    c = chr(ord(c) + 1)
while True:
    if c == 'z':
        break
    c = chr(ord(c) + 1)
    print(ord(c), c)

  • 可以输出

图片描述

  • 但是第一个 o 丢了

调整

  • 把 错过的 初值 找补回来
c = 'a'
while True:
    if c == 'o':
        break
    c = chr(ord(c) + 1)
c = chr (ord(c) - 1)
while True:
    if c == 'z':
        break
    c = chr(ord(c) + 1)
    print(ord(c), c)

  • 怎么再优化?

优化代码

  • 前面的循环 没必要
    • 改成直接 赋初值

图片描述

  • 如果我想要到 y 就结束呢?

见到 y 就结束

  • 原来 跳出是靠的是
    • 循环里面的 if 分支
    • 如果满足则跳出循环

图片描述

  • 改成直接 设置
    • 循环的循环条件
  • 这个 能 魔改 吗??

洪信

  • 如果 我想改成
    • 而开
    • 而寂

图片描述

  • 这说的是谁呢?

而开

  众人一齐都到殿内,黑暗暗不见一物。太尉教从人取十数个火把点着,将来打一照时,四边并无别物,只中央一个石碑,约高五六尺,下面石龟趺坐,大半陷在泥里。照那碑碣上时,前面都是龙章凤篆,天书符箓,人皆不识。照那碑后时,却有四个真字大书,凿着“遇洪而开”。却不是一来天罡星合当出世,二来宋朝必显忠良,三来凑巧遇着洪信。岂不是天数!洪太尉看了这四个字,大喜,便对真人说道:“你等阻当我,却怎地数百年前已注我姓字在此?‘遇洪而开’,分明是教我开看,却何妨!我想这个魔王,都只在石碑底下。汝等从人与我多唤几个火工人等,将锄头铁锹来掘开。”真人慌忙谏道:“太尉,不可掘动!恐有利害,伤犯于人,不当稳便。”太尉大怒,喝道:“你等道众,省得甚么!碑上分明凿着遇我教开,你如何阻当!快与我唤人来开。”真人又三回五次禀道:“恐有不好。”太尉那里肯听。只得聚集众人,先把石碑放倒,一齐并力掘那石龟,半日方才掘得起。又掘下去,约有三四尺深,见一片大青石板,可方丈围。洪太尉叫再掘起来。真人又苦禀道:“不可掘动!”太尉那里肯听。众人只得把石板一齐扛起,看时,石板底下却是一个万丈深浅地穴。只见穴内刮剌剌一声响亮,那响非同小可,恰似:

  天摧地塌,岳撼山崩。钱塘江上,潮头浪拥出海门来;泰华山头,巨灵神一劈山峰碎。共工奋怒,去盔撞倒了不周山;力士施威,飞锤击碎了始皇辇。一风撼折千竿竹,十万军中半夜雷。

图片描述

  那一声响亮过处,只见一道黑气,从穴里滚将起来,掀塌了半个殿角。那道黑气直冲上半天里,空中散作百十道金光,望四面八方去了。众人吃了一惊,发声喊,都走了,撇下锄头铁锹,尽从殿内奔将出来,推倒攧翻无数。惊得洪太尉目睁痴呆,罔知所措,面色如土。奔到廊下,只见真人向前叫苦不迭。太尉问道:“走了的却是甚么妖魔?”那真人言不过数句,话不过一席,说出这个缘由。有分教:一朝皇帝,夜眠不稳,昼食忘餐。直使宛子城中藏猛虎,蓼儿洼内聚飞龙。毕竟龙虎山真人说出甚言语来,且听下回分解。

  • 而寂
    • 说的是啥事呢?

而寂

  且说鲁智深自与武松在寺中一处歇马听候,看见城外江山秀丽,景物非常,心中欢喜。是夜月白风清,水天同碧。二人正在僧房里睡,至半夜,忽听得江上潮声雷响。鲁智深是关西汉子,不曾省得浙江潮信,只道是战鼓响,贼人生发,跳将起来,摸了禅杖,大喝着便抢出来。众僧吃了一惊,都来问道:“师父何为如此,赶出何处去?”鲁智深道:“洒家听得战鼓响,待要出去厮杀。”众僧都笑将起来,道:“师父错听了,不是战鼓响,乃是钱塘江潮信响。”鲁智深见说,吃了一惊,问道:“师父,怎地唤做潮信响?”寺内众僧推开窗,指着那潮头叫鲁智深看,说道:“这潮信日夜两番来,并不违时刻。今朝是八月十五日,合当三更子时潮来。因不失信,为之潮信。”鲁智深看了,从此心中忽然大悟,拍掌笑道:“俺师父智真长老,曾嘱付与洒家四句偈言,道是:‘逢夏而擒’,俺在万松林里厮杀,活捉了个夏侯成;‘遇腊而执’,俺生擒方腊。今日正应了:‘听潮而圆,见信而寂?’俺想既逢潮信,合当圆寂。众和尚,俺家问你,如何唤做圆寂。”寺内众僧答道:“你是出家人,还不省得?佛门中圆寂便是死。”鲁智深笑道:“既然死乃唤做圆寂,洒家今已必当圆寂。烦与俺烧桶汤来,洒家沐浴。”寺内众僧,都只道他说耍,又见他这般性格,不敢不依他。只得唤道人烧汤来与鲁智深洗浴,换了一身御赐的僧衣,便叫部下军校:“去报宋公明先锋哥哥,来看洒家。”又问寺内众僧处,讨纸笔写下一篇颂子。去法堂上,捉把禅椅,当中坐了。焚起一炉好香,放了那张纸在禅床上,自叠起两只脚,左脚搭在右脚,自然天性腾空。比及宋公明见报,急引众头领来看时,鲁智深已自坐在禅椅上不动了。看其颂曰:

	平生不修善果
		只爱杀人放火
	忽地顿开金枷
		这里扯断玉锁
	咦!钱塘江上潮信来
	今日方知我是我

  宋江与卢俊义看了偈语,嗟叹不已。众多头领都来看视鲁智深,焚香拜礼。城内张招讨并童枢密等众官,亦来拈香拜礼。宋江教把鲁智深衣钵并朝廷赏赐,出来俵散众僧,做了三昼夜功果,合个朱红龛子盛了,直去请径山住持大惠禅师,来与鲁智深下火。五山十刹禅师,都来诵经忏悔。迎出龛子,去六和塔后烧化那鲁智深。那径山大惠禅师手执火把,直来龛子前,指着鲁智深,道几句法语,是:

  “鲁智深,鲁智深,起身自绿林。两只放火眼,一片杀人心。忽地随潮归去,果然无处跟寻。咄!解使满空飞白玉,能令大地作黄金。”

  • 这就是水浒传的头尾呼应
    • 而开
    • 而寂

输出

  • 把相应的字符替换了一下

图片描述

  • 可是
    • 一个字符也不能输出
    • 这是为什么呢?

总结

  • 这次了解了 break
  • break 可以打破循环

图片描述

  • 能否输出
    • 洪信范围内 所有的中文字符呢?
    • 怎么办?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。