本文收录在Python从入门到精通系列文章系列

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

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

  警告警告:本篇非常烧脑,建议十八岁之上观看;十八岁之下,建议父母陪同观看!!!(哈哈哈,开个玩笑~)

1. 经典的例子

1.1 寻找水仙花数。

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

  1. """
  2. 找出所有水仙花数
  3.  
  4. Version: 0.1
  5. Author: along
  6. """
  7. for num in range(100, 1000):
  8. low = num % 10
  9. mid = num // 10 % 10
  10. high = num // 100
  11.  
  12. if num == low ** 3 + mid ** 3 + high ** 3:
  13. #print(low,mid,high)
  14. print(num)

在上面的代码中,我们通过整除和求模运算分别找出了一个三位数的个位、十位和百位,这种小技巧在实际开发中还是常用的。

1.2 将一个正整数反转

  用类似的方法,我们还可以实现将一个正整数反转,例如:将12345变成54321,代码如下所示。

  1. """
  2. 正整数的反转
  3.  
  4. Version: 0.1
  5. Author: along
  6. """
  7. num = int(input('num = '))
  8. reversed_num = 0
  9. while num > 0:
  10. reversed_num = reversed_num * 10 + num % 10
  11. num //= 10
  12. #print(reversed_num,num)
  13. print(reversed_num)

1.3 百钱百鸡问题

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

  1. """
  2. 《百钱百鸡》问题
  3.  
  4. Version: 0.1
  5. Author: along
  6. """
  7. for x in range(0,20):
  8. for y in range(0,33):
  9. z = 100 - x - y
  10. if 100 == 5 * x + 3 * y + z / 3:
  11. print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))

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

1.4 CRAPS赌博游戏

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

  1. """
  2. Craps赌博游戏
  3. 我们设定玩家开始游戏时有1000元的赌注
  4. 游戏结束的条件是玩家输光所有的赌注
  5.  
  6. Version: 0.1
  7. Author: along
  8. """
  9. from random import randint
  10.  
  11. money = 1000
  12. while money > 0:
  13. print('你的总资产为:', money)
  14. needs_go_on = False
  15. while True:
  16. debt = int(input('请下注: '))
  17. if 0 < debt <= money:
  18. break
  19. first = randint(1, 6) + randint(1, 6)
  20. print('玩家摇出了%d点' % first)
  21. if first == 7 or first == 11:
  22. print('玩家胜!')
  23. money += debt
  24. elif first == 2 or first == 3 or first == 12:
  25. print('庄家胜!')
  26. money -= debt
  27. else:
  28. needs_go_on = True
  29. while needs_go_on:
  30. needs_go_on = False
  31. current = randint(1, 6) + randint(1, 6)
  32. print('玩家摇出了%d点' % current)
  33. if current == 7:
  34. print('庄家胜')
  35. money -= debt
  36. elif current == first:
  37. print('玩家胜')
  38. money += debt
  39. else:
  40. needs_go_on = True
  41. print('你破产了, 游戏结束!')

注:这个太烧脑了,博主已经破产了(笑哭~)

2. 有用的练习

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

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

参考答案:

  1. """
  2. 输出斐波那契数列的前20个数
  3. 1 1 2 3 5 8 13 21 ...
  4. Version: 0.1
  5. Author: along
  6. """
  7. a = 0
  8. b = 1
  9. for _ in range(20):
  10. a, b = b, a + b
  11. print(a, end=' ')

2.2 找出10000以内的完美数。

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

  1. """
  2. 找出1~9999之间的所有完美数
  3. 完美数是除自身外其他所有因子的和正好等于这个数本身的数
  4. 例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
  5. Version: 0.1
  6. Author: along
  7. """
  8. import math
  9.  
  10. for num in range(1, 10000):
  11. result = 0
  12. for factor in range(1, int(math.sqrt(num)) + 1):
  13. if num % factor == 0:
  14. result += factor
  15. if factor > 1 and num // factor != factor:
  16. result += num // factor
  17. if result == num:
  18. print(num)

2.3 输出100以内所有的素数。

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

  1. """
  2. 输出2~99之间的素数
  3.  
  4. Version: 0.1
  5. Author: along
  6. """
  7. import math
  8.  
  9. for num in range(2, 100):
  10. is_prime = True
  11. for factor in range(2, int(math.sqrt(num)) + 1):
  12. if num % factor == 0:
  13. is_prime = False
  14. break
  15. if is_prime:
  16. print(num, end=' ')

