构造程序逻辑

学完前面的几个章节后,我觉得有必要在这里带大家做一些练习来巩固之前所学的知识,虽然迄今为止我们学习的内容只是Python的冰山一角,但是这些内容已经足够我们来构建程序中的逻辑。对于编程语言的初学者来说,在学习了Python的核心语言元素(变量、类型、运算符、表达式、分支结构、循环结构等)之后,必须做的一件事情就是尝试用所学知识去解决现实中的问题,换句话说就是锻炼自己把用人类自然语言描述的算法(解决问题的方法和步骤)翻译成Python代码的能力,而这件事情必须通过大量的练习才能达成。

我们在本章为大家整理了一些经典的案例和习题,希望通过这些例子,一方面帮助大家巩固之前所学的Python知识,另一方面帮助大家了解如何建立程序中的逻辑以及如何运用一些简单的算法解决现实中的问题。

经典的例子

  1. 寻找水仙花数

    说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:13+53+33=1531^3 + 5^3+ 3^3=15313+53+33=153。

    """
    找出所有水仙花数Version: 0.1
    Author: 骆昊
    """for num in range(100, 1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)
    

    在上面的代码中,我们通过整除和求模运算分别找出了一个三位数的个位、十位和百位,这种小技巧在实际开发中还是常用的。用类似的方法,我们还可以实现将一个正整数反转,例如:将12345变成54321,代码如下所示。

    """
    正整数的反转Version: 0.1
    Author: 骆昊
    """num = int(input('num = '))
    reversed_num = 0
    while num > 0:reversed_num = reversed_num * 10 + num % 10num //= 10
    print(reversed_num)
    
  2. 百钱百鸡问题。

    说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?

    """
    《百钱百鸡》问题Version: 0.1
    Author: 骆昊
    """for x in range(0, 20):for y in range(0, 33):z = 100 - x - yif 5 * x + 3 * y + z / 3 == 100:print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))
    

    上面使用的方法叫做穷举法,也称为暴力搜索法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。这种方法看起来比较笨拙,但对于运算能力非常强大的计算机来说,通常都是一个可行的甚至是不错的选择,而且问题的解如果存在,这种方法一定能够找到它。

  3. CRAPS赌博游戏

    说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。

    """
    Craps赌博游戏
    我们设定玩家开始游戏时有1000元的赌注
    游戏结束的条件是玩家输光所有的赌注Version: 0.1
    Author: 骆昊
    """
    from random import randintmoney = 1000
    while money > 0:print('你的总资产为:', money)needs_go_on = Falsewhile True:debt = int(input('请下注: '))if 0 < debt <= money:breakfirst = randint(1, 6) + randint(1, 6)print('玩家摇出了%d点' % first)if first == 7 or first == 11:print('玩家胜!')money += debtelif first == 2 or first == 3 or first == 12:print('庄家胜!')money -= debtelse:needs_go_on = Truewhile needs_go_on:needs_go_on = Falsecurrent = randint(1, 6) + randint(1, 6)print('玩家摇出了%d点' % current)if current == 7:print('庄家胜')money -= debtelif current == first:print('玩家胜')money += debtelse:needs_go_on = True
    print('你破产了, 游戏结束!')
    

有用的练习

  1. 生成斐波那契数列的前20个数。

    说明:斐波那契数列(Fibonacci sequence),又称黄金分割数列,是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)在《计算之书》中提出一个在理想假设条件下兔子成长率的问题而引入的数列,所以这个数列也被戏称为"兔子数列"。斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,形如:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …。斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。

  2. 找出10000以内的完美数

    说明:完美数又称为完全数或完备数,它的所有的真因子(即除了自身以外的因子)的和(即因子函数)恰好等于它本身。例如:6(6=1+2+36=1+2+36=1+2+3)和28(28=1+2+4+7+1428=1+2+4+7+1428=1+2+4+7+14)就是完美数。完美数有很多神奇的特性,有兴趣的可以自行了解。

  3. 输出100以内所有的素数

    说明:素数指的是只能被1和自身整除的正整数(不包括1)。

上面练习的参考答案在本章对应的代码目录中,如果需要帮助请读者自行查看参考答案。

