python基础知识

python概述

诞生于1990年,由 Guido van Rossum 设计并领导开发

2000年10月,python2.0正式发布

2010年,python 2.x 发布了最后一版,2.7

2008年12月,python3.0正式发布

python语法格式

注释

增加代码的可读性

快捷键 :Ctrl + /

# 单行注释

"""
多行注释
"""

'''
多行注释
'''

变量

变量就是存储数据的时候,当前数据所在的内存地址的名字

定义变量
变量名 =

变量名自定义,但要满足标识符的命名规则

标识符

标识符命名规则是python中定义各种名字时候的统一规范 :

  1. 由数字、字母、下划线组成
  2. 不能数字开头
  3. 不能使用内置关键字
  4. 严格区分大小写
命名习惯 :
  1. 见名知义
  2. 大驼峰 :MyName
  3. 小驼峰 :myName
  4. 下划线 :my_name
使用变量
# 定义变量
# 存储名字 TOM
MyName = "TOM"
print(MyName)

# 存储学校名称 :河南科技大学
SchoolName = "河南科技大学"
print(SchoolName)

debug

认识 bug

所谓 bug 就是程序中的错误。如果程序中有错误,需要程序员排查问题,并解决

IndentationError: unexpected indent    未知的缩进

数据类型

数值 :int(整型)、float(浮点型)

布尔型 :True 、False

字符串(str)

列表(list)

元组(tuple)

集合(set)

字典(dict)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GNoviXhj-1678778536330)(Python.assets/image-20211014165645460.png)]

# 检测数据类型 -- type(数据或变量)
# 整型 -- int
num1 = 1
print(type(num1))  # <class 'int'>

# 浮点数(小数) -- float
num2 = 1.1
print(type(num2))  # <class 'float'>

# 布尔型 -- boolean
a = True
print(type(a))  # <class 'bool'>

# 字符串 :str 单引号双引号都行
b = "Hello World!"
print(type(b))  # <class 'str'>

# 列表 -- list
c = [10, 20, 30]
print(type(c))  # <class 'list'>

# 元组 -- tuple
d = (10, 20, 30)
print(type(d))  # <class 'tuple'>

# 集合 -- set
e = {10, 20, 30}
print(type(e))  # <class 'set'>

# 字典 -- dict  以键值对的形式存储值
f = {"name": "TOM", "age": 20}
print(type(f)) # <class 'dict'>

格式化输出

常用到的格式化符号

格式符号转换
%s字符串
%d整数
%f浮点数
# 准备数据
age = 18
name = "TOM"
weight = 50.5
stu_id = 12
# 格式化输出数据
# 今年xx岁
print("今年%d岁" % age)
# 名字是xx
print("名字是%s" % name)
# 体重是xx   -- 浮点数截取小数位 %.xf 如 :%.2f 保留两位小数
print("体重是%f" % weight)
print("体重是%.2f" % weight)
# 学号是xxx
print("学号是%d" % stu_id)
# 将学号输出为 012
print("学号是%03d" % stu_id)
# 名字是xx,年龄是xx
print("名字是%s,年龄是%d" % (name, age))
# 名字是xx,下一年年龄是xx
print("名字是%s,下一年年龄是%d" % (name, age+1))
# 名字是xx,年龄是xx,体重是xx,学号是xx
print("名字是%s,年龄是%d,体重是%.2f,学号是%06d" % (name, age, weight, stu_id))

小技巧 :

%0xd : 输出的整数显示位数,不足以0补全,超出当前位数则原样输出 如 :%03d :表示输出的位数是3位

%.xf :浮点数截取小数位 如 :%.2f 保留两位小数

拓展

%s 可以直接格式化字符串、整数、浮点数

# 名字是xx,年龄是xx,体重是xx
print("名字是%s,年龄是%s,体重是%s" % (name, age, weight))
格式化字符串的两种方式

格式化字符串除了 %s,还有f'{表达式}'

name = "TOM"
age = 18

# 名字xx,年龄xx
print("名字%s,年龄%s" % (name, age))
print(f'名字{name},下一年年龄{age+1}')

f-格式化字符串是python3.6中新增的格式方法,该方法简单易懂,效率比%s 高效

转义字符

\n :换行

\t :制表符,一个 tab 键(4个空格)的距离

print("Hello\nWorld")
print("\tHello")
结束符

想想,为什么两个 print 会换行输出?

print("输出的内容",end="\n")

python 中 print() 默认自带end="\n"这个换行结束符,所以导致两个 print 会换行输出

