Loading

元解博客

君未视容器之壳、绿径之缘、强欲之行、寰宇之法?

Python —— 优美与高级的语言

|
2023-05-10
|
浏览量:96
标签:编程

1. 第一部分

初识 Python

Python 的起源

  • 1989 年,为了消磨圣诞假期,Gudio van Rossum 吉多·范罗苏姆(龟叔)打算开发一款编译器.
  • 1991 年,Python 诞生了,名字来自电视剧《Monty Python’s Flying Circus》
  • Logo 为两条 Pyhon 的直译“蟒蛇”

Pyhon 相较于其他语言,更加的优雅.

  • 简单
  • 易学
  • 开发效率高
  • 适用面广泛:

    • 自动化脚本、数据处理、AI 程序...

什么是编程语言

编程语言就是编写程序的语言,用于和计算机进行交互.

计算机大多是二进制的,只能识别 0、1.所以需要让人类用编程语言语言和计算机沟通. 故解释器可以想象为计算机和人类之间的翻译官.

解释器将编程语言翻译为二进制语言,然后转告给计算机.

Python 环境安装

想要使用任何一门语言,都需要对应语言的开发环境.

进入Python 官网,下载最新版 Python 安装包.
安装时勾选左下角自动安装环境变量.
在自定义安装盘符时,用\Python\Python+verson命名

在命令命令提示符中输入

Python

如果输出了 Python 的版本,那说明安装正确了.

Hello World

全世界的程序员有个不成文的规定:
第一个程序应该向世界说你好.

打开命令提示符.
来对 Python 进行调用.
然后在>>>后面输入:

print("Hello world")

即可看到输出为”Hello World“.ps: 括号和引号应该为英文字符,在英文状态下输入.

Print:打印
所以这段代码的含义:在屏幕上输出括号中引号内的内容

Python 解释器


代码随时都可以写,但是运行代码需要解释器程序.
解释器程序的功能有 2:

  1. 翻译代码
  2. 提交给计算机

在 Python 安装文件夹中的Python.exe就是 Python 自带的解释器.
在之前我们使用的命令提示符写 Python 代码,也是通过调用这个解释器来实现的.

但是这种方法只能运行 1 行代码 😥.

所以我们可以先写好代码,再将它给解释器,而不是在单行的解释器里面写代码.

那么我们可以在训练文件夹中创建Hello world.py文件.用记事本打开,并将要写的代码写入.
然后在命令提示符中运行它:

python+path

ps:如果路径中有空格,需要在用英文引号把路径括起来.

PyCharm 开发工具的安装和基础使用

Python 程序开发有很多种方式:

  • 解释器中写代码
  • 把代码导入解释器
  • ==使用第三方 IDE(集成开发工具).==

Pycharm 是当下 Pythoner 使用最频繁的工具程序.
首先在官网安装它,使用 Community 版本足够.

在 UI 界面,点击新建工程.
在 Location 处,填写工程存放的位置,填之前建立的训练文件夹即可.
点击Previsouly configured interpreter添加解释器.

永远下载预构建索引

可以把之前写的 hello world 文件拿出来熟悉一下 Pycharm.
可以通过绿色小三角运行一下.

结果会在下方输出.

PyCharm 的基本使用

Pycharm 的设置可以在这里进入
可以修改字体:
ps: 个人很喜欢 16 的大小!

中文语言包可以在 Plugins 中下载插件:chinese
ps: 如果要走开发方面道路,个人不建议使用. 因为后期天天都要和英文技术手册打交道.

非常推荐 translation 插件!可以在线翻译生单词
其中,我们可以配置谷歌的镜像网站以继续使用本不再支持的谷歌翻译和 TTS.

https://translate.amz.wang
https://gtranslate.cdn.haah.net
https://translate.3822808.com

彩虹屁插件可以让代码层次更加清晰:Rainbow Brackets.

作为一个程序员,快捷键操作是必备的技能!

Ctrl+z:撤回一步

1. 第二部分

字面量

字面量:在代码中,写下来的内容所固定的值,叫做字面量.
Python 中有常见的 6 种值(数据)的类型:

整数和浮点数就是数学中的整数和小数.

