python基础语法

1、** 在python中表示乘方运算, ** 2即为求平方

2、python中的常见变量类型:

  1. 整数(int)
  2. 浮点数(float)
    对于浮点数来说,不要使用==来判定是否相等, 因为浮点数会出现很小的误差,造成错误
  3. 字符串(str)
    字符串是可以相加的,但是不能让字符串和上面两种类型相加
    并且str是不能进行 - * / 的操作
  4. 布尔
    需要注意的是布尔类型取值是两种,并且两种类型都要大写True 和 False

3、动态类型特性

在python中,一个变量的类型,是可以在程序运行的过程中变化的,这点和其他语言不同

4、注释方法

分为# + 后面注释的内容 或者 '''''' + 注释内容 + ''''''

5、控制台输出

在python中,使用print函数输出到控制台

python 复制代码
print('hello')
python 复制代码
num = 10
print(f'num = {num}')

6、通过控制台输入

在Python中使用input函数, 从控制台读取用户的输入

python 复制代码
num = 0
num = input('请输入一个整数')
print(f'你输入的整数是{num}')

需要注意的是,input的返回值是用户输入的内容,是字符串类型,如果希望通过输入来进行加法运算, 需要转换类型

python 复制代码
a = input('请输入第一个整数')
b = input('请输入第二个整数')

a = int(a)
b = int(b)

print(f'a + b = {a + b}')

7、逻辑运算符

比如and or not 这一系列的运算符被称为逻辑运算符 这几种运算符可以对应c++中的&& || !

8、赋值运算符

= 有两种赋值方式

链式赋值

python 复制代码
a = b = 10

多元赋值

python 复制代码
a, b = 10, 20

9、条件语句

(1)if

python 复制代码
if expression:
    do_something1
    do_something2
next_something

(2)if - else

python 复制代码
if expression:
    do_something1
else:
    do_something2

(3)if - elif - else

python 复制代码
if expression1:
    do_something1
elif expression2:
    do_something2
else:
    do_something3

需要注意的是,if后面的条件表达式,没有(),使用:作为结尾

10、空语句pass