print("Hello",end="\t")
print("World")
# 输出的结果为 :Hello	World

输入 – input

接收用户输入的数据的功能,就是输入功能

语法
input("提示信息")
特点
  • 程序执行到input,等待用户输入,输入完成之后才继续向下执行
  • input接收用户输入后,一般存储到变量中,方便使用
  • input会把接收到的任意用户输入的数据都当做字符串处理
password = input("请输入您的密码 :")  # 直接一个 input 即可以完成输入功能
print(f'您输入的密码是 :{password}')  # 输出的内容是上面输入的值
print(f'密码的类型为 :{type(password)}')  # 密码的类型为 :<class 'str'>

拓展 :转换数据类型

input函数接收用户输入的数据都是字符串类型,如果用户输入的123,我们需要将该值转换为整数

转换类型的函数

常用的函数

函数说明
int(x[,base])将 x 转换为一个整数
float(x)将 x 转换为一个浮点数
str(x)将 x 转换为字符串
eval(str)用来计算在字符串中的有效python表达式,并返回一个对象。通俗来讲 eval() 就是把字符串中的数据转换为原本的数据类型
tuple(s)将序列 s 转换为一个元组
list(s)将序列 s 转换为一个列表
"""
步骤 :
1、input
2、检测input的数据类型
3、int() 转换数据类型
4、检验是否转换成功
"""
password = input("请输入您的密码 :")
print(type(password))  # <class 'str'>
print(type(int(password)))  # <class 'int'>
num = 1
a = "10"
# float() -- 将数据转换为浮点型
print(type(float(num)))  # <class 'float'>
print(float(num))  # 1.0
print(float(a))  # 10.0

# str() -- 将数据转换为字符串
print(type(str(num)))  # <class 'str'>
print(str(num))  # 1

# tuple() -- 将一个序列转为元组
b = [10, 20, 30]
print(type(tuple(b)))  # <class 'tuple'>
print(tuple(b))  # (10, 20, 30)

# list() -- 将一个序列转为列表
c = (10, 20, 30)
print(type(list(c)))  # <class 'list'>
print(list(c))  # [10, 20, 30]


# eval()  -- 用来计算在字符串中的有效python表达式,并返回一个对象
# 通俗来讲 eval() 就是把字符串中的数据转换为原本的数据类型
str2 = "1"
str3 = "1.0"
str4 = "(10, 20, 30)"
str5 = "[10, 20, 30]"
print(type(eval(str2)))  # <class 'int'>
print(type(eval(str3)))  # <class 'float'>
print(type(eval(str4)))  # <class 'tuple'>
print(type(eval(str5)))  # <class 'list'>

pycharm 交互开发

可以不需要使用 print() 函数,就可以直接输出了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZtvtShK-1678778536331)(Python.assets/image-20211014184109333.png)]

运算符的分类

  1. 算数运算符
  2. 赋值运算符
  3. 复合赋值运算符
  4. 比较运算符
  5. 逻辑运算符
算数运算符
运算符描述实例
+1+1 结果为2
-1-1 结果为0
*2*2 结果为 4
/10/2 结果为5.0,9/4 结果为2.25
//整除9//4 结果为2
%取余9%4 结果为1
**指数2**4 结果为16 ,即为 2 * 2 * 2 * 2
()小括号小括号用来提高优先级的

优先级问题 :() 高于 ** 高于 *、/、//、% 高于+、-

赋值运算符
运算符描述实例
=赋值=右边的值赋值给左边的变量
多个变量赋值(一一对应)
# 多个变量赋值(一一对应)
a, b, c = 1, 2, 3
print(a)
print(b)
print(c)

结果如下 :[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sTL9WRGJ-1678778536331)(Python.assets/image-20211014190515556.png)]

多个变量赋相同的值
# 多个变量赋相同的值
d=e=f=10
print(d)
print(e)
print(f)

结果如下 :[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1f5aUXPj-1678778536331)(Python.assets/image-20211014190719177.png)]

复合赋值运算符
运算符描述实例
+=加法赋值运算符c += a 等价于c = c+a
-=减法赋值运算符c -= a 等价于c = c-a
*=乘法赋值运算符c * = a 等价于c = c * a
/=除法赋值运算符c /= a 等价于c = c/a
//=整除赋值运算符c // = a 等价于c = c+a
%=取余赋值运算符c %= a 等价于c = c+a
**=幂赋值运算符c **= a 等价于c = c+a

