大爽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的极限值证明:

原文地址:https://www.cnblogs.com/BigShuang/p/14976136.html