【Python100天学习笔记】day5 构造程序逻辑相关推荐

  1. ECS 7天实践训练营学习笔记——DAY5

    ECS 7天实践训练营学习笔记--DAY5 今日份学习--阅读阿里云<7天学会ECS> 前言 一. ECS概述 二. ECS产品架构 三. ECS管理软件 四. 基于ECS的各种搭建 今日 ...

  2. Python学习笔记 day5

    Python学习笔记 day5 参考/引用资料: 1.file a.打开文件方式(读写两种方式) 缓冲 with语句 b.文件对象的操作方法 c.学习对excel及csv文件进行操作 读写excel ...

  3. Python小白学习笔记-day5

    第五章-Python函数和代码复用-学习笔记 如果函数没有返回值,则其调用后类型为无类型. def func():print('1') 则type(func)类型为function,type(func ...

  4. 离散数学学习笔记-02-命题逻辑

    命题proposition 非真既假的普通陈述句,真值true/false唯一确定,(本命题是假的)和(本命题是真的)不是命题 命题变元或命题变项proposition variables 小写英文字 ...

  5. 《周志明的软件架构课》学习笔记 Day5

    1.主动学习 远程服务调用(Remote Procedure Call,RPC) RPC 是我们构建分布式系统的最基本前置条件. 这篇文章我们来了解周志明老师笔下的 RPC. RPC 出现的最初目的, ...

  6. node.js学习笔记Day5

    目录 1 衔接昨天的前端跳转到登录界面 2 登录页面静态代码 3 编写前端发送登录请求的程序 4 编写服务器登录代码 4.1 编写controller登录代码(login) 4.2 设置路由 5 静默 ...

  7. go 从入门到猝死 学习笔记 day5

    1.6 并发获取url 笔记:理解printf格式化转义字符的含义(部分) 疑问: 符合防止出现多个goroutine同时完成带来的响应交织?  代码中写的是对os.Arg进行两轮循环,第一轮请求ur ...

  8. 【Python100天学习笔记】番外篇 Python面试面经、笔试题目汇总

    Python面试题汇总 说明:下面的内容源于GitHub上名为interview_python的项目,对其内容进行了修订和补充. 文章目录 Python面试题汇总 Python语言特性 1 Pytho ...

  9. 学习笔记day5:inline inline-block block区别

    1. block元素可以包含block元素和inline元素:但inline元素只能包含inline元素.要注意的是这个是个大概的说法,每个特定的元素能包含的元素也是特定的,所以具体到个别元素上,这条 ...

最新文章

  1. Git 配置命令设置
  2. 为什么线粒体DNA突变率高?
  3. python随机生成一个日期_Python中随机生成未来一个月内的一个随机的日期时间
  4. 如何实现多路海康大华等RTSP数据转RTMP推送
  5. idea-java项目配置
  6. MVC 从客户端中检测到有潜在危险的 Request.Form 值
  7. 检验学习笔记-寄生虫
  8. SQL基础笔试题(二)
  9. 在extjs 中使用FCKeditor
  10. 用USBISP/USBasp编程器给Atmega328P下载Arduino bootloader引导程序
  11. kindle dxg汉化和安装kindlepdfviewer
  12. Project组合项目案例分享
  13. 哔哩哔哩(B站)品牌投放,优质潜力up主如何找?
  14. oracle中栓锁,特定的闩锁和互斥场景
  15. 分布式系统(微服务架构)的一致性和幂等性和相关概念解析
  16. vue 踩坑 Already included file name ‘xxx‘ differs from file name ‘xxx‘
  17. 用vscode调试远程服务器的php
  18. 小米生活早报早间新闻入口/凤凰FM头条速递入口
  19. Camera知识问答
  20. 【思考14】量化交易回测中,关于涨跌停的处理方式

热门文章

  1. 质量统计分析人工智能应用APP
  2. 什么是 Ubuntu?
  3. MG动画实例——旋转的地球
  4. 深圳大学计算机博士好考吗,深圳大学在职博士好考吗?
  5. Markdown基本语法笔记
  6. VT-x/AMD-V 硬件加速在您的系统中不可用。您的 64-位虚拟机将无法检测到 64-位处理器,从而无法启动。
  7. antd 组件库upload使用时onChange只会执行到 uploading状态 解决办法
  8. 微信小程序----map组件实现检索【定位位置】周边的POI
  9. 【滤波跟踪】基于粒子群算法优化粒子滤波实现目标滤波跟踪优化问题附matlab代码
  10. 尴尬的国产与国外操作系统对比:面对现实这么难吗?