特殊运算 :

c = 10
c *= 1+2
print(c) # 结果为30

由此可见 :赋值运算符的执行顺序是,先算后面的 ± ,在运算赋值运算符

即第二行代码执行过程为 :c *= 3

比较运算符

也叫关系运算符

运算符描述实例
==判断相等。如果两个操作数的结果相等,则条件结果为真,否则条件结果为假如 :a=3,b=3 则(a==b)为真
!=不等于。如果两个操作数的结果不相等,则条件为真(True),否则条件结果为假(False)如a=1,b=3,则(a != b)为True
>运算符左侧操作数结果是否大于右侧操作数结果,如果大于,则条件为真,否则为假如a=7,b=3,则(a >b)为True
<运算符左侧操作数结果是否小于右侧操作数结果,如果小于,则条件为真,否则为假如a=7,b=3,则(a<b)为False
>=运算符左侧操作数结果是否大于等于右侧操作数结果,如果大于,则条件为真,否则为假如a=3,b=3,则(a >= b)为True
<=运算符左侧操作数结果是否小于等于右侧操作数结果,如果小于,则条件为真,否则为假如a=3,b=3,则(a <= b)为True
逻辑运算符
运算符逻辑表达式描述
andx and y“与” :x 和 y 都为真,结果才为真;有一个为假,结果就为假
orx or y“或” :x 和 y 只要有一个为真,结果为真;两个都为假的时候,结果为假
notx not y“非” :取反
a = 10
b = 20
c = 30
# and
print(c>b and b>c)  # False
print(c>b and b>a)  # True

# or
print(c>b or b>c)  # True
print(b>c or a>b)  # False

# not
print(not False)  # True
print(not b>c)  # True

# 注意点 :如果运算符两侧的表达式比较复杂时候,建议加上小括号
print((c>b) or (b>c)
拓展 :数字之间的逻辑运算符
# and 运算符,只要有一个值为0,则结果为0,否则结果为最后一个非零的数字
print(0 and 1)  # 0
print(1 and 2)  # 2
print(2 and 1)  # 1

# or 运算符,只有所有值为0,结果才为0,否则结果为第一个非0数字
print(0 or 1)  # 1
print(1 or 2)  # 1
print(2 or 1)  # 2

if 语句

语法 :
if 条件:
    满足条件要执行的代码
    ......
快速体验 if
score = int(input("请输入你的成绩 :"))
if score>60:
    print(f"及格了,你的成绩是{score}")
if…else…

语法 :

if 条件:
    满足条件要执行的代码
    ......
else:
    满足条件要执行的代码
    ......
体验 if…else…
score = int(input("请输入你的成绩 :"))
if score>60:
    print(f'及格了,成绩为{score}')
else:
    print(f'不及格,成绩为{score}')
多重判断 if…elif…else…

语法 :

if 条件1:
    满足条件要执行的代码
    ......
elif 条件2:
    满足条件要执行的代码
    ......
......
else:
    满足条件要执行的代码
    ......

最后可以没有 else

体验 if…elif…else…
score = int(input("请输入你的成绩 :"))
if score>90:
    print(f'成绩为{score},优秀')
elif score>60:
    print(f'成绩为{score},良好')
else:
    print(f'成绩为{score},不及格')
age = int(input("请输入你的年龄 :"))
if age<18:
    print(f'年龄为{age},童工')
elif age>60:
    print(f'年龄为{age},退休年龄')
elif age>=18 and age<=60:
    print(f'年龄为{age},合法')

age>=18 and age<=60 可以写成 18<=age<=60

猜拳游戏

需求分析 :

需要的角色 :

  • 玩家 :手动出拳
  • 电脑 :随机出拳

判断输赢 :

  • 电脑赢
  • 玩家赢
  • 平局
拓展随机数

1、导入 random 模块

import 模块名

2、使用 random 模块中的随机整数功能

random.randint(开始,结束)	# 随机数的范围是[开始,结束]
猜拳案例
import random
# 定义玩家
player=int(input("请出拳 :0--石头,1--剪刀,2--布;"))
# 定义电脑 ,给出一个默认值
computer = random.randint(0, 2)
print(f'computer 出的是{computer}')
# 判断输赢
if player>2:
    print("请输入正确的格式")
else:
    if ((player == 0) and (computer == 1)) or ((player == 1) and (computer == 2)) or (
            (player == 2) and (computer == 0)):
        print("玩家获胜")
    elif player == computer:
        print("平局")
    else:
        print("电脑获胜")
三目运算符

也叫三元运算符、三元表达式

语法 :
条件成立执行的表达式 if 条件 else 条件不成立执行的表达式
快速体验
a = 3 if 1>2 else 6
print(a)  # 6

while 循环

语法
while 条件:
    代码块
    ......
快速体验
# 输出五遍 Hello World!!!
i = 0
while i<5:
    print("Hello World!!!")
    i+=1
# 计算1-100的和
sum = 0
i = 1
while i <= 100:
    sum += i
    i += 1
print(f'1-100的和 :{sum}')

# 计算 1-100 之间的偶数和
sum2 = 0
i = 1
while i <= 100:
    if i % 2 == 0:
        sum2 += i
    i += 1
print(f'1-100 的偶数和 :{sum2}')

# 计算 1-100 之间的奇数和
sum3 = 0
i = 1
while i <= 100:
    if i % 2 == 1:
        sum3 += i
    i += 1
print(f'1-100 的奇数和 :{sum3}')
while 循环嵌套
语法
while 条件:
    代码块
    ...
    while 条件:
        代码块
        ...
应用
# 打印九九乘法表
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print(f'{j}*{i}={i*j}', end="\t")
        j += 1
    print()
    i += 1

break 和 continue

breakcontinue 是退出循环的两种方式

break :终止整个循环

continue :退出当前一次循环继而执行下一次循环代码

for 循环

语法
for 临时变量 in 序列:
    循环的代码块
    ......

序列 :一个数据内部是由多个数据组成的

快速体验
str1 = "hello"
for i in str1:
    print(i)

执行结果 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqRjOfna-1678778536332)(Python.assets/image-20211020171405626.png)]