字符串(string),又称文本,由任意数量的文字、符号、数字组成.所以叫做字符串.使用时需要带上引号.

我们可以在之前的训练文件夹中新建一个训练文件来练习不同自变量的输出方式.

代码可以为:

print(520)
print(13.14)
print("Elaina")

其中只有字符串”Elaina“需要加引号.

注释

注释就是对代码进行解释.解释器不识别注释内容,注释是专门给人看的.
添加注释,让代码更方便让开发者阅读.

  • 单行注释:以一个#+space开头,右边所有的文字作为注释.其中空格可以不加,但是加上了之后,代码更加规范、美观、优雅.
  • 多行注释:以三对双引号包起来的"”"注释""“.

我们可以在之前的训练文件夹中新建一个训练文件来练习注释.

代码可以为:

"""
Game:《Who is Elaina's husband》
issue date: 6.21_1:30AM
"""
ElainaLover = "yuanjie"
InputElainaLover = input("Who is Elaina's husband?\n yuanjie or else?\n") # I am the only husband fr :D
if InputElainaLover == ElainaLover:
print("okay,you are a honest guy!")
else:
print("Let me find my knife.") # I will kill you :p

变量

变量:在程序运行时,能储存计算结果或能表示值的抽象概念.
简单的说,变量就是在程序运行时,记录数据用的.

变量的定义格式:
变量名称 = 变量的值
变量就像一个盒子,值就是盒子里的东西.

我们可以在之前的训练文件夹中新建一个训练文件来练习变量.

代码可以为:

"""
Game:《Show LOVE》
issue date: 6.22_10:17AM
"""
Love = "Elaina"
Saying = 5201314
print(Love, Saying)

, 可以隔开多分数据.

变量可以存储数据,自然也可以让数据参与运算.
我们可以在之前的训练文件夹中新建一个训练文件来练习变量运算.

代码可以如下:

"""
Game:《Show LOVE》
issue date: 6.22_10:17AM
"""
NumWifeBefore = 12
print("I have", NumWifeBefore, "wives before met Elaina")
NumWifeMet = NumWifeBefore - NumWifeBefore+1
YuanWife = "Elaina"
print("Until I met", YuanWife, "I have only", NumWifeMet, "wife,her name is", YuanWife)

数据类型

数据是有类型的.

各类型都有自己的名称,例如
字符串:striing
整型:int
浮点型:float

我们可以通过 type()语句来得到数据的类型:
语法:

type(数据)
  1. 在 print 语句中可以直接输出类型信息.
    我们可以在之前的训练文件夹中新建一个训练文件来练习直接输出类型.
    代码可以如下:
print(type("Elaina"))
print(type(520))
print(type(13.14))

  1. 用变量存储 type()的结果
    我们可以在之前的训练文件夹中新建一个训练文件来练习储存类型.
    代码可以如下:
"""
Game:《storage type》
issue date: 6.22_10:50AM
"""

TypeElaina = type("Elaina")
Type520 = type(520)
Type13_14 = type(13.14)
print(TypeElaina)
print(Type520)
print(Type13_14)

  1. 查看变量中的数据类型.
    我们可以在之前的训练文件夹中新建一个训练文件来查看变量值的类型.
    代码可以如下:
"""
Game:《View variate types》
issue date: 6.22_10:17AM
"""

YuanWife= "Elaina"
YuanLoveForElaina = 520
TimeForLoving = 13.14
print(type(YuanWife))
print(type(YuanLoveForElaina))
print(type(TimeForLoving))

但是查看的只是变量中数据的类型,而不是变量的类型.盒子里面装了个球,那它还是盒子,而不是球.

数据类型转换

数据类型之间,在特定的场景下,是可以互相转换的,如字符串转数字、数字转字符串等.

我们会经常用到这个功能:

  • 从文件中读取数字,默认为字符串
  • input()默认为字符串
  • ...

()中是什么就转换什么.

它和 type()都是有返回值的.

我们可以在之前的训练文件夹中新建一个训练文件来练习类型转化.

代码可以为:

"""
Game:《Change types》
issue date: 6.22_11:18AM
"""
YuanWife = "Elaina"
LoveInStr = str(520)
TimeInStr = str(13.14)
print(type(LoveInStr))
print(type(TimeInStr))
print(YuanWife, LoveInStr, TimeInStr)


可以看到类型成功转换,且内容为被破环.

但是非数字符串在转化为数字类型时会破坏内容.

浮点数转化为整数会向下取整.

标识符

在 Python 中可以给很多东西取名字:

  • 变量
  • 方法
  • ...

这些名字我们都称作标识符.

Python 中,标识符的命名都三大规则:

  1. 内容限定
  2. 大小写敏感
  3. 不可使用关键字
  4. 内容限定:
    在标识符命名中,只允许出现

    1. 各语言文字

      1. 不推荐使用非英文
    2. 数字

      1. 不可以用作开头
    3. 下划线
  5. 大小写敏感

  6. 不可使用关键字

文件名
全小写,可使用下划线


应该是简短的、小写的名字。如果下划线可以改善可读性可以加入。如 mypackage。

模块
与包的规范同。如 mymodule。


总是使用首字母大写单词串。如 MyClass。内部类可以使用额外的前导下划线。

函数&方法
函数名应该为小写,可以用下划线风格单词以增加可读性。如:myfunction,my*example_function。
*注意\_:混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。

函数和方法的参数
总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。
如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。

全局变量
对于 from M import *导入语句,如果想阻止导入模块内的全局变量可以使用旧有的规范,在全局变量上加一个前导的下划线。
*注意*:应避免使用全局变量

变量
变量名全部小写,由下划线连接各个单词。如 color = WHITE,this*is_a_variable = 1
*注意\_:
1.不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
2.私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。
3.变量名不应带有类型信息,因为 Python 是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。

常量
常量名所有字母大写,由下划线连接各个单词如 MAX_OVERFLOW,TOTAL。

异常
以“Error”作为后缀。

缩写
命名应当尽量使用全拼写的单词,缩写的情况有如下两种:
1.常用的缩写,如 XML、ID 等,在命名时也应只大写首字母,如 XmlParser。
2.命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式。
例如:
function 缩写为 fn
text 缩写为 txt
object 缩写为 obj
count 缩写为 cnt
number 缩写为 num,等。
前导后缀下划线
一个前导下划线:表示非公有。
一个后缀下划线:避免关键字冲突。
两个前导下划线:当命名一个类属性引起名称冲突时使用。
两个前导和后缀下划线:“魔”(有特殊用图)对象或者属性,例如init或者file。绝对不要创造这样的名字,而只是使用它们。
_注意_:关于下划线的使用存在一些争议。

特定命名方式
主要是指 xxx 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如
class Base(object):
def init(self, id, parent = None):
self.id = id
self.parent = parent
def message(self, msgid):
…略
其中 idparentmessage 都采用了系统保留字命名法。
附:Google Python 命名规范
module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.

运算符

算数运算符

算数运算符就是用于做数学运算的.

我们可以在之前的训练文件夹中新建一个训练文件来练习算数运算符.
代码可以为:

"""
Game:《Buy some flower for Elaina》
Issue date:6.22_2:29PM
"""
yuan_money = 3914
flower_price = 5 # 5 yuan for a flower
num_buying_flowers = 520
yuan_balance = yuan_money - num_buying_flowers*flower_price
print("I had", yuan_money, "yuan before, after I bought", num_buying_flowers, "flowers for Elaina, I have only", yuan_balance, "yuan")

赋值运算符



则代码可以优化为

"""
Game:《Buy some flower for Elaina》
Issue date:6.22_2:29PM
"""
yuan_money = 3914
print("I had", yuan_money, "yuan before")
flower_price = 5 # 5 yuan for a flower
num_buying_flowers = 520
yuan_money -= num_buying_flowers*flower_price
print("after I bought", num_buying_flowers, "flowers for Elaina, I have only", yuan_money, "yuan")

字符串的三种定义方式

字符串在 Python 中有多种定义方式:

  1. 单引号定义法:age = '15'
  2. 双引号定义法:age = "15"
  3. 三引号定义法:age = """15"""
    其中三引号定义法,和多行注释一样,也支持换行操作.

