Day 04 : Python 基础观念 (3)

很快地今天进入基础观念最後一个小章节(感动流泪啊XD),将带大家说明流程控制、回圈和函数的基本概念!

流程控制

流程控制可以让我们利用程序码做不同的事情哦!
基本结构如下,记得下一行程序码要进行缩排 4 个字元

这边的「条件」会让程序进行判断并回传 True 或 False
如果是 True 就会进入该程序码区块罗

if 条件1:
    程序码区块1
elif 条件2:
    程序码区块2
else:
    程序码区块3

逻辑运算

and

都要成立才会回传 True

x = 5
y = 6
if x > 3 and y < 5 :
    print('Good!')
else:
    print("Bad")

or

其中一个成立就回传 True

x = 5
y = 6
if x > 3 or y > 5 :
    print('Good!')
else:
    print("Bad")

not

唱反调,True 回传 False、False 回传 True

x = 5
if not x > 3:
    print('Good!')
else:
    print("Bad")

关系运算子

等於

x = 5
if x == 3 :
    print('Good!')
else:
    print("Bad")

不等於

x = 5
if x != 3 :
    print('Good!')
else:
    print("Bad")

错误迷思

而 elif 可以很多,但很多初学者会觉得一定要写 elif 和 else,不!没有这回事
其实 if 自己就可以当一个程序码区块

  • 情况一
    这个很顺利只会印 Good!

    x = 5
    if x > 3 :
        print('Good!')
    else:
        print('Bad')
    
  • 情况二
    这个会印 Good! 也会印 I'm integer!

    x = 5
    if x > 3 :
        print('Good!')
    if isinstance(x, int):
        print("I'm integer!")
    

巢状的结构(避免波动拳)

若有多层的巢状结构,就像有人在打波动拳一样,这样的程序码结构不易阅懂且不易维护,请避免写出这样的结构。开发者应朝向尽量越少层越好的想法去撰写程序码

x = 6
if x > 1 :
    if x > 2 :
        if x > 3 :
            if x > 4 :
                if x > 5:
                    print("HERE")
                else:
                    pass
            else:
                pass
        else:
            pass
    else:
        pass
else:
    pass 

回圈

程序最擅长做重复的工作,那倒底怎麽做的呢?通常我们会用回圈来完成!
这里会用到 for 这个关键字

for 变数 in 可迭代物件:
    你的程序码

基本操作

x = [1, 2, 3, 4, 5]
for i in x:
    print(i)
>>> 1
    2
    3
    4
    5

range 函数

由於迭代一个回圈往往需要生成一个可迭代物件,我们会利用 range 创造可迭代物件

x = range(10)
list(x)
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# range(起始值, 终止值, 步伐)
x = range(5, 10, 2)
list(x)
>>> [5, 7, 9]

进阶应用

有些人可能会这样写去创造一个串列,大家要看得懂哦~

x = [ i**2 for i in range(3)]
print(x)
>>> [0, 1, 4]

强制离开回圈 break

通常会搭配 if 来操作,在特定情况下我想要让回圈不要再执行了~
(回圈觉得抽象可以自己多 print 看看 )

for i in range(10):
    print("i:", i)
    if i == 9:
        break

此次回圈跳过 continue

通常会搭配 if 来操作,在特定情况下我想要跳过这一round的步骤~

我想要在50岁以上计数人数

member_age_list = [10, 48, 13, 76, 13, 64, 57, 26, 37]
count = 0
for age in member_age_list:
    if age < 50:
        continue
    count += 1
print(count)

比较上面的写法,我觉得有更好的写法是下面这个,但我只是要 demo XDDD

member_age_list = [10, 48, 13, 76, 13, 64, 57, 26, 37]
count = 0
for age in member_age_list:
    if age >= 50:
        count += 1
print(count)

while 子句

while 也是回圈的一种,重点在条件是否成立,倘若成立就会一直执行程序码区块。若没有注意,可能会导致有无穷回圈让的状况。

while 条件:
     程序码区块

无穷回圈的案例,只要条件一直成立(True永远成立),那麽就会一直 print。
若要中断程序可以按 ctrl + C