range()
for i in range(10):
    print(i)  # 输出结果为[0,9)

for i in range(1,10):
    print(i)  # 输出结果为[1,9)

循环中的 else

循环也可以和 else 搭配使用,else 下方缩进的代码指的是 :当循环正常结束后要执行的代码

语法
# while循环
while 条件:
    条件成立重复执行的代码
else:
    循环正常结束之后要执行的代码
 
# for 循环
for i in 序列:
    重复执行的代码
else:
    循环正常结束之后要执行的代码

else 指的是循环正常结束后要执行的代码,即如果是break终止循环的情况,else 下方的代码将不执行

因为 continue 是退出当前循环,继续循环下一次,所以该循环在 continue 控制下是可以正常结束的,并且 else下方的代码也是执行的

字符串

表示方法
# 单引号
name = 'Tom'
# 双引号
name = "Tom"
# 三引号
name = '''姓名为Tom'''
name = """姓名为Tom"""

三引号的字符串支持换行功能

下标

下标 又称为 索引 ,就是编号。下标的作用是通过下标快速找到对应的数据

切片

切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。

语法
序列[开始位置下标:结束位置下标:步长]

注意 :

  1. 截取数据不包含结束位置下标对应的数据;即范围为 :[ 开始位置,结束位置 )
  2. 步长是选择间隔,默认步长为 1
  3. 下标和步长都可以为负数
快速体验
str1 = "0123456789"

# 通过下标获取的是该下标对应的字母
print(str1[2])  # 2

# 切片语法 :[开始位置的下标:结束位置的下标:步长]
print(str1[2:5:1]) # 234
print(str1[2:5:2]) # 24

# 如果不写开始位置,默认下标从0开始,步长默认为1
print(str1[:5])  # 01234
# 如果不写结束位置,默认下标到最后结束,步长默认为1
print(str1[2:])  # 23456789
# 如果不写开始和结束位置,表示选取所有,步长默认为1
print(str1[:])  # 0123456789

# 负数
# 如果步长为负数 ,表示倒叙选取
print(str1[::-1])  # 9876543210
print(str1[-4:-1:1])  # 678
print(str1[-4:-1:-1])  # 不能取出任何数据,如果数据选取方向(下标开始到结束的方向)和步长的方向起冲突,则无法选取数据
print(str1[-1:-4:-1])  # 987
常用操作方法

字符串常用的操作方法有 查找、修改和判断 三大类。

查找

所谓字符串查找方法即 :查找子串在字符串中的位置或出现的次数

find()

检测某个子串是否包含在这个字符串中,如果在返回这个子串开始位置下标,否则则返回-1

语法 :

字符串序列.find(子串,开始位置下标,结束位置下标)

注意 :开始位置和结束位置下标可以忽略,表示在整个字符串序列中查找;

