• 大爽Python入门教程 1-3 简单的循环与判断


    大爽Python入门公开课教案
    点击查看教程总目录

    这里只初步认识下循环和判断,以便于我们去实现一些简单的计算。
    循环和判断的详细知识和细节,我们将在后面的章节(大概是第三章)展开阐述。

    1 初步了解

    在本系列课程的准备工作的第二节 感受IDE中,展示过以下代码

    for i in range(10):
        if i % 2 == 0:
            print(i)
    

    其输出为

    0
    2
    4
    6
    8
    

    当时只是让大家看这个代码的样子和了解敲代码的感觉,
    这里来解释下这个代码。

    简单循环

    for i in range(n)的意思是从0遍历到n(不包含n)。

    更通俗一点来说,其效果是:
    循环n次,过程中i从0增加到n-1。

    示例

    >>> for i in range(3):
    ...     print("Say important things five times")
    ...
    Say important things five times
    Say important things five times
    Say important things five times
    
    >>> for i in range(5):
    ...     print(i)
    ...
    0
    1
    2
    3
    4
    

    简单判断

    if i % 2 == 0:的作用是判断i除2的余数是否等于0。
    if后面接判断语句,判断成功后,执行:下面缩进的语句,不成功则跳过。

    这里的==是比较运算符,判断两个东西是否相等。
    if后面的判断语句常会用到比较运算符有:

    • !=: 不等于
    • >: 大于
    • >=: 大于等于
    • <: 小于
    • <=: 小于等于

    代码示例

    >>> x = 5
    >>> if x > 0:
    ...     print("x is greater than 0")
    ...
    x is greater than 0
    >>> if x > 10:
    ...     print("x is greater than 10")
    ...
    >>> if x % 2 == 0:
    ...     print("x is even")
    ...
    >>> if x % 2 == 1:
    ...     print("x is odd")
    ...
    x is odd
    

    补充翻译:
    even: 偶数
    odd: 奇数

    2 缩进

    决定范围

    在上面的forif语句中,其冒号:后面的代码都有缩进。

    缩进声明了forif的管辖范围的。

    forif只管它下面有缩进的地方。

    没有缩进的,就代表超出了其管辖范围。
    或者说,跳出了forif

    示例

    比如以下的python代码

    for i in range(3):
        print("print 3 times: %s" % i)
    
    print("print once")
    

    其输出为

    print 3 times: 0
    print 3 times: 1
    print 3 times: 2
    print once
    

    再比如以下的python代码

    for i in range(3):
        if i % 2 == 0:
            print("%s is even" % i)
    
        print(i)
    

    其输出为

    0 is even
    0
    1
    2 is even
    2
    

    细节说明

    在python里面,规范的缩进是用四个空格作为一个缩进,
    在大多数IDE里面写python文件(比如atompycharm),使用Tab键往往会自动给你去生成四个空格。

    这种情况使用Tab键和四个空格没区别。

    但有的时候,从网上复制的代码,可能缩进是Tab键,你本地的是四个空格的话,
    代码放在一起会冲突。
    因为缩进方式不一致,报错一般为IndentationError

    这个时候要统一缩进格式。
    一般方法是,先去掉它的缩进,再按原结构加上缩进。

    快捷方法

    选中一段代码(可以是多行的),
    按Shift+Tab可以一起左移(去掉一级缩进),
    按Tab可以一起右移(添加一级缩进),

    3 简单使用

    2的n次幂表

    题目:张三是一个经常和2的次方打交道的人,他需要一张2的幂表,展示2的n次幂(n<=10)。

    期望输出:

    2^0 = 1
    2^1 = 2
    2^2 = 4
    2^3 = 8
    2^4 = 16
    2^5 = 32
    2^6 = 64
    2^7 = 128
    2^8 = 256
    2^9 = 512
    2^10 = 1024
    

    示例代码

    for i in range(11):
        v = 2 ** i
        print("2^%s = %s" % (i, v))
    

    递增求和

    题目:老李是一位一对一辅导老师,暑假到了,他打算招学生每天一对一辅导。由于一对一辅导的特殊性:每个学生每天只上1小时的课,老李每天只上8小时的班,即最多只招8个学生。

    为了时间价值最大化,老李想出了累进计费的方法:
    第1位学生收费100,
    之后每个学生,都在第1个学生的基础上涨价25%(结果四舍五入取整)。
    即第2位学生收费125,
    第3位学生收费125(1+25%)=156
    第4位学生收费156
    (1+25%)=195,
    依此类推...
    请展示老李招收学生个数,对应收费,和日收入

    提示:可使用round()函数来取整,示例如下

    >>> round(3.14)
    3
    >>> round(3.6)
    4
    

    期望输出:

    index: 1, current price: 100, day income: 100
    index: 2, current price: 125, day income: 225
    index: 3, current price: 156, day income: 381
    index: 4, current price: 195, day income: 576
    index: 5, current price: 244, day income: 820
    index: 6, current price: 305, day income: 1125
    index: 7, current price: 381, day income: 1506
    index: 8, current price: 477, day income: 1983
    

    示例代码

    base = 100
    rise_rate = 0.25
    s = 0
    for i in range(8):
        v = base*(1+rise_rate) ** i
        v = round(v)
        s += v
        print("index: %s, current price: %s, day income: %s" % (i+1, v, s))
    

    有趣的极限

    题目:

    [S = 1 - frac{1}{2} + frac{1}{3} - frac{1}{4} + frac{1}{5} - frac{1}{6} + ... + frac{(-1)^{n-1}}{n} ]

    求n分别为100,1000,10000时S的值。

    期望输出:

    n=100: S=0.6980731694092049
    n=1000: S=0.6936464315588232
    n=10000: S=0.6931971730609582
    

    示例代码

    n = 100
    k = 1
    s = 0
    for i in range(n+1):
        s += k / (i + 1)
        k = -k
    print("n=%s: S=%s" % (n, s))
    
    
    n = 1000
    k = 1
    s = 0
    for i in range(n+1):
        s += k / (i + 1)
        k = -k
    print("n=%s: S=%s" % (n, s))
    
    
    n = 10000
    k = 1
    s = 0
    for i in range(n+1):
        s += k / (i + 1)
        k = -k
    print("n=%s: S=%s" % (n, s))
    

    拓展说明:

    1. 目前只能先这么重复着写,未来学了函数,再来优化这部分代码。
    2. 补充2:S的极限值为ln2,值为0.6931471805599453......
    >>> import math
    >>> math.log(2)
    0.6931471805599453
    

    S的极限值证明:

  • 相关阅读:
    Linux下gdb attach的使用(调试已在运行的进程)
    Linux ps 命令
    SemaphoreFullException when checking user role via ASP.NET membership
    c程序内存分布
    正则表达式
    事务实战感悟
    oracle免客户端安装 plsql连接
    关于tomcat的热部署
    json工具包比较 fastjson jackson gson
    图片 滚动 放大缩小 旋转
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14976136.html
Copyright © 2020-2023  润新知