Python3 入门及基础语法

2023-11-01

文章目录

解释型语言

解释型语言,是在运行的时候将程序翻译成机器语言。

解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,效率比较低。

计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器

编译器翻译的方式有两种:一个是编译,一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器

解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。比如解释性Basic语言,其专用的解释器在执行Basic程序时,会逐条读取解释每个语句,这个其实就是一个编译过程,然后再执行。一般来说,现有的解释性语言都是采用的逐行解释一句,执行一句这样的方式来构建的。这样解释性语言每执行一次就要翻译一次,效率比较低。

解释型语言优缺点

编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。

解释性语言,如Java,往往会有较慢的运行速度,有时需要C++等语言的3倍 [2] 。

和编译性语言的区别

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。

解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。

编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上,而解释型语言的自身特点也使得编译器厂商愿意花费更多成本来优化解释器,解释型语言性能超过编译型语言也是必然的。

Python 简介

语言是人类最重要的交际工具,是人类之间进行信息交换的主要表达方式。

编程语言是用来定义计算机程序的语言,用来向计算机发出指令。

Python 语言是一种面向对象解释性计算机程序设计语言。

Python由荷兰数学计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, [2] 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

吉多·范罗苏姆*(Guido van Rossum)* ,是一名荷兰计算机程序员,他作为 Python 程序设计语言的作者而为人们熟知。在 Python 社区,吉多·范罗苏姆被人们认为是“仁慈的独裁者(BDFL)”,意思是他仍然关注 Python 的开发进程,并在必要的时刻做出决定。他在 Google 工作,在那里他把一半的时间用来维护 Python 的开发。

2020年11月12日, Python之父Guido van Rossum在自己的官方宣布:由于退休生活太无聊,自己决定加入Microsoft 的 DevDiv Team。

Python解释器易于扩展,可以使用C语言C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。 Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码机器码

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

优点

简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

易学:Python极其容易上手,因为Python有极其简单的说明文档 。

易读、易维护:风格清晰划一、强制缩进。

用途广泛

**速度快:**Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。免费、开源:Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。

高层语言:用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

可移植性:由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。

解释性:一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。

运行程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码运行 程序。

在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。

面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。

可扩展性、可扩充性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以部分程序用C或C++编写,然后在Python程序中使用它们。

Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google 内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用C++,在快速开发时候使用 Python。”

可嵌入性:可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。

丰富的库:Python标准库确实很庞大。它可以帮助处理各种工作,包括正则表达式、文档生成、单元测试线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。

**规范的代码:**Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。Python的作者设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定(而C语言是用一对大括号“{}”(不含引号)来明确的定出模块的边界,与字符的位置毫无关系)。通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

**高级动态编程:**虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如ZopeMnetBitTorrentGoogle也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。

**做科学计算优点多:**说起科学计算,首先会被提到的可能是MATLAB。除了MATLAB的一些专业性很强的工具箱还无法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:

  1. 首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其绝大多数扩展库。
  2. 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
  3. 最后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。

缺点

单行语句和**命令行**输出问题:很多时候不能将程序连写成一行,如import sys;for i in sys.path:print i。而perl和awk就无此限制,可以较为方便的在shell下完成简单程序,不需要如Python一样,必须将程序写入一个.py文件。

**给初学者带来困惑:独特的语法,**这也许不应该被称为局限,但是它用缩进来区分语句关系的方式还是给很多初学者带来了困惑。即便是很有经验的Python程序员,也可能陷入陷阱当中。

运行速度慢:这里是指与C和C++相比。Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy

和其他语言区别

对于一个特定的问题,只要有一种最好的方法来解决

这在由Tim Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one-- and preferably only one --obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There’s More Than One Way To Do It)完全相反。

Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。

更高级的Virtual Machine

Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大,而是说和Java 或.NET相比,Python的Virtual Machine距离真实机器的距离更远。或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。基于C的Python编译出的字节码文件,通常是.pyc格式。除此之外,Python还可以以交互模式运行,比如主流操作系统Unix/Linux、Mac、Windows都可以直接在命令模式下直接运行Python交互环境。直接下达操作指令即可实现交互操作。