python 复制代码
a = int(input("请输入一个整数:))
if a != 1:
    pass
else:
    print("hello")

其中pass表示空语句,并不会对程序的执行有任何的影响,只是占个位置,保持Python语法格式符合要求

11、循环语句

while循环

python 复制代码
while 条件:
    循环体

例子:打印1 - 10 的整数

python 复制代码
num = 1
while num <= 10
    print(num)
    num += 1

for循环

例子:打印1 - 10 的整数

python 复制代码
for i in range(1, 11):
    print(i)

例子:打印2 、4、6、8、10

python 复制代码
for i int range(2, 12, 2):
    print(i)

通过range的第三个参数, 可以指定迭代时候的步长,也就是让循环变量加几,range的步长也可以设置为负数

continue表示结束这次循环,进入下次循环

python 复制代码
for i int range(1, 6):
    if i == 3:
        continue
    print(f"这是第{i}个数")

break

例子:输入若干个数字,求平均值,使用分号作为结尾

python 复制代码
sum = 0
count = 0
while True
    num = input("请输入数字:")
    if num == ';'
        break
    num = float(num)
    sum += num
    count += 1
print(sum / count)

12、定义函数

python 复制代码
def calSum(beg, end):
    sum = 0
    for i in range(beg, end + 1):
        sum += i
    print(sum)
    return sum
python 复制代码
# 调用函数
sum(1, 100)
sum(300, 400)
sum(1, 1000)

一个函数是可以一次返回多个返回值的,使用逗号来分割多个返回值

python 复制代码
def getPoint():
    x = 10
    y = 20
    return x, y

a, b = getPoint()

如果只想要期中的部分返回值,可以使用_来忽略不想要的返回值

python 复制代码
def getPoint():
    x = 10
    y = 20
    return x, y

_, b = getPoint()

如果是想在函数内部,修改全局变量的值,需要使用global关键词声明

python 复制代码
x = 20

def test():
    global x;
    x = 10
    print(f'函数内部 x = {x}')

test()
print(f'函数外部 x = {x}')

13、函数递归

代码实例:递归计算5!

python 复制代码
def factor(n):
    if n == 1:
        return 1
    return  n * factor(n - 1)

14、参数默认值

Python中的函数,可以制定默认值

带有默认值的参数,可以在调用的时候不传参

代码实例:计算两个数字的和

python 复制代码
def add(x, y, debug = False):
    if debug:
        print(f'调试信息: x = {x}, y = {y}')
    return x + y
print(add(10, 20))
print(add(10, 20, True))

需要注意的是:带有默认值的参数需要放到没有默认值参数的后面

15、关键字参数

在调用函数的时候,需要给函数制定实参,一般默认情况是按照形参的顺序,来依次传递实参的

但是我们也可以通过关键字参数,来调整这里的传参顺序,显示指定当前实参传递给哪个形参

python 复制代码
def test(x, y):
    print(f'x = {x}')
    print(f'y = {y}')

test(x=10, y=20)
test(y=100, x=200)

16、列表和元组

元组和列表相比,是非常相似的,只是列表中哪些元素可以修改调整,元组中放的元素是创建元组的时候就设定好的,不能修改调整

17、列表

创建列表主要有两种方式,可以直接写在[ ]当中

python 复制代码
alist = [ ]
alist = list()
print(type(alist))

如果需要往里面设置初始值,可以直接写在[ ]当中

python 复制代码
alist = [1, 2, 3, 4]
print(alist)

列表中存放的元素允许是不同的类型

python 复制代码
alist = [1, 'hello', True]
print(alist)

使用len函数介意获取到列表的元素个数

python 复制代码
alist = [1, 2, 3, 4]
print(len(alist))

访问列表中的东东也可以使用负数的下标,表示访问alist[len(alist) - 1]的元素

python 复制代码
alist = [1, 2, 3, 4]
print(alist[3])
print(alist[-1])

切片操作

使用[ : ]的方式进行切片操作

python 复制代码
alist = [1, 2, 3, 4]
print(alist[1:3])

上面的代码表示从1下标开始一直到2下标

python 复制代码
alist = [1, 2, 3, 4]
print(alist[1:])        # 省略后边界, 表示获取到列表末尾
print(alist[:-1])       # 省略前边界, 表示从列表开头获取
print(alist[:])         # 省略两个边界, 表示获取到整个列表.

切片操作还可以指定步长,也就是每访问一个元素后,下标自増几步

python 复制代码
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::1])
print(alist[::2])
print(alist[::3])
print(alist[::5])

切片操作指定的步长也可以是负数,此时是从后面往前面进行取元素,表示每访问一个元素之后,下标自减几步

python 复制代码
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::-1])
print(alist[::-2])
print(alist[::-3])
print(alist[::-5])

如果切片中填写的数字越界了,不会有负面效果,只会尽可能吧满足条件的元素过去到

遍历列表元素

最简单的方法就是使用for循环

python 复制代码
alist = [1, 2, 3, 4]

for elem in alist:
    print(elem)

也可以使用for按照范围生成下标,按下标访问

python 复制代码
alist = [1, 2, 3, 4]

for i in range(0, len(alist)):
    print(alist[i])

还可以使用while循环,手动控制下标的变化

python 复制代码
alist = [1, 2, 3, 4]

i = 0
while i < len(alist)
    print(alist[i])
    i += 1

新增元素

使用append方法,向列表末尾插入一个元素

python 复制代码
alist = [1, 2, 3, 4]
alist.append('hello')
print(alist)

使用insert方法,向任意位置插入一个元素,insert第一个参数表示要插入的下标

python 复制代码
alist = [1, 2, 3, 4]
alist.insert(1, 'hello')
print(alist)

查找元素

使用in操作符,判定元素是否在列表中存在,返回值是布尔类型

python 复制代码
alist = [1, 2, 3, 4]
print(2 in alist)
print(10 in alist)

