Python速成篇(基础语法)上

引言

都是我手欠非要报什么python的计算机二级,现在好了假期不但要冲C艹,还要学个python,用了几天的时间速成了一下python的基础语法,其实在学会C的基础上,py学起来是非常的快啊。这篇博客呢,建议有一定语言基础的朋友来看。没有接触过编程的朋友可以先看看python相关书籍或视频从0到1学,这里我推荐蟒蛇的python,浅显易懂。那么就开始接下来的正文内容吧。

Python环境配置

想要进行Python开发,就要搭建好Python的环境

需要安装的环境主要是两个部分:

  • 运行环境:Python
  • 开发环境:Pycharm

安装Python

(1)找到官方网站

认准这个英文标了官方的网站,别的什么中文版官版什么的都别看,是假的,点进去都是收费的

(2)找到下载页面

点入网页后,鼠标放到download上,根据电脑配置点击,例如我的电脑是Windows系统,就点击Windows 

点进去后会进入到这样一个页面里,你可能会注意到版本有非常之多,我们从左边随便点一个版本下就行,具体差异不是很大,注意,右边版本Pre-releases是最新一批版本,不够稳定,所以还是下左边较为稳定的版本,可不要下错了。由于python官网服务器在国外,所以下起来相对会比较慢,耐心等待一下就可以了,我这边其实是在联想的应用商店下的,官网在我这里不知为什么下的非常之慢

(3)安装

下好后咱们打开文件 ,会弹出安装界面。这里注意一点,要把下面的勾勾上,讲Python加入路径中去,避免后续一系列问题。然后点击Install Now

当你看到这样的页面的时候,python解释器就已经下好了

 这时候其实已经可以在控制台敲python的代码了,但是为了更舒适的写python代码,我们还需要安装一个集成开发环境,也就是pycharm。

安装pycharm

(1)找到官方网站

图中第一个就是官网了 

进去后点击中间的download

(2)下载和安装

根据电脑配置下载,注意下社区版(Community),专业版要钱

打开文件点击next

这里文件下载路径根据需求就行

这里勾这两个

后面就没什么要注意的了,一路next就行,看到以下页面就是安装完成了

现在你已经可以点开pycharm开始写python代码咯!

Python中的打印,变量声明和数据类型

数据打印

print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)

这里稍微注意一下python中除号(/)是直接将整型转化成了浮点型 

数据类型

这里要说明的是,python中,初始化变量统统都不用事先声明类型了直接将数据用赋值运算符(=)赋给你初始化的变量就行,见下方代码

# 整型
a = 1
print(type(a))
# 浮点型
b = 2.2
print(type(b))
# 字符串类型
c = 'hello'
d = "world"
print(type(c),type(d))
# 布尔类型
e = True
f = False
print(type(e))
print(a)
print(b)
print(c)
print(d)

下面是运行结果 

这里稍微注意一下,type()是可以直接取到变量类型的内联函数 ,不用包含任何文件,可以直接调用

整型

python中的整型可以自动扩容(自带高精度),意思就是不再像C语言中不同的整型能存的数据大小有一个范围,在python中声明的整型的大小没有上限,可以随意的加减,不用考虑数据溢出的问题了

浮点型

python中的浮点型只存在一种类型,就是C语言中的double类型,看似类型打印的是float实则C中的float在python中已经不复存在

字符串类型

python中单引号和双引号引起来的都是字符串类型,但注意必须是英文字符的单引号和双引号

同时,如果字符串中有单引号,可以用双引号引起;如字符串中有双引号,同样也可以用单引号引起;如都有,可以选择使用三引号,三个'或者三个"都可以

a = "I' am a boy"
b = 'hhh,"hello",hhh'
# 三引号
c = '''hh'hhh"h'hhh'''
print(a)
print(b)
print(c)

下面是运行结果

同时python中字符串支持拼接

a = 'hello'
b = ' world'
c = a + b
print(a + b)
print(c)

 其实感觉这个学了C++的应该会熟悉,STL容器中string类就支持这样的操作

这里要注意的是:字符串和数字不可以混合相加,同时字符串直接也不支持减法运算

布尔类型

布尔类型只有真和假,主要用于逻辑判定

  • 真(True)
  • 假(False)

在JAVA和C/C++中,bool(布尔)类型为true和false,python中的bool类型首字符都是大写的,不要搞混了

如果将bool类型与整型进行加减运算,那么True会被转成1,而False会被转成0,但是这样的操作没有什么实际意义

