接下来是聊条件与回圈的部分,毕竟写程序这两个东西非常常使用到。
条件控制的语法又可以称之为判断式、决策(?)等等,反正就统称条件式,也就是你熟悉的 if...else
啦。
通常来讲我们在 JavaScript 是非常常使用 if
、if/else
或 if/else if/else
语法来做条件式判断,当条件成立时,就会走特定的 { ... }
内容,所以这边简单举例一下例子好了。
举例来讲,如果现在天气晴朗的话,我要出现「天气好棒!」,如果天气不好的话,要出现「天气好差!」的字眼:
var now = true;
if(now) {
console.log('天气好棒!');
} else {
console.log('天气好差!');
}
上面是一个非常简单的 JavaScript if/else
条件式判断,若希望条件多一点的话,则是使用 if/else if/else
:
var myName = 'Ray';
if(myName === 'QQ') {
console.log('哈罗 QQ');
} else if (myName === 'Ray') {
console.log('哈罗 Ray');
} else if(myName === 'Hello') {
console.log('哈罗');
} else {
console.log('都不熟');
}
那麽 Python 呢?写法上会有差异吗?先让我们看看 if/else
部分:
now = True
if now:
print('天气好棒!')
else:
print('天气好差!')
看起来没什麽差别对吧?但是在 if/else if/else
撰写上 Python 就会有那麽一点点差异。
在 Python 中不是 if/else if/else
而是 if/elif/else
:
(注意 Python 中并没有三等号运算子,在 JavaScript 中会有这个功能主要原因是隐含转型导致,但在 Python 不会有这个状况,通常你必须自己转型。)
myName = 'Ray'
if myName == 'QQ':
print('哈罗 QQ')
elif myName == 'Ray':
print('哈罗 Ray')
elif myName == 'Hello':
print('哈罗')
else:
print('都不熟')
题外话一下 Python 中没有 Switch/Case 的写法,但是网路上依然查得到相当多的解决方案,所以这边就不特别拉出来讲了。
目前 Python 3.10 版本已经有推出类似 switch 的语法叫做 match
,用法也与 switch 很像:
myName = 'Ray'
match myName:
case 'QQ':
print('哈罗 QQ')
case 'Ray':
print('哈罗 Ray')
剩下对於 match 有兴趣的话,可以阅读 官方 文件。
对了,Python 的 if/else
在做条件判断时,并不需要使用 ()
包覆,但是如果你使用 ()
也是可以:
now = True
if (now):
print('天气好棒!')
else:
print('天气好差!')
那麽为什麽不会出错呢?最主要是 if
的条件只接受表达式,刚好 ()
会优先执行後回传里面的内容,因此才不会出现错误,并不是代表着两种写法都可以这一点可以稍微注意一下,你不信?你可以试着输入以下程序码,看它会出现 (1)
还是 1
:
print((1))
你尝试了吗?我觉得应该没有。
所以我这边补充一下,如果上面的定论是一个错误的说法的话,那麽上方 print
正常来讲会直接输出 (1)
,但实际上是会出现 1
,因此可以验证并不是 Python 可以接受 if (True)
的写法,而是 ()
回传一个结果给了 if/else
条件式哩。
接下来聊聊回圈的部分,回圈在 JavaScript 中有满多种写法,像是 for loop
、for...in
或者是 forEach
等等非常多,满多都是跟阵列操作有关系,所以这边也推荐我先前写的 关於 JavaScript 阵列20种操作的方法,这一篇要感谢偷米骑巴哥老师的整理,这边有兴趣的人可以直接观看那篇文章,这边就不再着墨了。
那麽让我们先看一段简单的 JavaScript for loop
范例:
for(var i = 0; i < 10; i+=1){
console.log(i); // 0...1...2......9
}
上面程序码的预期结果会出现 0~9
,那麽 Python 的回圈该如何撰写呢?主要写法 for...in
的写法,但是如果想要达到上方相同作法的话,这边就必须使用 Python 的内建方法 range()
来产生一个阵列范围,你可以把它想像成原本自己要手打 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
,但是透过 range()
你可以快速生成一个阵列的概念:
for i in range(10):
print(i)
这边简单聊一下关於 range()
这个函式有哪些功用,基本上依据你传入的参数量可以得到不同的结果
range(10)
- 产生 0~9 的范围range(2, 10)
- 产生 2~9 的范围range(2, 10, 4)
- 产生递增范围 4,,以这个范例来讲起始值是 2,因此会 2 + 4 = 6,但是因为 6 + 4 超过 range()
范围,因此只会出现 2 跟 6。当然你也可以直接传入一个阵列来跑回圈也是完全没有问题的:
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print(i)
但我相信你不会想要这样写程序的,除非你真的很猛
对了,你也可以试着撰写面试常见的 9x9 考题,答案我就留到最後再公布吧。
这边也额外提一个好玩的地方,如果 for loop
所传入的是一个字串,回圈是将字串变成一个一个单字取出:
for i in 'Ray':
print(i)
除此之外还有另一种回圈写法是 while loop
,我先承认我自己在 JavaScript 中是比较少使用这种写法,之前写也常常写出死回圈(怕)
回归正题,那麽先聊聊 JavaScript 中 while loop
是怎麽写的:
var i = 0;
while(i < 5) {
i += 1;
console.log('Hello Ray' + i);
}
另一种 while 则是 do...while
:
var i = 0;
do {
i += 1;
console.log('Hello Ray' + i);
} while(i < 5)
基本上这两者呈现的结果是非常相似,都是 Hello Ray 1...5
,但是 do...while
中的 do
不管条件是否成立,必定会执行一次:
var i = 0;
do {
i += 1;
console.log('Hello Ray' + i);
} while(i < 0); // Hello Ray1
var i = 0;
// 条件不符合不执行
while(i < 0) {
i += 1;
console.log('Hello Ray' + i);
}
反观我们来看看 Python 中的 while loop
写法会不会有所不同呢?让我们继续看下去:
i = 0
while i < 5:
i += 1
print('Hello Ray' + str(i))
基本上感觉差异是不大,但是这边可以额外提一下 Python 是没有 do...while
语法的,可是我们可以模拟一个 do....while
类似的运作写法出来:
i = 0
status = True
while status:
i += 1
print('Hello Ray' + str(i))
if i >= 0:
status = False
透过上述写法我们就可以很简单的达到与原本 do...while
类似的写法,也就是不管条件语法必定会执行一次这件事情。
但是请务必要小心下面这种没有结束条件的写法,是很容易出现死回圈的:
i = 0
while True:
print(i)
i += 1
这种写法上要格外小心,在此建议不要当 7474 团(去死去死团)拿自己电脑冒险 QQ
基本上就是用两个回圈就可以做到了:
for i in range(2, 10):
for j in range(2, 10):
print(str(i) + 'x' + str(j) + '=' + str(i*j))
而上方写法又称之为「Nested For Loop」,也就是巢状回圈,通常在初学时满容易混乱的。
这边也简单描述一下运作逻辑,第一层的 for loop 在执行时,第二层 for loop 会跑九次(0~9),第二层 for loop 跑完之後记忆体会被释放掉,然後再跑第一层 for loop,以此类推。
稍微尝试了一下将鸡肉卷起来做花雕醉鸡,身边亲人与朋友吃完之後都说不输给外面卖的,看来我替自己的未来找到第二片春天了...
<<: 【Day 4】输出之後,BERT转换的Embedding怎麽用?
资料可以是资产、也可以是负债。 当组织积累了太多无用、甚至错误的资料时,资料不但不能提供价值,反而需...
其实 ISO 系统都是通用的,从 ISO 9001、 ISO 14001、 ISO 50001、IS...
N天後收盘价 若N天後收盘价 > 目前收盘价,趋势为正 若N天後收盘价 < 目前收盘价,...
excel 是很多人常用来处理报表与数据的工具,同样地在 python 也有一个套件常常在处理这件事...
要让SVG 动起来,可以使用SMIL:SVG的原生动画规范, 虽然前几年Chrome放话不再支援,但...