Python语言基础04-构造程序逻辑的更多相关文章

  1. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  2. Python语言基础与应用 (P16)上机练习:基本数据类型

    本文是笔者在学习MOOC课程<Python语言基础与应用> (北京大学-陈斌)中根据上机课时的要求写下在代码 课程总链接: 中国大学MOOC B站 本节课链接 数值基本运算: 33和7+, ...

  3. Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...

  4. ArcPy开发教程1-面向ArcGIS的Python语言基础

    ArcPy开发教程1-面向ArcGIS的Python语言基础 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 第一节课 时间2019年2月26日 上午第一节 讲解:A ...

  5. 2.3 Python语言基础

    2.3 Python语言基础 1 语言语义(Language Semantics) 缩进,而不是括号 Python使用空格(tabs or spaces)来组织代码结构,而不是像R,C++,Java那 ...

  6. Python 语言基础

    Python 语言基础 Python 开发环境 计算机组成 编程语言(计算机语言)是人们为了控制计算机,而设计的一种符号和文字的组合,从而实现向计算机发出指令. 形式是符号和文字的组合 目的是为了控制 ...

  7. [Python学习笔记1]Python语言基础 数学运算符 字符串 列表

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  8. python(一):python语言基础

    一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...

  9. Python实验报告——第2章 Python语言基础

    实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...

  10. 【Python笔记】Python语言基础

    Python是一种解释性(没有编译).交互式.面向对象的语言 1.安装python编译器 版本:Python2.7比较普遍,Python不是向下兼容的软件,因此Python3.x有些东西不好找资料 2 ...

随机推荐

  1. JAVA中this和super用法

    参考网上资料和自行理解总结java中this和super中各自用法及其差异 <一>. this的用法 构造方法是创建java对象的重要途径,通过new关键字调用构造器时,构造器返回该类的对 ...

  2. python使用open的OSError: [Errno 22] Invalid argument错误

    这两天在写一个新闻类的spider时,遇到了OSError: [Errno 22] Invalid argument这个错误,苦恼的两天,无果.后来通过请教学长,发现原来是打开的文件名中含有一些系统的 ...

  3. pwn-pwn2

    环境说明 Ubuntu 16.04 pwntool IDA gdb-peda 先丢到Ubuntu看看文件的类型  64位 然后看看保护机制,发现没有保护机制 然后丢到IDA看看  F5查看伪代码 ma ...

  4. ubuntu18.40 rtx2080ti安装显卡驱动/cuda/cudnn/tensorflow-gpu

    电脑环境 ubuntu 18.40 gpu  rtx2080ti 一.安装显卡驱动 刚开始尝试用手动安装方式安装驱动 下载了驱动程序但是因为没有gcc所以放弃这种方法 后尝试最简单的方式 在 菜单-- ...

  5. 通过Python代码操作MySQL:

    pymsql / MySQLdb pymysql支持 py2/py3 MySQLdb支持py2 ORM框架 django orm ( 自己对数据连接有优化机制 ) SQLAlchemy ( 自带数据库 ...

  6. 《Vue 进阶系列之响应式原理及实现》

    https://www.bilibili.com/video/av51444410/?p=5 https://github.com/amandakelake/blog/issues/63 https: ...

  7. ResultMap(还没细看)

    前言 MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转换的手段了,而res ...

  8. angular和ionic4对过滤器pipe的使用

    以下为自定义过滤器 import { Pipe, PipeTransform, Injectable } from '@angular/core'; import { DomSanitizer} fr ...

  9. 移动端js触摸touch详解(附带案例源码)

    移动端触摸滑动原理详解案例,实现过程通过添加DOM标签的触摸事件监听,并计算触摸距离,通过距离坐标计算触摸角度,最后通过触摸角度去判断往哪个方向触摸的. 触摸的事件列表 触摸的4个事件: touchs ...

  10. AngleSharp 实战(04)之遍历内部超链接(a)元素的 Href 和 InnerText

    文档地址:https://anglesharp.github.io/docs/Examples.html 直接贴代码了: using System; using System.Linq; using ...