Python 入门

Python 解释器安装

  • 官网:https://www.python.org/
  • 解释器下载地址:https://www.python.org/downloads/
    1. 双击安装
    2. 第一个选项默认安装到C盘,需勾选添加到系统环境变量
    3. 第二个可自行选择安装地址(默认选项即可)

Python 继承开发环境安装

  • PyCharm官网:https://www.jetbrains.com/zh-cn/pycharm/
  • 软件下载地址:https://www.jetbrains.com/zh-cn/pycharm/download/
  • 历史版本下载地址:https://www.jetbrains.com/zh-cn/pycharm/download/other.html

第一个 Python 程序

Hello Python

# hello python
print("hello python")

Python 基础

注释

# 单行注释

print("hello python")

"""
多行注释
"""

print("hello python")

算数运算符

"""
演示: +、-、*、/、//(整除)、%(取模)、**(次幂)
运算顺序:
    先次幂,后乘除
    先乘除,后加减
"""

print(1 + 2)  # 3
print(3 - 2)  # 1
print(2 * 4)  # 8
print(11 / 4)  # 2.75
print(11 // 4)  # 2
print(11 % 4)  # 3
print(3 ** 2)  # 9
print(2 * 3 ** 2)  # 18
print(3 ** 2 * 2)  # 18

变量

概念

描述计算机中的数据存储空间。

作用

在计算机内存中保存数据。

保存数据的格式:变量名 = 值

注意事项

首次使用在内存中划分空间,并初始化值;再次使用不再划分空间,修改原空间中的值。

定义变量

a = 1
b = 2
print(1 + 2)

c = 3.2
print(c)

str1 = "哈哈哈"
print(str1)

变量命名规则

  • 变量命名要满足标识符的命名规范

  • 标识符规定:

    1. 只能由数字、字母、_(下划线)组成
    2. 不能以数字开头
    3. 不能是关键字
    4. 区分大小写
  • 变量命名约定:多个单词组成的名称,使用全小写字母书写,中间使用_分割。

    demo_field = "aaa"
    first_name = "张三"
    user_name = "李四"
    card_id = "123123123"
    
    print(demo_field)
    print(first_name)
    print(user_name)
    print(card_id)
    

案例(计算圆的面积)

# 半径
r = 3.5
# 圆周率"π"
pi = 3.14
# 面积
area = pi * r ** 2
# 打印结果
print(area)

变量类型

  • 用于描述变量中保存的数据的种类。

特征

  • 类型在使用过程中随时发生改变,以最后一次执行赋值操作的结果为准。

数值型

名称 中文名称 作用 示例
int 整形 整数 3、15、-100、2000
float 浮点型 小数 3.14、-9.25、10.0
bool 布尔型 逻辑值 True(1)、False(0)
x = 5
y = 1.25
z = True
z1 = False
print(x)  # 5
print(y)  # 1.25
print(z)  # True
print(z1)  # False
print(x + z)  # 6
print(x + z1)  # 5
# 特性
age = 18
print(type(age))  # <class 'int'>
age = 18.1
print(type(age))  # <class 'float'>
age = True
print(type(age))  # <class 'bool'>
age = "十八"
print(type(age))  # <class 'str'>

赋值运算复合赋值运算

符号 作用 格式
= 赋值 a=b,将b的值给a
+= 加后赋值 a+=b,将a+b的值赋给a
-= 减后赋值 a-=b,将a-b的值赋给a
*= 乘后赋值 a*=b,将a*b的值赋给a
/= 除后赋值 a/=b,将a/b的值赋给a
//= 整除后赋值 a//=b,将a/b的值赋给a
%= 取余后赋值 a%=b,将a%b的值赋给a
**= 次幂后赋值 a**=b,将a的b次幂值赋给a

注意:赋值运算的左侧只能是变量,右侧不限定。

字符串运算

  • 字符串之间可以使用 + 进行拼接运算
    格式:"A" + "B" -> "AB"
  • 字符串与数值之间可以使用 * 进行反复连接运算
    格式:"A" * 5 -> "AAAAA"
  • 字符串与数值之间不可以进行 + 进行拼接
a = "张三"
b = "李四"
print(a + b)  # 张三李四

c = 3
print(a * c)  # 张三张三张三

print("a" + c)  # 报错:print("a" + c)  # 报错:TypeError: must be str, not int

标准输入输出

输入

input() 可以用来接收用户输入的信息,当执行到 input() 操作时,程序等待用户输入,而不向下执行。

两种格式

  • 直接输入
  • 带提示信息输入
# 标准输入函数
input()

# 使用变量接收输入值
name = input()  # 张三
print(name)  # 张三
# 使用变量接收输入值(给出提示信息)
name = input("请输入你的姓名:")  # 请输入你的姓名:张三
print(name)  # 张三
# 使用 `input()` 操作得到的数据都是 `str`(字符串)类型
a = input()  # 张三
print(type(a))  # <class 'str'>

b = input()  # 3
print(type(b))  # <class 'str'>

a = input()  # 2
b = input()  # 3
print(a + b)  # 23
类型转换及注意事项
  • 字符串类型的数据可以转换成其他类型的数据,但是数据必须是可转换的
  • int 类型的数据可以转换成 float 类型的数据,在原始 int 数据后面补 0
  • float 类型的数据无法转换成 int 类型的数据,无论原始数据是不是整数
# 通过类型转换,将字符串转换为数字
c = int(input())  # 2
d = int(input())  # 3
print(c + d)  # 5

c = float(input())  # 2
d = float(input())  # 3
print(c + d)  # 5.0

# flout 存在精度问题
c = float(input())  # 1.1
d = float(input())  # 2.2
print(c + d)  # 3.3000000000000003

类型不匹配,会报错误(int 转 float 不会报错)

a = int(input("输入:"))  # 输入:aa
# ValueError: invalid literal for int() with base 10: 'aa'

a = int(input("输入:"))  # 输入:2.4
# ValueError: invalid literal for int() with base 10: '2.4'

a = int(input("输入:"))  # 输入:2.0
# ValueError: invalid literal for int() with base 10: '2.0'

a = int(input("输入:"))  # 输入:-5
# 无问题

a = int(input("输入:"))  # 输入:-5+6
# ValueError: invalid literal for int() with base 10: '-5+6'

# int -》 float 不会报错
a = float(input("输入:"))  # 输入:2
print(a)  # 2.0

输出

将数据通过控制台显示给用户的过程。

语法格式
  • print(变量)
  • print("格式化字符串" % 变量)
  • print("格式化字符串" % (变量, 变量 ...))
print("hello python")  # hello python
# 扩展:print(变量, end=值)
num = 0
while num < 5:
    print(num, end="-")
    num += 1

# 打印结果:0-1-2-3-4-
输出占位符
占位符 作用
%s 字符串
%d 整数
%6d 整数,数字用于设置位数(最小值),不足位数则补空格
%f 浮点数
%.4f 设置小数位数,四舍五入,省略数字表示取整
%% 输出%
name = "张三"
age = 20
print("姓名是%s" % name)  # 姓名是张三
print("年龄是%d岁" % age)  # 年龄是20岁
print("姓名是%s,年龄是%d岁" % (name, age))  # 姓名是张三,年龄是20岁

height = 1.78
print("身高:%f米" % height)  # 身高:1.780000米
print("身高:%.2f米" % height)  # 身高:1.78米
print("身高:%.3f米" % height)  # 身高:1.780米
print("%s是全校成绩前20%%" % name)  # 张三是全校成绩前20%

示例

使用输入输出计算圆的面积。

pi = 3.14
r = float(input("请输入圆的半径(最多两位小数):"))  # 请输入圆的半径(最多两位小数):1.25
area = pi * r ** 2
print("半径为%.2f的圆的面积为%.4f" % (r, area))  # 半径为1.25的圆的面积为4.9062

比较运算符

符号 说明(成立为True,不成立为False)
== 是否等于
!= 是否不等于
> 是否大于
< 是否小于
>= 是否大于等于
<= 是否小于等于

数字比较

print(1 == 1)  # True
print(1 == 2)  # False
print(1 != 1)  # False
print(1 != 2)  # True
print(2 > 2)  # False
print(2 > 1)  # True
print(1 < 1)  # False
print(1 < 2)  # True
print(1 >= 1)  # True
print(1 >= 2)  # False
print(2 <= 1)  # False
print(2 <= 2)  # True

字符串比较

比较规则:

  • 对两个字符串中对应位置每个字符逐一比对 ASCll
  • 排序较小的整体字符串值小
  • 如果比较结果相等,比较下一个字符
  • 直到对比到最后一个字母
  • 若对比的一方没有字符,则整体字符串值小
print("a" > "b")  # False
print("b" > "a")  # True
print("A" > "a")  # False
print("a" > "A")  # True
print("a" > "1")  # True
print("a" > "127")  # True 首个字符先比较,相同则比较第二个
print("aadd" > "aaddc")  # False 前边相同,多位者大

关系运算符

符号 语法格式 说明 规律
and 布尔表达式 and 布尔表达式 对两个布尔表达式进行”并且“运算 同真即真
or 布尔表达式 or 布尔表达式 对两个布尔表达式进行”或者“运算 同假即假
not not 布尔表达式 对两个布尔表达式进行”取反“运算 非真即假,非假即真
print(True and True)  # True
print(True and False)  # False
print(False and False)  # False
print(True or True)  # True
print(True or False)  # True
print(False or False)  # False
print(not True)  # False
print(not False)  # True

数字参与关系运算

数字可以作为布尔表达式参与运算

  • 某个操作室可以决定整个式子值的,最终结果即为该操作数

    print(0 and True) # 0

    print(True or 0) # True

  • 两个操作数都无法单独决定整个式子值的,最终结果即为后边的操作数

    print(0 or False) # False

    print(-2 or False) # -2

# 0表示False,非0表示True
print(-2 and True)  # True
print(0 and True)  # 0
print(1 and True)  # True
print(-2 and False)  # False
print(0 and False)  # 0
print(1 and False)  # False

print(True and -2)  # -2
print(True and 0)  # 0
print(True and 1)  # 1
print(False and -2)  # False
print(False and 0)  # False
print(False and 1)  # False

print(-2 or True)  # -2
print(0 or True)  # True
print(1 or True)  # 1
print(-2 or False)  # -2
print(0 or False)  # False
print(1 or False)  # 1

print(True or -2)  # True
print(True or 0)  # True
print(True or 1)  # True
print(False or -2)  # -2
print(False or 0)  # 0
print(False or 1)  # 1

print(-2 or -2)  # -2
print(0 or 0)  # 0
print(1 or 1)  # 1
print(-2 or -2)  # -2
print(0 or 2)  # 2
print(1 or 1)  # 1

分支语句

if

if 条件:
	执行代码
    ...
# 顺序语句
print("开始")  # 开始
print("中间")  # 中间
print("结束")  # 结束

# 分支语句
print("开始")  # 开始
if False:
    print("中间1")
if True:
    print("中间2")  # 中间2
print("结束")  # 结束

# 分支语句
print("开始")  # 开始
if False:
    print("中间")
    print("中间")
print("结束")  # 结束
# 案例:判断一个数字是不是三位的偶数
num = int(input("请输入一个三位数字:"))
if 99 < num < 1000 and num % 2 == 0:
    print("%d是偶数" % num)

if .. else ..

if 条件:
	执行语句
    ...
else:
	执行语句
    ...
# 案例:判断一个数字是不是偶数
num = int(input("请输入一个数字:"))
if num % 2 == 0:
    print("%d是偶数" % num)
else:
    print("%d不是偶数" % num)

if .. elif .. else ..

if 条件:
	执行语句
	...
elif:
	执行语句
	...
else:
	执行语句
	...

elif :条件可以多个

# 案例:判断分数情况
num = int(input("请输入一个分数(0-100):"))
if num == 100:
    print("满分")
elif 80 <= num < 100:
    print("优秀")
elif 60 <= num < 80:
    print("及格")
else:
    print("不及格")

分支嵌套

案例:判断是整数还是负数,如果是正数,判断是基数还是偶数

num = int(input("请输入一个数字:"))
if num > 0:
    if num % 2 != 0:
        print("正数基数")
    else:
        print("正数偶数")
elif num == 0:
    print("非整非负")
else:
    print("负数")

条件超长行处理

方案一:换行出使用 \

a = 20
if a == 5 and a == 5 and a == 5 \
        and a == 5 and a == 5 \
        and a == 5 and a == 5 \
        and a == 5 and a == 5:
    print("%d等于5" % a)

方案二:对整体添加 ()() 中随意换行

a = 20
if (a == 5 and a == 5 and a == 5
        and a == 5 and a == 5
        and a == 5 and a == 5
        and a == 5 and a == 5):
    print("%d等于5" % a)

循环语句

循环是程序设计语言中反复执行某些代码的一种计算机处理过程。

while 结构

while 条件
	执行语句
	...
# 案例:打印 1-5
i = 0  # 循环变量通常从 0 开始
while i < 5:
    print(i)
    i += 1

死循环:如果循环语句未设置合理的退出条件,则循环语句构成死循环,程序将永久执行下去。

i = 0
while i < 1:
	print("死循环演示打印")

案例(打印三位回文数)

# 打印三位”回文数“
num = 100
while num <= 999:
    a = num // 100
    b = num % 10
    if a == b:
        print(num)
    num += 1

循环的终止与跳出

  • break:结束当前循环
  • continue:结束本轮循环

注意:break 和 continue 必须出现在循环体中,仅能控制其所在的循环,不能控制其他循环机构(嵌套也不行)。

# 打印 1-5,遇到 3,结束本次循环(break)
num = 0
while num <= 5:
    num += 1
    if num == 3:
        break
    print("循环打印%d" % num)

# 循环打印1
# 循环打印2
# 打印 1-5,遇到 3,跳过本次循环(continue)
num = 0
while num < 5:
    num += 1
    if num == 3:
        continue
    print("循环打印%d" % num)

# 循环打印1
# 循环打印2
# 循环打印4
# 循环打印5

循环嵌套

# 打印5次 1到3
i = 0
while i < 5:
    j = 1
    while j <= 3:
        print(j, end=" ")
        j += 1
    i += 1

# 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 
# 九九乘法表
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print("%d*%d=%d" % (j, i, j * i), end="\t")  # \t:tab键,解决对齐问题
        j += 1
    print("")
    i += 1

"""
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81
"""

函数(基础)

函数(function)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。

  • 函数必须先创建才可以使用,创建该过程称为函数定义

    函数必须先定义,后调用,否则程序将报错。

  • 函数创建后才可以使用,使用过程称为函数调用

    函数定义部分的代码仅用于声明函数,调用时才实际执行函数内容。

-------------注意:必须定义在前,调用在后-------------

格式一

定义

def 函数名():
	函数体
	...

调用

函数名()

案例

def say():
    print("hello python")


say()  # hello python
say()  # hello python

文档注释

文档注释可以为函数添加功能说明,方便开发者查阅函数相关信息

def say():
    """打印 hello python"""
    print("hello python")

格式二(参数)

定义

def 函数名(参数列表):
	函数体
	...

调用

函数名(参数)

案例一

def say(s):
    """打印 指定字符串"""
    print(s)


say("hello python")  # hello python
def add(a, b):
    """打印 指定两个数字的和"""
    print(a + b)


add(2, 3)  # 5

形参与实参

形参是函数定义时规定的参数,仅在函数体内有效

实参是函数调用时使用的参数,该值将传递给函数

def 函数名(形参):		参数:形式参数
	函数体
	...

函数名(实参)				参数:实际参数

调用函数时,实参的数量必须与形参的数量一一对应,否则将报错

案例(打印最大值)

def max2(a, b):
    if a > b:
        print(a)
    else:
        print(b)


max2(6, 8)

变量的作用域

局部变量:函数内部定义的变量从定义位置开始到函数定义结束位置有效;

全局变量:函数外部定义的变量在整个文件中有效;

函数间不能共享内部定义的变量;

函数内可以使用全局变量;

如果局部变量与全局变量冲突,通过 global 关键字可以提升局部变量为全局变量,先声明再使用

def test():
    a = 10
    print(a)


a = 20
test()  # 10
print(a)  # 20

global 关键字案例

def test():
    global a
    a = 10
    print(a)


a = 20
test()  # 10
print(a)

格式三(返回值)

定义

def 函数名(a, b):
	函数体
	...
    return 函数运行结果返回值
    ...

调用

变量名 = 函数名(参数列表)

案例

def add(a, b):
    return a + b


def div(a, b):
    return a / b


a = 2000
b = 1000
c = add(a, b)
print(c)  # 3000
print(div(c, 2))  # 1500.0

函数的返回值

使用变量接收不存在返回值的函数,结果为None

def add(a, b):
    """打印 指定两个数字的和"""
    print(a + b)


c = add(2, 3)  # 5
print(c)  # None

同一个函数执行过程中只能执行一次return语句,执行return语句后,return后面的内容将不再执行,函数执行完毕;

def test1():
    return 3
    print("--------")
    return 5


print(test1())  # 3

同一个函数可以返回多个返回值,使用对应数量的变量接收即可。

def test1():
    return 1, 2, 3


print(test1())  # (1, 2, 3)

a, b, c = test1()
print(a)  # 1
print(b)  # 2
print(c)  # 3

函数间调用

在一个函数中调用另一个函数的过程称为函数间调用

def add(a, b):
    return a + b


def div(a, b):
    c = add(a, b)
    return c / 2


print(div(3, 2))  # 2.5

案例(求三个数的最大值)

def max3(a, b):
    if a > b:
        return a
    else:
        return b


def test2(a, b, c):
    d = max3(a, b)
    return max(c, d)


print(test2(5, 2, 8))  # 8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3 入门及基础语法 的相关文章

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject

随机推荐

  • 空指针异常:解决 RequestContextHolder.getRequestAttributes()为空的问题

    现象 实现Feign请求拦截器时 执行如下代码 报空指针异常 ServletRequestAttributes attributes ServletRequestAttributes RequestContextHolder getRequ
  • 宝塔面板搭建自己的网站,并发布公网远程访问

    文章目录 1 环境安装 2 安装cpolar内网穿透 3 内网穿透 4 固定http地址 5 配置二级子域名 6 创建一个测试页面 宝塔面板简单几步搭建本地web站点 并做内网穿透 实现公网用户也可以正常远程访问 无需公网IP 无需设置路由
  • 数据解析神器 parsel库

    parsel库的基本使用 parsel是一个python的第三方库 相当于css选择器 xpath re parsel由scrapy团队开发 是将scrapy中的parsel独立抽取出来的 可以轻松解析html xml内容 获取需要的数据
  • 寒假作业【主席树】

    题目链接 P2717 寒假作业 题目要求的是平均值不小于K的 那么可以将问题变成 对所有的都减去K 然后求 权值和大于等于0 的子串的个数有多少个 于是 我们可以求 以每个点作为子串结尾的点时候的可能的子串的数量 这里就可以用前缀和来维护了
  • muduo net库学习笔记2——muduo网络库相关类图的关系、EventLoop、Channel、 Poller

    EventLoop的简化封装 有在上篇文章中出现过但是连贯一下就还是搬过来 看完类图关系就可以分析完善的代码了 可以直接跳转到正文类图关系 h文件 namespace muduo namespace net Reactor at most
  • 【算法】蛇形填数

    题目描述如下 思路 输入n 构建一个n n的矩阵 初始化所有值为为0 加头文件 include
  • xp系统显示无打印机服务器,XP共享打印机时提示“工作站服务没有启动”的原因和解决方案...

    很多WindowsXP系统用户在日常办公时 经常会碰到需要共享打印机的情况 不过 xp系统共享打印机时偶尔也会提示 工作站服务没有启动 这是怎么回事呢 下面 小编就给大家介绍XP共享打印机时提示 工作站服务没有启动 的原因和解决方案 原因分
  • 初学Java该学哪些知识?这6大知识必学

    目前 Java是开发人员的热宠 很多论坛都有不少热爱Java的开发人员 也有不少想成为Java程序员 但苦于不知道该如何学习Java 也不清楚该学些什么知识才能成为一个Java程序员 小千在这里抛砖引玉 和大家讨论初学Java应该掌握的知识
  • gitee配置ssh后仍需要密码

    gitee创建仓库后默认提供的是https链接需要修改为ssh才能免密登录 1 查看远程仓库链接 git remote v 删除远程仓库 git remote rm origin 重新添加远程仓库 ssh地址 git remote add
  • 关于hive中从hdfs上load数据到表中而HDFS上的数据却消失的若干问题

    原链接 https blog csdn net shuaikang666 article details 80357075 今天偶然间发现hive中一个我之前没有注意到的一个小细节 我怀疑你们之前也可能没有注意到 那就是当我们试图从HDFS
  • Adding New Functions to MySQL(User-Defined Function Interface UDF、Native Function)

    catalog 1 How to Add New Functions to MySQL 2 Features of the User Defined Function Interface 3 User Defined Function 4
  • postgres数据库相关使用说明

    默认的数据库和用户名是postgres 登录 psql U postgres d postgres ctrl c q 退出数据库交互模式 创建新用户 gwp createuser U postgres P d gwp 输入密码 mxq123
  • 路由器和交换机工作原理

    路由器工作原理 路由器 三层设备 同时基于二层设备工作 当数据包进到路由器时 首先查看的是二层报头 查看的是目标MAC 目标MAC分为三种 广播 组播 单播 广播地址 解封装到三层报头 组播地址 每一个组播地址均存在自己的MAC地址 基于目
  • 华为OD题目: 任务总执行时长

    package com darling boot order od od10 import com sun org apache bcel internal generic IF ACMPEQ import java util 任务总执行时
  • 几种I/O编程实践

    1 传统的BIO编程 网络编程的基本模型是Client Server模型 也就是两个进程间相互通信 其中 服务端提供位置信息 绑定的IP地址和监听端口 客户端提供连接操作向服务端监听的地址发起连接请求 通过三次握手建立连接 如果连接建立成功
  • Burpsuite在Firefox中无法抓取DVWA本地数据包解决方案+导入证书

    前言 这几天重装了系统 软件也大部分重新安装 在使用bp时 遇到了不能抓取dvwa数据包的情况 解决方案 猜想 可能是浏览器自动将127 0 0 1与localhost默认选择不使用代理服务 无法修改 反正我没找到 方案 将url栏中的12
  • java计算下一个整5分钟时间点

    需求 需要获取当前时间的下一个整点时间 如13 23 获取的下一个时间为 13 25 代码 获取下一个分钟值以0或者5结尾的时间点 单位 毫秒 return public static long getNextMillisEndWithMi
  • 机器数——源码、反码、补码

    机器数 源码 反码 补码 基本定义 1 机器数是将符号 数字化 的数 是数字在计算机中的二进制表示形式 表示一个机器数 应该考虑以下三个因素 1 机器数的范围 2 机器数的符号 3 机器数中小数点的位置 我们这里只讨论二进制整数在计算机中的
  • 【Java筑基】IO流基础之常见工具流和进程通信

    前 言 作者简介 半旧518 长跑型选手 立志坚持写10年博客 专注于java后端 专栏简介 深入 全面 系统的介绍java的基础知识 文章简介 本文将深入全面介绍IO流知识 建议收藏备用 创作不易 敬请三连哦 大厂真题 大厂面试真题大全
  • Python3 入门及基础语法

    文章目录 解释型语言 解释型语言优缺点 和编译性语言的区别 Python 简介 优点 缺点 和其他语言区别 Python 入门 Python 解释器安装 Python 继承开发环境安装 第一个 Python 程序 Python 基础 注释