while True:
     print("Hello World!")

对话框

我们可以透过这个特性来设计一个对话框

while True:
    name = input("Please enter your name...")
    print(f"Hello {name}")
    control = input("Do you want to leave?(Y/n)")
    if control == 'Y':
        break


小小练习建议:大家看完这个案例可以实作一个终极密码程序XD

枚举(enumerate)

这边私心介绍一个超好用的 enumerate 枚举物件,可以很方便地帮你迭代,会回传计数器和元素值:

food = ["apple", "lemon", "orange"]
for i, element in enumerate(food):
    print(i, element)
> 0 apple
  1 lemon
  2 orange

函数

看到这边的大家已经学会 python 的基本观念,但是我们常常会需要重复使用这些程序码,是否能把这些整理在一个地方,等我要用的时候呼叫呢?有的!就是函数的概念。有什麽优点呢:

  • 在开发大型的程序专案的时候,我们以函数为最小的功能单元,可以方便进行开发与侦错。
  • 减少重复程序码的区块,让程序设计更为简洁和清晰,易於维护。

定义函数

def 函数名称(参数1, 参数2, ...):
    """
    函数的注解
    """
    程序码区块
    return 回传值1, 回传值2, ...
  • 函数名称:请命名这个功能要做什麽事情,建议使用简单易懂的英文单字,例如我想输入价格之後,回传有打折的价格的功能。
    def get_discount(price, discount):
        new_price = price * (1 - discount)
        return new_price
    
  • 参数:可有可无,通常也不要太多个参数(不会超过五个,若超过五个通常可能重新思考一下这个设计)。各参数用逗号做分隔。
  • 函数的注解:可有可无,但在开发大型程序专案的通常建议加上去,方便其他专案成员了解程序码在做什麽。各回传值用逗号做分隔。
  • 缩排:在定义完 def 之後所有函数均需要进行缩排 4 行,代表同一个程序码区块。
  • 回传值:通常函数都会有回传值,可以不只一个。没有写回传值则预设为 None,另外如果遇到 return 就会跳出该函数,不会执行下面的程序码。

设计函数

参数的位置会代表相对的输入,这时候 x=1, y=2 ,这时候参数的位置是会影响输入的值

def add(x, y):
    print("x:", x)
    print("y:", y)
    result = x + y
    return result
add(1 , 2)

关键字输入,我们如果指定的话,就可以利用关键字来指定,这时候参数的顺序就不会影响输入的值

def add(x, y):
    print("x:", x)
    print("y:", y)
    result = x + y
    return result
add(y=1 , x=2)

设定预设参数值,这时候使用函数的人就不一定要输入该参数。请留意有预设参数值的参数,顺序要放在最後。

def add(x, y=10):
    print("x:", x)
    print("y:", y)
    result = x + y
    return result
add(x=1)

回收一下伏笔,之前有提到说 python 不用特别去宣告变数类型,但我们可以在 function 加上去,让别人清楚你在写什麽。参数後面加上冒号,就可以写参数类型;同样在回传值部分,用箭头符号 -> 加上参数类型。

def add(x: int, y:int) -> int:
    print("x:", x)
    print("y:", y)
    result = x + y
    return result
add(1 , 2)

<<:  资安认知-社交工程

>>:  [01] 笔记走向

如何在 SSMS 查寻资料库的复原模式 - 心得分享

DBABootcamp 最简单的方法就是右键点击资料库,然後选择"属性"。在左边...

[Day12] XSLT Injection

前言 又来Injection了! 正文 XSLT,全称Extensible Stylesheet L...

我的CMS实战心路历程 - 章序

章序 嘿!各位线上的朋友们,大家是否有定期阅读的习惯呢,这次刚好藉着跟随iThome铁人赛30天文章...

DAY17 机器学习专案实作-员工离职预测(中)

ㄧ、资料前处理 1. 补值、删值 前面我们透过视觉化的方式找到资料有缺值,因此我们要将资料进行补值。...

[day16]机器人对话纪录

以前遇到一个情况阿,使用者输入,我要ㄧ个汉堡,二杯奶茶,到後台却变成,我要\xe3\x84\xa7个...