​ 开始和结束位置表示的是查找区间

快速体验 :

my_str = "hello world java and python and ..."

# find()
print(my_str.find("and"))  # 17
print(my_str.find("a", 0, 13))  # -1  查找范围为 :[0,13)
index()

检测某个子串是否包含在这个字符串中,如果在返回这个子串开始位置下标,否则则报错

语法 :

字符串序列.index(子串,开始位置下标,结束位置下标)

注意 :开始位置和结束位置下标可以忽略,表示在整个字符串序列中查找;

​ 开始和结束位置表示的是查找区间

快速体验

my_str = "hello world java and python and ..."
# # index()
print(my_str.index("and"))  # 17
# print(my_str.index("a", 0, 13))  # 不存在会报错
rfind() 、rindex()

rfind() 和 find() 功能相同,但查找的方向是从右侧开始的

rindex() 和index() 功能相同,但查找的方向是从右侧开始的

my_str = "hello world java and python and ..."
# rfind()
print(my_str.rfind("and"))  # 28
print(my_str.rfind("ands"))  # -1,找不到返回 -1

# rindex()
print(my_str.rindex("and"))  # 28
print(my_str.rindex("ands"))  # 报错
count()

返回某个子串在字符串中出现的次数

语法 :

字符串序列.count(子串,开始位置下标,结束位置下标)

快速体验

my_str = "hello world java and python and ..."
# count()
print(my_str.count("and"))  # 2
print(my_str.count("a"))  # 4
print(my_str.count("a",3,15))  # 1
修改

字符串的修改,指的就是通过函数的形式修改字符串中的数据

replace() : 替换

语法 :

字符串序列.replace(旧子串,新子串,替换次数)

替换的次数如果查出子串出现的次数,则替换次数为该子串出现的次数

快速体验

my_str = "hello world java and python..."

print(my_str.replace("and","he"))  # hello world java he python...
print(my_str.replace("a","he",1))  # hello world jheva and python...
# 替换次数如果超出了子串出现的次数,就表示将所有的子串都替换掉
print(my_str.replace("a","he",100))  # hello world jhevhe hend python...
split()

按照指定字符分割字符串,返回的数据是一个列表

语法:

字符串序列.split(分割字符,num)

注意 :num 表示的是分割字符出现的次数,即将来返回数据的个数为 num+1 个

快速体验

my_str = "hello world java and python..."
# split()  按照指定字符分割字符串
list1 = my_str.split(" ")  # 通过空格分割字符串,得到的结果是列表
print(list1)  # ['hello', 'world', 'java', 'and', 'python...']
join()

合并列表里的字符串,拼成一个大的字符串

语法

字符或子串.join(多字符串组成的序列)

快速体验

list2 = ["aa","bb","cc"]
new_list = "...".join(list2)
print(new_list)  # aa...bb...cc
capitalize()

将字符串第一个字符转为大写

# capitalize()
str1 = "ABCDEFG"
str2 = str1.capitalize()
print(str2)  # Abcdefg

注意 :capitalize() 函数转换后,只将字符串的第一个字母变为大写,其余字母小写

lower()

字符串中大写转小写

# lower()
str1 = "ABCDEFG"
str2 = str1.lower()
print(str2)  # abcdefg
upper()

字符串小写转大写

# upper()
str1 = "asd"
str2 = str1.upper()
print(str2)  # ASD
startswith()

检查字符串是否以指定的子串开头,是则返回 True ,否则返回 False

#  startswith(子串[,开始位置下标,结束位置下标])
str1 = "asd"
new_str = str1.startswith("a")
print(new_str)  # True

endswith()

检查字符串是否以指定的子串结尾

# endswith(子串[,开始位置下标,结束位置下标])
str1 = "asd"
new_str = str1.endswith("d")
print(new_str)  # True
判断字符串方法
# isalpha() 字符串中全是字母,返回True,否则返回False
str1 = "adsadsa"
print(str1.isalpha())  # True
#  isdigit() 字符串中全是数字,返回True,否则返回False
str2 = "123456"
print(str2.isdigit())  # True
#  isalnum() 字符串中是数字或字母或是数字字母组合,返回True,否则返回False
str3 = "asdf123"
print(str3.isalnum())  # True

列表

列表的格式
[数据1,数据2,......]
列表中的常用操作
查找
下标
name_list = ['张三','李四','王五']
# 查询
print(name_list[0])  # 张三
print(name_list[1])  # 李四
print(name_list[2])  # 王五
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值