使用index方法,查找元素在列表中的下标,返回值是一个整数,如果元素不存在,则会抛出异常

python 复制代码
alist = [1, 2, 3, 4]
print(alist.index(2))
print(alist.index(10))

删除元素

使用pop方法删除最末端元素

python 复制代码
alist = [1, 2, 3, 4]
alist.pop()
print(alist)

pop也能按照下标来删除元素

python 复制代码
alist = [1, 2, 3, 4]
alist.pop(2)
print(alist)

使用remove方法,按照值删除元素

python 复制代码
alist = [1, 2, 3, 4]
alist.remove(2)
print(alist)

使用+能够将两个列表拼接在一起

python 复制代码
alist = [1, 2, 3, 4]
blist = [5, 6, 7]
print(alist + blist)

使用extend方法,相当于吧一个列表拼接到另一个列表的后面

python 复制代码
alist = [1, 2, 3, 4]
blist = [5, 6, 7]
alist.extend(blist)
print(alist)
print(blist)

18、元组

元组使用()来表示

python 复制代码
atuple = ( )
atuple = tuple()

元组不能修改里面的元素,列表则可以修改里面的元素

19、字典

创建一个空的字典,使用{ }表示字典

python 复制代码
a = { }
b = dict()

print(type(a))
print(type(b))

键值对之间使用,分割,键和值之间使用:分割(冒号后面最好加一个空格)

python 复制代码
student = {'id': 1, 'name': 'zhangsan'}
print(student)

也可以这样写

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan'
}

最后一个键值对后面可以有逗号也可以不写

19、查找key

使用in可以判定key是否在字典中存在,返回布尔值

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan'
}

print('id' in student)
print('score' in student)

使用[]通过类似于取下标的方式,获取到元素的值,只不过此处的'下标'是key

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan'
}

print(student['id'])
print(student['name'])

如果key在字典中并不存在,则会抛出异常

使用[ ]可以根据key来新增/修改value

如果key不存在,对去下表操作赋值,即为新增键值对

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
}
student['score'] = 90
print(student)

如果 key 已经存在 , 对取下标操作赋值 , 即为修改键值对的值 .

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
student['score'] = 90
print(student)

使用pop方法删除对应的键值对

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
student.pop('score')
print(student)

遍历字典元素

直接使用for循环能够获取到字典中的所有key

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
for key in student:
    print(key, student[key])

使用keys方法能够获取到字典中的所有的key

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.keys())

使用values方法能够找到字典中的所有的value

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.values())

使用items方法可以获取到字典中的所有的键值对

python 复制代码
student = {
    'id': 1,
    'name': 'zhangsan',
    'score': 80
}
print(student.items())

需要注意的是,字典本质是哈希表,哈希表的key要求是'可哈希的',也就是说可以计算出一个哈希值

其中:

列表和字典无法计算哈希值

python 复制代码
print(hash([1, 2, 3]))
print(hash({'id': 1}))

20、文件

文件路径

一个机器上,会存在很多的文件,为了让这些文件更方便的被组织,往往会使用很多的"文件夹"(也叫做目录)来整理文件

实际一个文件往往是放在一系列的目录结构当中的

为了方便确定一个文件所在的位置,使用文件路径来进行描述

打开文件

使用内建函数open打开一个文件

python 复制代码
f = open('d:/test.txt', 'r')

第一个参数是一个字符串,表示要打开的文件路径

第二个参数是一个字符串,表示打开方式,其中r表示按照读的方式打开,w按照写方式打开,a表示追加写方式打开

如果打开文件成功,返回一个文件对象,后续的读写文件操作都是围绕这个文件对象展开

如果打开文件失败,则会抛出异常

关闭文件

使用close方法关闭已经打开的文件

python 复制代码
f.close()

需要注意的是,一个程序能同时打开的文件个数,是存在上限的

python 复制代码
flist = []
count = 0
while True:
    f = open('d:/test.txt', 'r')
    flist.append(f)
    count += 1
    print(f'count = {count}')