类型带来的意义

  1. 不同类型所占的内存空间不同(单位:字节)                                                                          eg:int:默认4,溢出就扩容;float:固定8;bool:1;str:变长
  2. 不同类型对应的操作也是不同的                                                                                                eg:int/float +-/  不能用len()  #计算字符串类型长度的内联函数                                                        str +但不能-*/ 能用len()

动态类型

程序再运行过程中,变量的类型可以改变,见代码

a = 10
print(type(a))
a = 1.5
print(type(a))
a = 'hello'
print(type(a))
a = True
print(type(a))

以上代码运行的过程中,a的类型一直再改变,但再python中是支持的

在其他语言,例如C/C++,JAVA中,变量都是静态类型,程序运行中,变量的类型是始终不变的

注:一个编程语言,是否为动态类型,只是取决于运行时,类型是否发生改变,不取决于变量定义的时候是否声明类型。 

其实在python中也提供了类型的声明,不多这个类型声明起的作用只是更方便人读代码

a: int = 10
b: float = 1.5
c: str = 'abc'

其他类型

基本类型先介绍到这,还有list(列表),tuple(元组),dict(字典),自定义类型等后面再介绍

python中的报错

  • 语法错误:python解释器可以识别
  • 逻辑错误:运行对应的代码才能发现

python报错一般会把问题描述的很详细,这对代码错误的排查很有利

这里其实已经可以基本看到python的设计哲学了:

解决一个问题,只提供一种方案~

Python中的注释

前面也有用到,见下面代码

# 我是注释
a = 10  # 我是注释
"""
文档字符串
这是文档字符转
起到的作用和注释一样
"""
print(a)
'''
文档字符串
这是文档字符转
起到的作用和注释一样
'''

emm,想必根据代码和打印结果我们也可以猜出来python注释的用法了

#其实就是C语言中的 //

"""   """和'''   '''其实就是C语言中的 /*   */

Python中的输入输出

输出:print

# 如果要用print打印"a = 20"->字符串和数字混合
a = 20
print(f'a = {a}')

单引号前的 f 作用是格式化字符串,在格式化之后,可以使用{ }往字符串中嵌入变量/表达式

输入:input

num = input('请输入一个整数:')
print(f'你输入的整数为:{num}')
print(type(num))

在这里需要注意的是打印出来num的数据类型是str字符串类型

如果想要用输入的数字进行计算,可以使用强制类型转换 int( )

a = input('输入整数a:')
b = input('输入整数b:')
a = int(a)
b = int(b)
print(a + b)

不但可以强转成整型,python中还提供了:

  • str() -> 整数转字符串类型
  • float() -> 字符串转浮点数类型

等等

算数运算符

关于运算符先算乘除后算加减之类的我就不赘述了

  • + :加号
  • - : 减号
  • * : 乘号
  • / : 除号,无法整除会直接计算乘小数并返回赋值
  • ** : 乘方运算,eg:  x**2,这个代表x的平方
  • // : 地板除法,等价于C语言中的 / ,eg:7 // 2,结果为3
  • % : 和C语言中的%一样,eg:7 % 2,结果为1

这里还要注意关于%(取余)运算的一点

  • 在C/C++和JAVA中   -19 % 2 => -1
  • 而在python中   -19 % 2 => 1

关系运算符(返回bool类型)

<  <=  >  >=  !=  ==

这个关系运算符和C中的一样

要稍微注意一点的就是,python中的字符串类型可以使用关系运算符,比较规则其实就是字典序,谁在字典序的前面谁就小

如果字符串为中文,针对中文进行字符串大小的比较其实是没有意义的

这里还需注意,针对浮点数,使用 == 是存在风险的,所以比较浮点数一般做差看误差范围

逻辑运算符

  • and 并且,等价于C语言的&&
  • or 或者,等价于C语言的||
  • not 逻辑取反,等价于C语言的!

同时python中的逻辑运算符也遵循短路求值

and 的左边为False 右边的条件语句就会放弃执行

or 的左边语句为True 右边的条件语句同样也放弃执行

赋值运算符

# python中支持连续初始化赋值
a = b = 20
print(a, b)
# python中支持下面列表式的初始化及赋值
c, d = 10, 20
print(c, d)
# 在python中支持下面的变量交换
c, d = d, c
print(c, d)

 符合赋值

+=  ,-=  ,*=  ,**=  ,%=  ,/=  ,//=

a += b相当于a = a + b

a -= b相当于a = a - b

a *= b相当于a = a * b

...以此类推

a = 10
a /= 2
print(a)

在python中不再支持C语言中的++,--操作 

用+=其实就已经很方便了

其他

python中还有一些运算符

身份运算符(is,is not),成员运算符(in,not in)

位运算符(&,|,~,^,<<,>>)等

顺序语句

