Python 极简教程(十五)for 循环

上一节讲了 while 循环,虽然 while 循环在很多情况下都有用。但是很多时候要根据情况选择,比如 有确定的循环次数和需要遍历序列(或任何可迭代的对象)时 for 循环是更合适的选择。

遍历,简单理解就是把序列(列表、字符串、元组)中的每个元素读取一遍。

比如,有一个列表 ['x', 'y', 'z'],把每个元素打印出来:

for i in ['x', 'y', 'z']:
    print(i)

上述代码将会依次打印 ‘x’, ‘y’, ‘z’。其实也就是 i 变量会依次赋值为 ‘x’, ‘y’, ‘z’。每循环一次,i 的值会改变一次,直到把列表中的每个元素读取一遍后,循环结束。

for 变量 in 序列:
  执行的语句块
range 函数

在有一个序列的情况下,我们可以直接用 for 循环去遍历,如果我们没有序列的时候,又想用 for 循环怎么办呢?
在 Python 中提供了 range 函数,用来生成一个可迭代的对象,以供 for 循环使用。
在 Python 3 中 range 其实是一个类并不是一个函数,不过为了理解方便,我们暂且称作函数。

range 有下面的用法
range(stop) # 结束值,生成一个从 0 到 stop-1 的整数序列
range(start, stop) # 初始值,结束值。生成一个从 start 到 stop-1 的整数序列
range(start, stop, step) # 初始值,结束值,步长。生成一个从 start 到 stop-1 的整数序列,中间的跨度值为 step

上面的文字不能理解,看下面的例子:

>>> list(range(3))    # 由于 range 返回的是一个对象,不直观,转换为 list 后观察
[0, 1, 2]    # range(3) 生成的结果为 0,1,2 也就是从 0 到 3-1
>>> list(range(3,10))  # 3 到 10,也就是从 3 到 9
[3, 4, 5, 6, 7, 8, 9]
>>> list(range(3,10,2))  # 加了步长,从 3 开始,每跨度 2 再取下一个值
[3, 5, 7, 9]
>>> list(range(10, 0, -1))    # 步长为负数,那么每次会减去对应的跨度
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

使用 for 循环和 range 实现 0 到 100 的累加:

s = 0
for i in range(101):     # 如果要包含100就需要写成101,因为会减一
  s += i
# 5050

看下面一个练习:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

for i in range(100, 1000):
    if (i // 100 % 10) ** 3 + (i // 10 % 10) ** 3 + (i % 10) ** 3 == i:
        print(i)

这就是循环的优势,你不用写什么方程式解方程式,写出条件,让 for 循环挨着拿三位数去试,试出满足条件的就打印出来。

概念就这么简单,但是我相信大家还是懵的,不知道什么时候用循环什么时候不用循环。那么多练习吧,少年!

本节练习:

  1. 实现输出 1 - 2 + 3 -­ 4 + 5 -­ 6 … + 99 的和
  2. 求100以内的质数,质数是只能被1和自身整除且大于1的自然数。
  3. 打印九九乘法表。
  4. 有这样一种数如:12321(第一个等于最后一个,第二个等于倒数第二个,以此类推,直到中间仅剩一个数),写一个函数,传入一个整数,判断这个数是不是这种前后一样的数。注:1221不是这种数
  5. 《算经》中有这样一个问题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?(鶵[chú],同“雏”)
  6. 实现登录,账号名为admin,密码123,则提示“登录成功”,如果账号或者密码错误,则提示“账号名或密码错误”并允许重新输入用户名和密码,如果3次登录失败,则提示“登录失败”并退出程序。
  7. 一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被 3整除,求这样的四位数中最大的和最小的两数各是几?
  8. 完成冒泡排序。

答案见1~78. 冒泡排序

更多练习,请自行搜索 C语言编程入门100例,但请一定要先思考,再看答案,否则浪费一道就少一道咯

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值