我们可以在之前的训练文件夹中新建一个训练文件来练习这三种定义法.

代码可以为:

"""
Game:《Some saying for Elaina》
Issue date:6.22_2:58PM
"""
yuan_wife_name = 'Elaina'
dateline = "6.22_2:58PM"
saying = """
You smiled and talked to me of nothing and I felt that for this I had been waiting long.
I have forgotten the date that I first met you.And I will never know when I will leave you.
"""
print("Now,", dateline, saying, "\nfor", yuan_wife_name)

思考 🧐:如果我想要定义的字符串本身含义引号怎么办?

  • 单引号定义内含双引号
  • 双引号定义内含单引号
  • 用转义字符(\)来解除引号效用.

例如:

saying = """
"You smiled and talked to me of nothing and I felt that for this I had been waiting long."
I have forgotten the date that I first met you.And I will never know when I will leave you.
"""

变量的拼接

如果我们有两个字符串字面量,可以将其拼接成一个字符串,通过+号完成.
如:

print("My wife is"+"Elaina")

一般情况下,字面量和或变量和变量之间才会用拼接.
我们可以在之前的训练文件夹中新建一个训练文件来练习字符串的拼接.
代码可以为:

"""
Game:《Lover》
Issue date:6.28_6:18PM
"""
boy = "Yuanjie"
girl = "Elaina"
print(boy+" like "+girl+" best.")

但是+只能连接字符串,不能连接其他数据类型.

变量格式化

字符串的拼接在变量过多的时候使用起来太麻烦了,而且无法和数字或其他类型拼接.

所以我们可以将字符串格式化.字符串格式化本身也是字符串的拼接,但它是占位形的拼接,需要用到占位符%.
例如:

lover = "Elaina"
saying = "%s, I love you more." % lover

%表示,将要转为
s 表示,

注意多个变量占位要用()将变量括起来,并且按顺序写入变量,中间用, 隔开.

我们可以在之前的训练文件夹中新建一个训练文件来练习字符串格式化.
代码可以为:

"""
Game:《Saying love》
Issue date: 6.24_5:30PM
"""
lover = "Elaina"
duration = 1314 # TODO
saying = "%s, I love you more. I love you %d" % (lover, duration)
print(saying)

字符串格式化的精度

如果是%f 的占位,所以精度控制的话就会出现 19.9000000 的情况,占用内存.
我们可以使用辅助符号 m.n 来控制数据的宽度和精度

  1. m 控制宽度,宽度小于数字本身则不生效,小数点也会占用一位
  2. n 控制小数点进度,会四舍五入

例如:

  • %5d:将整数宽度控制在 5,如果是数字 11,则变成【space】【space】【space】11.
  • %.2f:不限制宽度,小数点精度为 2 位数

我们可以在之前的训练文件夹中新建一个训练文件来练习控制字符串的精度.
代码可以为:

"""
"""
Game:《McDonald's for Elaina》
Issue date: 6.24_8:46PM
"""
cola_pr = 5
french_fries_pr = 13.75
hamburgers_pr = 19.5


def buy_food(money, food, wife, other1):
    if food == "cola":
        money -= 5
        if other1 == "french":
            money -= 13.75
        else:
            money -= 19.5
    if food == "french":
        money -= 13.75
        if other1 == "cola":
            money -= 5
        else:
            money -= 19.5
    if food == "hamburgers":
        money -= 19.5
        if other1 == "french":
            money -= 13.75
        else:
            money -= 5
    print("Okay! You and your wife are always welcome at McDonald's.")
    print("wish %s and you can be forever. Give you back %.2f yuan." % (wife, money))
    return money


input_begin = input("Do you wanna buy some thing for your wife?\nY/N\n")
if input_begin == "Y":
    input_wife = input("Who is your wife?\n")
    input_money = float(input("How many money you have?\n"))
    input_food = input("Which food you wanna buy?\ncola, french_fries or hamburgers?\n")
    input_process = input("Any else?\nY/N\n")
    if input_process == "Y":
        input_other = input("cola, french_fries or hamburgers?\n")
buy_food(input_money, input_food, input_wife, input_other)
    else:
        input_other = "none"
buy_food(input_money, input_food, input_wife, input_other)
else:
    print("okay, always welcome")

抱歉写兴奋了.

变量的格式化方法 2

前面我们学过了%占位来进行格式化.
我们也可以通过语法:
f“内容{变量}”
来快速格式化变量.
但是它不能控制精度,只能原样输出. 如果一定需要精度控制,需要%占位完成.

我们可以在之前的训练文件夹中新建一个训练文件来练习 f 格式化.
代码可以为:

name = "yuan jie".title()
hobbies = "programming, physics, math and philosophy"
job = "a student"
print(f"Hello, my name is {name}, and I like {hobbies}, now I am {job}.")

数据输入

生活中常常会有程序要让我们输入信息的场景. 如果想要在 Python 中做到,需要用到 input()语句.
input()语句和 print()相反,print()是输出,而 input()是输入
input 的使用十分简单

  • 使用 input()来获取键盘输入
  • 使用一个变量来存储 input()的数据

例如:

password = input("Enter your password")

我们可以在之前的训练文件夹中新建一个训练文件来练习 input 语句.

代码可以为:

password = "Elaina5201314"
input_password = input("Enter your password\n")
if input_password == password:
print("Welcome back,YuanJie SaMa!")
else:
print(" enter again")

1. 第三部分

布尔类型和比较运算符

进行逻辑判断,是生活中常见的行为.
程序亦然.
布尔类型的字面量:

  • True 表示真
  • False 表示假

布尔类型只有这两个字面量.

布尔类型可以主动定义,也可以根据比较运算符来得到.
Python 中比较运算符主要有六类:
我们可以在之前的训练文件夹中新建一个训练文件来练习布尔类型.
代码可以为:

lover = "Elaina"

input_lover = input("Who is your lover?")

is_real_lover = lover == input_lover

print(f"Is {input_lover} your real lover? That's totally {is_real_lover}")

print(f"My judgment is up to {type(is_real_lover)}")

if 语句的基本格式

大家看到 if 肯定已经不陌生了,毕竟我之前已经夹带私货了很多次 if 语句了.

if 语句就是基于 bool 类型进行判断的.
if 就是一个简单的逻辑判断,判断方法就是上面所说的比较运算符+ bool 类型
具体用法为:

if 判断语句:
    命令语句
if 0<100:
    print("OMG, I just realized that Elaina really loves me")

显而易见 0<100 返回的条件永远为 Ture.
所以这个 print 语句永远可以被执行.

我们可以在之前的训练文件夹中新建一个训练文件来练习 if 语句.
代码可以为:

input_score = int(input("Enter your score pls:"))

if input_score >= 561:

    print("You can definitely get into Wen Zhong School")

if else 语句

上面我们学习了 if,但是它只能执行满足的情况,如果要执行不满足情况难道还要再加一个 if 吗?
不用,当返回为 False 时,else 语句可以被执行.
我们可以把 else 理解为否则,if 为如果.
用法:

if 判断语句:
    命令语句
else:
    命令语句

else 的出现必须以 if 为前提.
我们可以把上面 if 的代码升级一下:
代码可以为:

input_score = int(input("Enter your score pls:"))

if input_score >= 561:
    print("You can definitely get into Wen Zhong School")
else:
    print("Maybe")

if elif else 语句

我们往往还会遇到不同条件不同执行的情况.
那么我们就需要引入 elif.
用法也很简单

此处的 else 是当 if 和 elif 的所有情况都不满足是执行.
我们可以把上面 if else 的代码再升级.
代码可以为:

WZhong_cut_off_pot = 561

input_score = int(input("Enter your score pls:"))

if input_score - WZhong_cut_off_pot >= 20:

    print("You can definitely get into Wen Zhong School")

elif input_score - WZhong_cut_off_pot < 20 and input_score - WZhong_cut_off_pot > 0:

    print("Maybe")

elif input_score - WZhong_cut_off_pot < 0 and input_score - WZhong_cut_off_pot > -20:

    print("That's a little terrible.")

else:

    print("Are you fucking kidding me?")

判断语句的嵌套

我们常常遇到多重判断,前置判断+实质判断.
这时候就需要我们嵌套判断语句了.

具体用法为:

if 判断语句:
    命令语句
    if 判断语句:
        命令语句

首先判断最外层 if,若 True 则判断第二层 if.
我们可以把上面 if elif else 的代码再升级.
代码可以为:

input_identity = input("Are you student or other:")

if input_identity == "student":

    WZhong_cut_off_pot = 561

    input_score = int(input("Enter your score pls:"))

    more_less_score = input_score - WZhong_cut_off_pot

    if more_less_score >= 20:

        print("Congradulation! You can get into Wen Zhong School definitely!")

    elif more_less_score <= 20 and more_less_score >= 0:

        print("Maybe")

    else:

        print("Consider other one.")

else:

    print("Sorry, This is for students only.")

1.第四部分

while 循环的基础应用

循环也是我们常常用到的功能.
当条件满足时,就循环执行命令语句.
它的用处非常大.
用法:

while(判断语句)
    命令语句

当判断语句返回 True/1 时,就循环命令语句.
我们可以在之前的训练文件夹中新建一个训练文件来练习 while 循环.

代码可以为:

times = 520

print(f"Today, I will rewrite Elaina's name for {times} times")

already_wr = 0

while already_wr < times:

    already_wr += 1

    if already_wr > 1:

        print(f"Elaina, it's {already_wr} times")

    else:

        print(f"Elaina, it's {already_wr} time")

while 循环的嵌套运用

while 可以和条件判断一样,嵌套使用的.
用法也一样:

while(判断语句)
    命令语句
    while(判断语句)
        命令语句

我们可以在之前的训练文件夹中新建一个训练文件来练习 while 循环嵌套.

代码可以为:

lasting_days = 520

already_day = 1

while already_day <= lasting_days:

    if already_day <= 200:

        if already_day > 1:

            print(f"I already give Elaina roses as gift {already_day} days")

        else:

            print(f"I already give Elaina roses as gift {already_day} day")

    else:

        print(f"I already give Elaina myself as gift {already_day} days")

        i = 1

        while i <= 3:

            print("Maybe Elaina will accept me today")

            i += 1

    already_day +=1

for 循环的基本语法

处理 while 循环,Python 中还有 for 循环,for 循环和 while 循环有相同也有不同.
while 循环是看整体条件是否符合

for 循环则是逐个处理,直到全部完成(无条件),称为轮询

for 循环的语法:

for 临时变量 in 待处理数据集:
    命令语句

其中可能只有待处理数据集不太好理解.
例子:

name = "yuan jie", "jie sou", "xiao yuan"

for my_name in name:

    print(my_name.title())

range 语句

上面的待处理数据集如果严格称呼叫做序列类型.
内容可以一条条取出的类型叫做:序列类型.
序列类型包括:

  • 字符串
  • 列表
  • 元组
  • ....
    range 函数可以帮助我们快速生成数字序列.
    语法 1:
range(num)

若要获取 range(5)的数据则是:
0,1,2,3,4(不包括 5)
语法 2:

range(num1,num2)

若要获取 range(5,8)的数据则是:
5,6,7(不包括 8)
语法 3:

range(num1,num2,step)

若要获取 range(5,10,2)的数据则是:
5,7,9(不包括 10)
语法 3 的意思为:
从 num1 开始,到 num2 结束(不含 num2),数字间的步进即 step.

我们可以在之前的训练文件夹中新建一个训练文件来练习这三种语法.

代码可以为:

for elements1 in range(6):

    print(elements1, end="  ")

print("")

for elements2 in range(6, 10):

    print(elements2, end="  ")

print("")

for elements3 in range(10,20,2):

    print(elements3, end="  ")

for 的嵌套使用

同前面的 while,if 一样,for 循环也可以嵌套.

我们可以在之前的训练文件夹中新建一个训练文件来练习 for 的嵌套使用.

代码可以为:

already_day = 0

lasting_days = 520

for already_day in range(lasting_days + 1):

    print(f"I have give Elaina flowers for {already_day} day!")

    if already_day >= 300:

        for special_day in range(2):

            print(f"{already_day} day is a special day. I give her a kiss.")



print(f"We get married in {already_day} day!")

这里说一下问什么代码最开头要定义 already_day = 0.
因为 for 循环的变量是临时变量,再在 for 之外访问它是不规范的,所以在 for 循环前先定义一下.

循环终端:break 和 continue

我们可能会遇到不得不跳过某个循环的情况:
Python 中有 break 和 continue 来达成目的:

  1. continue:
    用处:中断本次循环,进入下一循环
  2. break:
    用处:直接结束循环

break 和 continue 都是可以嵌套的.

我们可以把 input 那章写的小游戏升级一下.
代码可以为:

account = "yuanjie"

while 1:

    input_account = input("Enter your account\n")

    if input_account == account:

        password = "Elaina5201314"

        while 1:

            input_password = input("Enter your password\n")

            if input_password == password:

                break

            else:

                print("Password incorrect!")

        print("Password correct!")

        break

    else:

        print("account incorrect")

        continue

第五部分

体验函数

函数:组织好的,可重复使用的,用来实现特定功能的代码段.
Python 中有很多内置的函数例如len 函数,可以用于识别字符串的长度.
接下来,我们试试不适用 Python 自带的 len(),来完成字符串长度的计算.
至于使用到的函数语法,会在下小结进行详细介绍,这里只是体验一下.
在没有函数前,我们对于这个功能的代码优化顶多是这个水平:

str1 = "Elaina is my wife"

str2 = "My wife is Elaina"

str3 = "I am YuanJie"



str_group = [str1, str2, str3]

str_group_num = 0

for any_str in str_group:

    len = 0

    for i in any_str:

        len += 1

    print(f"{any_str} have {len} charactors.")

而且还有个 bug,那就是如果字符串中有空格那么统计就会把空格也统计进来.

如果有了函数,就会比这个要简单很多,但是在没有学方法之前,上面那个 bug 还是没法修复.

str1 = "Elaina is my wife"

str2 = "My wife is Elaina"

str3 = "I am YuanJie"



str_group = [str1, str2, str3]

def my_len (data):

    count = 0

    for i in data:

        count += 1

    print(f'Str:"{data}" have {count} characters')

for j in range(3):

    my_len(str_group[j])

事实上,示例 1 也是用了函数的思想即不重复造轮子.
你可能觉得示例 2 和示例 1 没有太大的差别,那是因为示例 1 我优化得太好了.
如果这种功能需要多次分批调用的话,那么函数的优势就显现出来了.

函数基础定义语法

函数的定义:

def 函数名(参数):
    函数体
    return 返回值

def是一个关键字声明要写函数. 函数体就是函数中要执行的命令. 在本节不需要掌握参数返回值.
调用函数直接输入函数名(参数)即可.
这里不涉及参数,所以()中留空即可
我们可以试着定义一个简单的函数.
例如:

owner = "YuanJie"




def wife():

    print(f"{owner}'s wife is Elaina")




wife()

函数的传入参数

传入参数使的函数在执行时,可以使用外部传给的数据. 就是函数内部临时变量.
示例:

def sum(sum1,sum2,sum3):

    result = sum1 + sum2 + sum3

    print(f"{sum1} + {sum2} + {sum3} = {sum1 + sum2 + sum3}")

input_sum1 = float(input("sum1:"))

input_sum2 = float(input("sum2:"))

input_sum3 = float(input("sum3:"))

sum(input_sum1, input_sum2, input_sum3)

这是一个简单的求和.
但是可以看到我复制了很多次 input 语句,这完全可以被包含在函数中,但是需要返回值的知识.

设置了函数的传入参数,我们在调用该函数的时候就必须传入参数. 传入的参数顺序需要和定义的传入参数顺序保持一致.
以上面的示例为例:
我在 sum 函数中定义了 sum1,sum2,sum3 三个参数,它们也称为形式参数(形参),我在调用 sum 函数的时候传入了 input_sum1, input_sum2, input_sum3,它们称为实际参数(实参),传入的实参和形参顺序一一对应,input_sum1 对应 sum1,input_sum3 对应 sum3.

函数返回值

定义语法

函数的返回值就是函数执行完毕后输出的值.

END
CC BY-SA 4.0 | 署名-相同方式共享

留下一条评论




暂无评论