从上往下按顺序执行的语句

print('111')
print('222')
print('333')

 

条件语句(分支语句)

在python中,不再使用{ }来框定代码块,而是单纯使用缩进,同一代码块的缩进级数相同

A.

if expression:

        do_somwthing1

        do_something2

next_something

choice = input('输入1:')
if choice == '1':
    print('你输入了1')
    print('这还在if的代码块中')
print('结束')

 

B.

if expression:

        do_something1

else:

        do_something2

choice = input('输入1:')
if choice == '1':
    print('你输入了1')
else:
    print('输入了别的')
print('结束')

 

C.

if expression1:

        do_something1

elif expression2:

        do_something2

else:

        do_something3

choice = input('输入1或2:')
if choice == '1':
    print('你输入了1')
elif choice == '2':
    print('你输入了2')
else:
    print('输入了别的')
print('结束')

 

 注:python中的代码块还支持嵌套,见代码

a = '1'
b = '3'
if a == '1':
    if b == '2':
        print('bbb')
    print('aaa')
print('ccc')

 if else elif while for ……这种跟上代码块的部分,都需要用缩进来表示

下方的两份代码缩进都是有问题的(缩进不一致),都会导致编译报错

a = '1'
if a == '1':
print('bbb')
    print('aaa')
a = '1'
if a == '1':
    print('bbb')
        print('aaa')

多级嵌套时,当前语句属于哪个代码块,完全取决于缩进级别

到这里讲完了条件语句,还要提醒大家一点,python中只提供了if else elif ,而C语言中的switch并未在python中提供

空语句

a = '1'
if a == '1':
    # 什么都不做
else:
    print('aaa')

上面这份代码其实是有问题的,在python可以跟语句块的控制语句之后,默认需要跟上至少一条语句,否则编译器会报错,此时如果需要语句什么都不做,可以使用pass语句,见代码

a = '1'
if a == '1':
    pass
else:
    print('aaa')
print('hello')

此时的代码才是正确的

循环语句

 python中循环语句提供了 while 和 for

 A.while循环

while 条件:

        循环体

# 代码案例
num = 1
while num <= 10:
    print(num)
    num += 1

 B.for循环

for 循环变量 in 可迭代对象

        循环体

# 代码案例
for i in range(1, 11):
    print(i)

这里的range是一个内建函数,起到的作用是得到一个“可迭代对象”,其中包含了一系列的整数

range(beg,end) => [beg,end),前闭后开区间

下面是代码案例打印结果

range还提供了第三个参数~表示“步长”,其中步长默认为1

如果你想打印2,4,6,8,10,可以像下面这样写

# 代码案例
for i in range(2, 12, 2):
    print(i)

同时步长还能为负,如果你想打印10到1,可以这样写

# 代码案例
for i in range(10, 0, -1):
    print(i)

控制语句break和continue

python中同样还提供了控制语句continue和break,执行到continue回到条件重新开始语句,执行到break直接跳出语句

# 代码案例
for i in range(5, 0, -1):
    if i == 3:
        continue
    print(i)

# 代码案例
for i in range(5, 0, -1):
    if i == 3:
        break
    print(i)

 函数

函数是什么?简单来说就是一段可以重复使用的代码~

1.函数的定义(分配任务)

def 函数名 (形参列表):

        函数体(记得带一层缩进)

        return 返回值(更具需求判断是否需要)

2.函数的调用(开始完成任务)

返回值 = 函数名(实参列表)

这里实际参数需要和形参个数匹配

# 代码案例
def calcSum(beg, end):
    theSum = 0
    for i in range(beg, end):
        theSum += i
    print(theSum)


# 这里调用函数
calcSum(1, 100)
calcSum(300, 400)

这里注意一点,只定义不调用,函数内代码不会执行

python中要求,函数定义写在前面,调用写在后面

这里大家可能也注意到了,python的函数定义时不用声明返回值类型和形参类型,得益于其变量动态类型的特性,下面看一组代码用来体会一下python代码的简单便捷

#代码案例
def add(x, y):
    return x + y


print(add(10, 20))
print(add(1.5, 2.5))
print(add('hello', ' world'))

python函数的返回值

这里专门放个小标题,就是想讲讲python返回值的特殊性

python中的一个函数,可以返回多个值!!!

# 代码案例
def getpoint():
    x = 10
    y = 20
    z = 30
    return x, y, z


# 使用多元赋值接收
a, b, c = getpoint()
print(a, b, c)
# 如果只想要数值中的一部分,可以使用下划线_占位
_, m, _ = getpoint()
print(m)

变量的作用域

函数内部的变量名,只在函数内部有效

