使用Linkbot学习Python 3/For循环
这是本章的新打字练习
onetoten = range(1, 11)
for count in onetoten:
print(count)
以及始终存在的输出
1 2 3 4 5 6 7 8 9 10
输出看起来非常熟悉,但程序代码看起来有所不同。第一行使用range
函数。range
函数使用两个参数,例如range(start, finish)
。start
是生成的第一个数字。finish
比最后一个数字大1。请注意,此程序可以用更短的方式完成
for count in range(1, 11):
print(count)
range函数返回一个可迭代对象。这可以使用list
函数转换为列表。以下是一些示例,说明range
命令是如何工作的
>>> range(1, 10) range(1, 10) >>> list(range(1, 10)) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(-32, -20)) [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21] >>> list(range(5,21)) [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] >>> list(range(5)) [0, 1, 2, 3, 4] >>> list(range(21, 5)) []
下一行for count in onetoten:
使用for
控制结构。for
控制结构类似于for variable in list:
。list
从列表的第一个元素开始,到最后一个元素结束。当for
遍历列表中的每个元素时,它会将每个元素放入variable
中。这允许在每次运行for
循环时使用variable
。以下是一个演示的示例(您不必输入此示例)
demolist = ['life', 42, 'the universe', 6, 'and', 7, 'everything']
for item in demolist:
print("The current item is:",item)
输出为
The current item is: life The current item is: 42 The current item is: the universe The current item is: 6 The current item is: and The current item is: 7 The current item is: everything
请注意for
循环是如何遍历并将item
设置为列表中每个元素的。那么,for
有什么用呢?第一个用途是遍历列表的所有元素,并对每个元素执行某些操作。以下是如何快速将所有元素加起来的方法
list = [2, 4, 6, 8]
sum = 0
for num in list:
sum = sum + num
print("The sum is:", sum)
输出仅仅是
总和为:20
或者您可以编写一个程序来查找列表中是否存在任何重复项,就像此程序所做的那样
list = [4, 5, 7, 8, 9, 1, 0, 7, 10]
list.sort()
prev = None
for item in list:
if prev == item:
print("Duplicate of", prev, "found")
prev = item
为了确保万无一失
Duplicate of 7 found
好的,那么它是如何工作的呢?这是一个特殊的调试版本,可以帮助您理解(您不需要输入此版本)
l = [4, 5, 7, 8, 9, 1, 0, 7, 10]
print("l = [4, 5, 7, 8, 9, 1, 0, 7, 10]", "\t\tl:", l)
l.sort()
print("l.sort()", "\t\tl:", l)
prev = l[0]
print("prev = l[0]", "\t\tprev:", prev)
del l[0]
print("del l[0]", "\t\tl:", l)
for item in l:
if prev == item:
print("Duplicate of", prev, "found")
print("if prev == item:", "\t\tprev:", prev, "\titem:", item)
prev = item
print("prev = item", "\t\tprev:", prev, "\titem:", item)
输出为
l = [4, 5, 7, 8, 9, 1, 0, 7, 10] l: [4, 5, 7, 8, 9, 1, 0, 7, 10] l.sort() l: [0, 1, 4, 5, 7, 7, 8, 9, 10] prev = l[0] prev: 0 del l[0] l: [1, 4, 5, 7, 7, 8, 9, 10] if prev == item: prev: 0 item: 1 prev = item prev: 1 item: 1 if prev == item: prev: 1 item: 4 prev = item prev: 4 item: 4 if prev == item: prev: 4 item: 5 prev = item prev: 5 item: 5 if prev == item: prev: 5 item: 7 prev = item prev: 7 item: 7 Duplicate of 7 found if prev == item: prev: 7 item: 7 prev = item prev: 7 item: 7 if prev == item: prev: 7 item: 8 prev = item prev: 8 item: 8 if prev == item: prev: 8 item: 9 prev = item prev: 9 item: 9 if prev == item: prev: 9 item: 10 prev = item prev: 10 item: 10
我在代码中添加了这么多print
语句的原因是为了让您了解每一行的作用。(顺便说一句,如果您无法弄清楚为什么程序无法正常工作,请尝试在您想要了解正在发生的事情的地方添加许多print
语句。)首先,程序从一个无聊的旧列表开始。接下来,程序对列表进行排序。这样可以将任何重复项放在一起。然后程序初始化一个prev
(ious)变量。接下来,删除列表的第一个元素,以便不会错误地认为第一个项目是重复项。接下来,进入for
循环。检查列表的每个项目是否与前一个项目相同。如果是,则找到重复项。然后更改prev
的值,以便下次运行for
循环时,prev
是当前项目的先前项目。果然,发现7是重复项。(请注意如何使用\t
打印制表符。)
使用for
循环的另一种方法是执行某些操作一定的次数。以下是一些代码,用于打印出斐波那契数列的前9个数字
a = 1
b = 1
for c in range(1, 10):
print(a, end=" ")
n = a + b
a = b
b = n
输出令人惊讶
1 1 2 3 5 8 13 21 34
使用for
循环可以完成的所有操作也可以使用while
循环完成,但是for
循环提供了一种简单的方法来遍历列表中的所有元素或执行某些操作一定的次数。
在此示例中,Linkbot将在固定的次数内播放变化的音调,而持续时间保持不变。Linkbot还可以改变音调和持续时间固定的次数。在这里,我们使用一个在固定值范围内运行的for循环。
setBuzzerFrequency.py
import barobo
dongle = barobo.Dongle()
dongle.connect()
robot = dongle.getLinkbot('6wbn') # Replace '6wbn' with the serial ID on your Linkbot
import time # For time.sleep()
t=1 # Set a value to be used for the duration of the note
for i in range (33,43): # Select which keys on a piano keyboard to use for the tones
k=pow(2,(i-49)/12)*440 # Determines the frequency of the note to be played
robot.setBuzzerFrequency(k) # Directs the Linkbot to play this frequency
time.sleep(t) # Pauses the program while the note is played
robot.setBuzzerFrequency(0) # Turns off the piezo speaker at the end of the program
运行此示例时,尝试更改循环范围和时间值以创建有趣的音效。