30天学会 Python: Day 7-无限轮回

range(start=0, stop, step=1)

用来产生 整数等差数列 的函式,常和今天要讲的 for 忆起使用
有三个参数,start 表示数列的第一项(预设为0),数列最後一项不能超过 stopstep 代表数列的公差(预设为1)

因为 start, step 有预设值所以 range() 只要有一个引数 stop 就能使用
要显示 range() 产生的内容,可以先存进一个串列(或其他容器)中

l=list(range(5))
print(l)

因为 stop 是数列的上限(不能超过),所以不会包含5

有两个引数时,第一个引数代表数列的开始

l=list(range(2, 5))
print(l)

有三个引数时,第一个引数是开始,第三个引数是公差

l=list(range(0, 5, 2))
print(l)
l=list(range(1, 10, 3))
print(l)

数列可以是倒数

l=list(range(0, -10, -1))
print(l)

回圈

用来表示重复执行的指令,有 whilefor 两种

while

语法类似 if,差别在 if 只会执行一次,while 会重复执行,直到条件不成立则跳过

while <条件>:
	<执行的内容>
		⋮
	<执行的内容>

所以 while 执行的顺序是: 判断(成立)→执行内容→判断(成立)→执行内容→...→判断(不成立)→结束回圈

下面例子中,只有 x<3 时才会执行回圈中的内容,每次执行 x 都会递增1,所以会在视窗上显示0~2
因为最後一行的 print() 不在回圈中,所以不论如何都会被执行

x=0
while x<3:
	print(x)
	x=x+1
print('end')

透过回圈列出串列中所有的元

i=0
data=[4, 5, 3, 7, 10, 43]
while i!=len(data):
	print(data[i])

透过回圈找到 n 以内所有2的次方

m=1
n=int(input())
while m<n:
	print(m)
	m=m*2

for

for 的语法是:

for <var> in <sequence>:
	<执行的内容>
		⋮
	<执行的内容>

<var> 是一个自订的名称,可以像变数一样在回圈的内容中使用(但值不可变),<sequence> 是容器、range() 等带有多个数值的资料
for 的作用是让 <var> 在回圈执行第 n 次的时候,变成 <sequence> 的第 n 项

所以透过 for 可以从一个容器中的第一项开始,依序看到最後一项

data = [4, 5, 3, 7, 10, 43]
for i in data:
	print(i)

i 在第一次执行时为 data 的第一项(4),第二次执行时为 data 的第二项(5)...第六次执行时为 data 的第六项(43),因为总共只有六项,所以回圈结束

但指派 <var> 不会更改 <sequence> 的内容

data = [4, 5, 3, 7, 10, 43]
for i in data:
	i=10
	print(i)
print(data)

虽然每次回圈都把 i 指派为10,但实际上 data 的内容没有改变

range() 结合可以列出等差数列

for i in range(5):
	print(i)

也可以透过 range() 产生从0开始的数列,再透过这个数列取得容器中的值

data = [4, 5, 3, 7, 10, 43]
for i in range(len(data)):
	print(data[i])

这个例子中,data 的长度是 6,所以len(data) 的结果是6
range(len(data)) 等同 range(6),会产生0, 1, 2, 3, 4, 5共6个数字
所以 data[i] 在第一次执行时等同 data[0],第二次等同 data[1]...第六次等同 data[5]

如果资料是字典(Dict),可以用 keys() 取得字典中的所有键,再透过键取得值

student={
	'name': 'Jay',
	'age': 18,
	'single': True 
}
for key in student.keys():
	print(student[key])

range() vs 不用 range()

如果回圈执行的内容只用到资料的 ,且不需要知道目前的元是第几个,那就可以不用 range()

列出 data 中每个元的平方,两种方式都可以

data = [4, 5, 3, 7, 10, 43]
for num in data:
	print(num**2)
data = [4, 5, 3, 7, 10, 43]
for i in range(len(data)):
	print(data[i]**2)

l1 的元乘上2,再将计算的结果存到 另一个 串列中

l1 = [4, 5, 3, 7, 10, 43]
l2 = []
for num in data:
	l2.append(num*2)

print(l1)
print(l2)

如果回圈执行的内容需要知道目前的数值是第几项,就必须用 range()

如果要把计算的结果存到 原本的 串列中,就必须知道现在计算的资料在串列中的位置

l1 = [4, 5, 3, 7, 10, 43]
for i in range(len(data)):
	data[i]=data[i]*2
print(l1)

或是会用到其他项的资料的时候也必须用 range()
下面例子中,l2 的第 n 项是 l1 的第 n 和 n+1 项的和
range() 的引数是 len(l1)-1,因为如果是 len(l1) 的话最後一次的 i 会变成5,l1[i+1](等同l1[6])不存在

l1 = [4, 5, 3, 7, 10, 43]
l2 = []
for i in range(len(l1)-1):
	l2.append(l1[i]+l1[i+1])
print(l1)
print(l2)


<<:  [Day08] Let's Build!

>>:  30天学会C语言: Day 7-switch ON!!!

Git
杂谈    

Day.11 「利用渐变效果,让网页不再死板!」 —— CSS Transform & CSS Transition

现在我们会使用基本的伪类选择器做效果了,但看到变化过程一闪而过、冷冰冰的,想增添更多渐变效果,让动...

第六章

大家在玩CMS之前应该都有先在本地端做测试的习惯吧,那应该会有遇到那种像是使用了XAMPP在本地端架...

Day 29 : C语言 - 河内塔的程序递回执行顺序为何?

如标题,这篇想用「图解」去解释河内塔的「程序递回执行顺序」为何 因为当初C有一项作业,叫我们用程序去...

Day17 暧昧让人受尽委屈 找不到相爱的证据 那可以试试枢纽

Pivot 枢纽可以说是分析资料非常重要的一个工具,特别是在於多维度的资料。所以接下来我们会有一连...

[Day 15]呐呐,还有一半别想跑(後端篇)

挑战目标: MockNative Camp 想想现在应该有三年多JAVA经验,现在公司的专案也是用J...