# 代码案例
def getpoint():
    x = 10
    y = 20
    print(x, y)


x, y = 20, 30
print(f'x = {x}')
print(f'y = {y}')
getpoint()
print(f'x = {x}')
print(f'y = {y}')

 在函数内部有和函数外部可以使用同名变量,但它们是不同的变量

在外面的变量,全局变量,在整个程序中都有效

在内部的变量,局部变量,在函数内可用

global关键字

既然内部声明的变量无法影响到外部的变量,那如果有函数有这样的需求时怎么办呢,可以使用global关键字,此时,内部变量的改变就可以影响到外面了

# 代码案例
def getpoint():
    global x
    x = 10


x = 20
print(x)
getpoint()
print(x)

if else while for这些关键字会引入“代码块”,但这不会对变量作用域产生影响。在上述语句代码块内部定义的变量,可以在外部被访问!

只有函数和类会影响作用域

函数递归

简单说,就是一个函数调用自己

eg.写一个函数用于计算n!=> {n*(n-1)*(n-2)....*2*1}

用递归实现的话就是这样的

# 代码案例
def factor(n):
    if n == 1:
        return 1
    return n * factor(n - 1)


print(factor(5))

递归的缺点:

1.可能难以理解

2.递归代码容易出现“栈溢出”

3.递归代码一般能转换成等价的循环代码

递归的优点:

代码简洁,尤其处理“问题本身就是通过递归方式定义的”(eg.二叉树)

参数默认值

# 代码案例
def add(x, y, debug = False):
    if debug:
        print(f'x = {x},y = {y}')
    return x + y


# 这里不传debug默认就会是False
print(add(10, 20))
# 打印一下换行将两块分开
print()
print(add(12, 13, True))

 

这里注意一点:

带有默认值的形参,必须放在形参列表的后面,而不能放在前面/中间!!

关键字参数

想不按照顺序传递参数,这时候可以用关键字参数

# 代码案例
def test(x, y):
    print(f'x = {x}')
    print(f'y = {y}')


# 以这样的形式传参,就可以无视传参顺序了
test(x=10, y=20)
test(y=20, x=10)

最后,位置传参和关键词传参可以混着用,但要求位置参数在前,关键字参数在后

小结

本来想一口气把基础语法讲完的,没想到内容有些多,就准备分两部分讲了,这部分内容还是比较简单的,在python的下部分,我会介绍列表(list),元组(tuple),字典(dict)和关于文件操作的内容,如果本篇博客对你有帮助的话,还请留个关注点个小赞在走啊---♥,后续博主还会产出更多有意思的内容。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/377960.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图论与图数据应用综述:从基础概念到知识图谱与图智能

目录 前言1 图论基础概念1.1 节点度1.2 度分布1.3 邻接矩阵 2 探索图的高级概念2.1 最短路径的关键性2.2 图的直径与平均路径的意义2.3 循环与路径类型的多样性 3 深入探讨图的广泛应用领域3.1 知识图谱的知识管理3.2 图智能在复杂决策中的应用3.3 图数据挖掘与分析的多领域应用…

C++三剑客之std::any(一) : 使用

相关系列文章 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析​​​​​​​ 目录 1.概述 2.构建方式 2.1.构造函数 2.2.std::make_any 2.3.operator分配新值 3.访问值…

我的docker随笔43:问答平台answer部署

本文介绍开源问答社区平台Answer的容器化部署。 起因 笔者一直想搭建一个类似stack overflower这样的平台&#xff0c;自使用了Typora&#xff0c;就正式全面用MarkdownTyporagit来积累自己的个人知识库&#xff0c;但没有做到web化&#xff0c;现在也还在探索更好的方法。 无…

Spring Boot3整合Redis

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 1.导依赖 2.配置连接信息以及连接池参数 3.配置序列化方式 4.编写测试 前置条件 已经初始化好一个spr…

RisingWave 中文用户文档上线,阅读更高效!

为满足广大中文社区用户、开发者及流处理技术爱好者的需求&#xff0c;RisingWave 用户文档中文社区版今天上线了&#xff01; 中文版文档的推出&#xff0c;旨在为广大用户提供更便捷、高效的阅读体验&#xff0c;帮助大家深入理解并有效使用 RisingWave&#xff0c;发挥其更…

零基础学Python之整合MySQL

Python 标准数据库接口为 Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。 不同的数据库你需要下载不同的DB API模块&#xff0c;例如你需要访问Oracle数据库和Mysql数据&#xff0c;你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它…

2023年12月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A:10倍 B:2倍 C:4倍 D:8倍 答案:C 二进制进位规则是逢二进一,因此末尾添加一个0,是扩大2倍,添加两个0…