写文件

写文件,要用写方式打开,open第二个参数设为'w'

使用write方法写入文件

python 复制代码
f = open('d:/test.txt', 'w')
f.write('hello')
f.close()

若使用'r'方式打开文件,则写入时会抛出异常

需要注意的是:使用'w'方式一旦打开文件成功,则会清空文件原有的数据

我们如果需要追加写,则应该使用'a'这种打开方式

读文件

读文件需要使用'r'的方式打开文件

使用read方法完成读操作,参数表示,读取几个字符

python 复制代码
f = open('d:/test.txt', 'r')
result = f.read(2)
print(result)
f.close()

如果是多行文本,可以使用for来循环读取

python 复制代码
f = open('d:/test.txt', 'r')
for line in f:
    print(f'line = {line}')
f.close()

使用readlines直接把文件内容读取出来,返回一个列表,每个元素为一行

python 复制代码
f = open('d:/test.txt', 'r')
lines = f.readlines()
print(lines)
f.close()

需要注意的是,读取汉字时,编码要为ANSI即GBK编码才可以正确打印出汉字

可以给open方法加上encoding参数,显式指定为和文本相同的字符集

python 复制代码
f = open('d:/test.txt', 'r', encoding = 'utf8')

python中提供了上下文管理器,可以帮助我们自动关闭文件

使用with打开文件,当with内部的代码执行完毕后,就会自动调用关闭方法

python 复制代码
with open('d:/test.txt', 'r', encoding='utf8') as f:
    lines = f.readlines()
    print(lines)

21、库

使用import导入模块

例子1:

python 复制代码
import datetime

date1 = datetime.datetime(2012, 2, 14)
date2 = datetime.datetime(2022, 7, 12)

print(date2 - date1)

例子2:

题目:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和
普通字母一样处理。例如输入字符串 "I am a student. " ,则输出 "student. a am I"

  • 使用str中的split方法进行字符串切分,指定空格为分隔符,返回结果是一个列表
  • 使用列表中的reverse方法进行逆序
  • 使用str的join方法进行字符串拼接,把列表中的内容进行合并
python 复制代码
def reverseWords(s):
    tokens = s.split()
    tokens.reverse()
    return ' '.join(tokens)

print(reverseWords('I am a student.'))

例子3:

题目:
给定两个字符串 , s 和 goal 。如果在若干次旋转操作之后, s 能变成 goal ,那么返回 true 。
s 的 旋转操作 就是将 s 最左边的字符移动到最右边。
例如 , 若 s = 'abcde' ,在旋转一次之后结果就是 'bcdea' 。

  • 使用len求字符串的长度。如果长度不相同,则一定不能旋转得到
  • 将s和自己进行拼接,然后使用in方法来判定goal是否为s+s的子串
python 复制代码
def rotateString(s, goal):
    return len(s) == len(goal) and goal in s + s

print(rotateString('abcde', 'cdeab'))

例子4:

题目:
给你一个字符串数组 words 和一个字符串 s ,其中 words[i] 和 s 只包含 小写英文字母 。
请你返回 words 中是字符串 s 前缀 的 字符串数目 。
一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串 是一个字符串中的连续一段字符序列。

  • 依次遍历words中的字符串
  • 直接使用字符串的startwith方法即可判定当前字符串是否是s的前缀
python 复制代码
def countPrefixes(words, s):
    res = 0
    for word in words:
        if s.startswith(word):
            res += 1
    return res

例子5:

文件查找工具:

  • 使用os.walk即可实现目录的递归遍历
  • os.walk返回一个三元组,分别是当前路径,当前路径下包含的目录名,当前路径下包含的文件名
python 复制代码
import os

inputPath = input('请输入待搜索路径:')
pattern = input('请输入待搜索关键词:')

for dirpath, dirnames, filenames in os.walk(inputPath)
    for f in filenames:
        if pattern in f:
            print(f'{dirpath}/{f}')
相关推荐
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)2 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python