【排序】希尔排序

算法图解 算法基本步骤 首先&#xff0c;希尔排序是基于插入排序的一个时间复杂度为O(N*logN)的一个很牛的排序。 大家应该能注意到&#xff0c;图解中每一趟排序的时候有的数背景颜色是一样的&#xff0c;像这样背景颜色相同的数为一组&#xff0c;我们一共可以分gap组。 那…

Google DeepMind最新研究,将视觉语言大模型作为强化学习的全新奖励来源

论文题目&#xff1a;Vision-Language Models as a Source of Rewards 论文链接&#xff1a;https://arxiv.org/abs/2312.09187 在大型语言模型&#xff08;LLM&#xff09;不断发展的进程中&#xff0c;强化学习扮演了重要的角色&#xff0c;ChatGPT就是在GPT-3.5的基础上经过…

创建一个VUE项目(vue2和vue3)

背景&#xff1a;电脑已经安装完vue2和vue3环境 一台Mac同时安装vue2和vue3 https://blog.csdn.net/c103363/article/details/136059783 创建vue2项目 vue init webpack "项目名称"创建vue3项目 vue create "项目名称"

C++初阶:容器(Containers)vector常用接口详解

介绍完了string类的相关内容后&#xff1a;C初阶&#xff1a;适合新手的手撕string类&#xff08;模拟实现string类&#xff09; 接下来进入新的篇章&#xff0c;容器vector介绍&#xff1a; 文章目录 1.vector的初步介绍2.vector的定义&#xff08;constructor&#xff09;3.v…

redis特点

一、redis线程模型有哪些&#xff0c;单线程为什么快&#xff1f; 1、IO模型维度的特征 IO模型使用了多路复用器&#xff0c;在linux系统中使用的是EPOLL 类似netty的BOSS,WORKER使用一个EventLoopGroup(threads1) 单线程的Reactor模型&#xff0c;每次循环取socket中的命令…

【Spring】Tomcat服务器部署

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 单体项目部署 本地工作 项目在本地开发完毕之后进行一些必要参数的修改。 比如&#xff1a; 数据库的JDBC的配置文件&#xff0c;还有前端页面的…

微软.NET6开发的C#特性——接口和属性

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;看到不少初学者在学习编程语言的过程中如此的痛苦&#xff0c;我决定做点什么&#xff0c;下面我就重点讲讲微软.NET6开发人员需要知道的C#特性。 C#经历了多年发展&#xff0c; 进行了多次重大创新&#xf…

PCIE Order Set

1 Training Sequence Training Sequence是由Order Set(OS) 组成&#xff0c;它们主要是用于bit aligment&#xff0c;symbol aligment&#xff0c;交换物理层的参数。当data_rate 2.5GT or 5GT 它们不会被扰码(scramble)&#xff0c;当date_rate 8GT or higher 根据特殊的规则…

jsp康养小镇管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP康养小镇管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&a…

年货大数据(电商平台年货节数据):水果销售额增长72%,海鲜肉类涨幅高于蔬菜

春节临近&#xff0c;生鲜又成了线上线下“叫卖”狠&#xff0c;竞争大&#xff0c;盈利好的行业之一。无论是线下商超&#xff0c;还是线上电商&#xff0c;生鲜行业在年货节期间不愁没有市场需求。 根据鲸参谋数据显示&#xff0c;1月前三周京东平台生鲜市场整体销量超3300万…

分享一下 uniapp 打包安卓apk

首先需要安装 Java 环境&#xff0c;这里就不做解释了 第二步&#xff1a;打开 mac 终端 / cmd 命令行工具 使用keytool -genkey命令生成证书 keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore *testalias 是证书别名&am…

Spark安装(Yarn模式)

一、解压 链接&#xff1a;https://pan.baidu.com/s/1O8u1SEuLOQv2Yietea_Uxg 提取码&#xff1a;mb4h tar -zxvf /opt/software/spark-3.0.3-bin-hadoop3.2.tgz -C /opt/module/spark-yarn mv spark-3.0.3-bin-hadoop3.2/ spark-yarn 二、配置环境变量 vim /etc/profile…

【华为 ICT HCIA eNSP 习题汇总】——题目集14

1、以下哪种攻击不属于网络层攻击&#xff1f; A、IP 欺骗攻击 B、Smurf 攻击 C、ARP 欺骗攻击 D、ICMP 攻击 考点&#xff1a;网络安全 解析&#xff1a;&#xff08;C&#xff09; IP 欺骗攻击是通过伪造源 IP 地址&#xff0c;冒充计算机与服务器进行通信&#xff0c;从而达…
最新文章