Python基础学习笔记

前言:本片笔记是本人之前学习时所记录的笔记,通篇纯手打,部分图片借鉴黑马与开源程序员ppt课件与开源中国网站

一、python基础

1.1 基础知识

1.1.1 注释

注释:在程序中对程序代码进行解释说明的文字。
作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够大大增强程序的可读性。

  • 单行注释:以  #开头#右侧 的所有文字当做说明,而不是真正要执行的程序,起辅助说明作用;
  • 多行注释:以一对三个双引号引起来(“”“注释内容”“”)来解释说明一段代码的作用使用方法,多行注释可以换行。

1.1.2 转义字符

# 转义字符
print('hello\nworld') #\n换行
print('hello\tworld') #\t制表符
print('helloo\tworld')
print('hello\rworld') #\r回车
print('hello\bworld') #\b回退一格,将o回退了
print('www:\\\\baidu.com')
print('老师说:\'asda\'')

# 原字符,不希望字符串中的转义字符起作用就可以使用原字符,就是在字符串之首加上r或者R
print(r'hello\nworld`')

1.1.3 关键字

下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。

所有 Python 的关键字只包含小写字母。

and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

1.1.4 标识符

在python中我们可以给很多的东西起名字,如变量名、方法名、类名等等这些统称为标识符


标识符命名规范:

  1. 标识符命名中只允许出现:英文、中文(不推荐)、数字、下划线(_)这四类元素
  2. 不允许以数字开头
  3. 不可使用关键字

变量命名规范:

  1. 尽量做到:见名知意、明了简洁
  2. 当使用多个单词组合变量名时,应使用下划线连接,如:first_number
  3. 变量中的英文字母应全小写

1.1.5 pass语句

Python pass 是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句。

在这里插入图片描述

1.2 python中常用的数据类型

在这里插入图片描述

1.3 变量

变量:在程序运行时,能存储计算结果或能表示值的抽象概念。
变量定义的格式: 变量名称=变量值
变量的特征:变量的值是可以改变的


1.3.1 查看变量的类型type()

通过type(变量)查看的是变量中存储的数据的类型。因为变量无类型,但它存储的数据有类型。

  1. 在print语句中直接输出类型信息,如下代码所示
  2. 用变量存储type()的结果(返回值)
name = '张三'
print(name)#张三
print('标识',id(name))#标识 1927861047728
print('类型',type(name))#类型 <class 'str'>
print('值',name)#值 张三


name = '赵六'
print(name)#赵六
print('标识',id(name))#标识 1927862147856
print('类型',type(name))#类型 <class 'str'>
print('值',name)#值 赵六


name = 333
print(name)#333
print('标识',id(name))#标识 1927861828912
print('类型',type(name))#类型 <class 'int'>
print('值',name)#值 333

name = name-111
print(name)#222
print('标识',id(name))#标识 2432928146768
print('类型',type(name))#类型 <class 'int'>
print('值',name)#值 222

name = '王五'
print(name)#王五
print('标识',id(name))#标识 1927862148240
print('类型',type(name))#类型 <class 'str'>
print('值',name)#值 王五

1.3.2 数据类型转换

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

语句 说明
int(x) 将x转化为一个整数
float(x) 将x转化为一个浮点数
str(x) 将x转化为字符串
  1. 任何类型都可以转化为字符串
  2. 字符串不可以随意转化为数字
  3. 浮点数转整数会丢失掉小数的部分
name = '张三'
age = 20

# 使用str()函数将age由int类型转为 str类型输出
print('我叫' + name + "今年" + str(age) + '岁')#我叫张三今年20岁

print('-----------------str()将其他类型转为str类型-----------')
a = 10
b = 198.8
c = False
print(type(a), type(b), type(c))#<class 'int'> <class 'float'> <class 'bool'>
print(str(a), str(b), str(c), type(str(a)), type(str(b)), type(str(c)))#10 198.8 False <class 'str'> <class 'str'> <class 'str'>

print('-----------------int()将其他类型转为int类型-----------')
s1 = "111"
s2 = 98.7  # 这个转为int类型会丢失小数点后边的内容
s3 = False
s4 = "99.2"  # 字符串为小数,没办法转为int类型
print(type(s1), type(s2), type(s3), type(s4))#<class 'str'> <class 'float'> <class 'bool'> <class 'str'>
print(int(s1), int(s2), int(s3), type(int(s1)), type(int(s2)), type(int(s3)))#111 98 0 <class 'int'> <class 'int'> <class 'int'>

print('-----------------float()将其他类型转为float类型-----------')
f1 = "111"
f2 = 98.7
f3 = False
f4 = "99.2"
print(type(f1), type(f2), type(f3), type(f4))#<class 'str'> <class 'float'> <class 'bool'> <class 'str'>
print(float(f1), float(f2), float(f3), float(f4), type(float(f1)), type(float(f2)), type(float(f3)), type(float(f4)))#111.0 98.7 0.0 99.2 <class 'float'> <class 'float'> <class 'float'> <class 'float'>

1.4 字符串

字符串(string),又称文本,是由任意数量的字符如中文、英文、各类符号、数字组成。所以叫做字符的串。
在python中,字符串需要用双引号包括起来

print(510)
print(98.2)

# 输出字符串
print('helloWord')
print("helloWord")

# 输出到文件
fb = open('D:/test.txt', 'a+') # a+ 如果文件不存在则创建,如果存在则追加
print('helloworld', file=fb)
fb.close()

# 不换行输出
print('hello','word','python')

1.4.1 字符串的三种定义方式

  1. 单引号定义法: name=‘学python’
  2. 双引号定义法: name=“我学python”
  3. 三引号定义法: name=“”“我学python”“”

三引号定义法和多行注释的写法一样,同样支持换行操作,使用变量接收它它就是字符串,不使用变量接收它就可以作为多行注释使用。

如果我想要定义的字符串本身是包含:单引号、双引号自身呢?如何写?

  1. 单引号定义法,可内含双引号
  2. 双引号定义法,可内含单引号
  3. 可以使用转义字符(\)来将引号解除效用,编程普通字符串

1.4.2 字符串拼接

如果我们有两个字符串(文本)字面量,可以将其拼成一个字符串,通过+号即可完成,如:print(‘张’+‘三’) #张三

1.4.3 字符串格式化

'''
类型码
%s 字符串
%d 整数
%f 浮点数  %.1f保留一位小数 %.2f保留两位小数
'''

a = 1
b = 2
print("在这里我们打印ab的,a:"+str(a)+",b:"+str(b))#在这里我们打印ab的,a:1,b:2

# 字符串格式化
str1 = "在这里我们打印ab的值,a:%s,b:%s" % (str(a), str(b))
print(str1)#在这里我们打印ab的值,a:1,b:2

print("在这里我们打印ab的值,a:%s,b:%s" % (str(a), str(b)))#在这里我们打印ab的值,a:1,b:2
print("在这里我们打印ab的值,a:%d,b:%d" % (a,b))#在这里我们打印ab的值,a:1,b:2
print("在这里我们打印ab的值,a:%.1f,b:%.2f" % (10.55, 10.55))#在这里我们打印ab的值,a:10.6,b:10.55

1.4.4 格式化精度控制

我们可以使用辅助符号"m.n"来控制数据的宽度和精度

  • m,控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效
  • n,控制小数点精度,要求是数字,会进行小数的四舍五入

示例:

  1. %5d:表示将整数的宽度控制在5为,如果数字11,被设置5d,就会变成:【空格】【空格】
    【空格】11,用三个空格补足宽度
  2. %5.2f:表示将宽度控制为5,将小数点精度设置为2,小数点和小数部分也算入宽度计算。如,对11.345设置%7.2后,结果是【空格】【空格】11.35,2个空格补足宽度,小数部分限制2位精度,四舍五入为.35

1.4.5 字符串格式化方式2

通过语法:f"内容{变量}"的格式来快速格式化

a = 1
b = 2
print(f"在这里我们打印ab的值,a:{
     
     a},b:{
     
     b}" )#在这里我们打印ab的值,a:1,b:2

这种快速格式化的方法不限制类型,不进行精度控制,适合对精度没有要求的时候快速使用

1.5 运算符

1.5.1 算数运算符与赋值运算符

算数运算符:
在这里插入图片描述


**赋值运算符:** ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/89ce2dbd6d48423db5b6df90b4591cf0.png)
print('加法运算', 1 + 1)
print('减法运算', 2 - 1)
print('乘法运算', 2 * 3)
print('除法运算', 9 / 3)
print('取整运算', 9 // 4)
print('取余运算', 9 % 4)
print('幂运算', 3 ** 3)

print(9 // 4)  # 2
print(-9 // -4)  # 2
# 一正一负取整都是向下取整
print(-9 // 4)  # -3
print(9 // -4)  # -3


print(9 % 4)  # 1
print(-9 % -4)  # -1
print(-9 % 4)  # 3
print(9 % -4)  # -3


a = 10
a+=2
print(a)
a-=2
print(a)
a*=2
print(a)
a/=2
print(a)
a//2
print(a)
a%=4
print(a)
a*=2
print(a)

1.5.2 比较运算符与身份运算符

比较运算符:
在这里插入图片描述

我们可以通过比较运算符,计算得到布尔类型的结果


身份运算符:
在这里插入图片描述

'''
< > == <= >= 省略
'''

a=10
b=10
c=3
print(a==b) #True,说明a与b的value相等
print(a>c) #True
print(c>b) #False
print(a is b) #True,说明a与b的标识,相等

list1=[11,22,33]
list2=[11,22,33]
print(list1==list2) #True
print(list1 is list2) #False
print(list1 is not  list2) #True 这里的意思是list1与list2的id不相等,不相等为True

1.5.3 逻辑运算符

在这里插入图片描述

a, b = 1, 2
print(a == 1 and b == 2)#True
print(a == 1 and b < 2)#False
print(a != 1 and b == 2)#False
print(a == 1 or b == 1)#True

print(not a == 1)#False

1.5.4 成员运算符:

在这里插入图片描述

print('----------------in与not in------------')
s = "hello world"
print("h" in s)  # h 是否存在于变量s中 True
print("k" in s)#False

print("k" not in s)  # k 是否不存在于变量s中  True

1.5.5 位运算符

按位运算符是把数字看作二进制来进行计算的
在这里插入图片描述

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = 0
 
c = a & b;        # 12 = 0000 1100
print("1 - c 的值为:", c)
 
c = a | b;        # 61 = 0011 1101 
print("2 - c 的值为:", c)
 
c = a ^ b;        # 49 = 0011 0001
print("3 - c 的值为:", c)
 
c = ~a;           # -61 = 1100 0011
print("4 - c 的值为:", c)
 
c = a << 2;       # 240 = 1111 0000
print("5 - c 的值为:", c)
 
c = a >> 2;       # 15 = 0000 1111
print("6 - c 的值为:", c)

#输出结果
#1 - c 的值为: 12
#2 - c 的值为: 61
#3 - c 的值为: 49
#4 - c 的值为: -61
#5 - c 的值为: 240
#6 - c 的值为: 15

1.5.6 运算符优先级

在这里插入图片描述

1.6 数据输入

使用input()语句可以从键盘获取输入,使用一个变量结合搜input语句获取的键盘输入内容即可
注意点: 无论键盘输入什么类型的数据,获取道德数据永远都是字符串类型

present = input('大圣想要什么礼物呢?')
print(present, type(present))

a = input("请输入第一个数")
b = input("请输入第二个数")
print('a+b=',int(a)+int(b))

c = int(input("请输入第一个数"))
d = int(input("请输入第二个数"))
print('c+d=',c+d)

在这里插入图片描述

1.7 流程控制

1.7.1 分支结构

1.7.1.1 if、if else、if elif else语句

if语法:
if 要判断的条件:
        条件成立时要做的事情
在这里插入图片描述

if else 语句
在这里插入图片描述

在这里插入图片描述

if elif else语句
在这里插入图片描述

在这里插入图片描述

moeny = 1000
s = int(input('请输入取款金额'))

if moeny >= s:
    moeny -= s
    print('取款成功')
else:
    print('取款失败,余额不足')



'''-----------------多if-----------------------'''

s1 = int(input('请输入月份'))
if s1 > 0 and s1 <= 3:
    print("春天")
elif s1 > 3 and s1 <= 6:
    print('夏天')
elif s1 > 6 and s1 <= 9:
    print('秋天')
elif s1 > 9 and s1 <= 12:
    print("冬天")
else:
    print("不存在该月份")
1.7.1.2 if判读语句的嵌套

在这里插入图片描述

num1 =int(input("请输入会员积分"))
if num1>50:
    print('是会员')
    if num1>=200 :
        print("八折")
    else:
        if num1>100:
            print("9折")
        else:
            print("9.5折")
else:
    print('不是会员')

1.7.2 循环控制

1.7.2.1 while循环

在这里插入图片描述

while 判断条件(condition):
        执行语句(statements)……
执行过程如下:
在这里插入图片描述

while循环的注意事项:

  1. 条件需提供布尔类型结果,True继续,False停止
  2. 空格缩进不能忘
  3. 请规划好循环终止条件,否则将无限循环
a =10 #定义三角形的宽度和高度
while a>=1 :
    b =a
    while b>=1:
        print('*', end="")
        b-=1
    print('')
    a-=1

#  运行结果
# **********
# *********
# ********
# *******
# ******
# *****
# ****
# ***
# **
1.7.2.2 使用while嵌套循环打印九九乘法表
for a in range(1, 10):
    for b in range(1, 10):
        if b <= a:
            print(b, "x", a, "=", a * b, end="   ")
    print("")
1.7.2.3 for循环

在这里插入图片描述

#语法结构
for iterating_var in sequence:
   statements(s)

#示例
list1 =range(1,100)
for a in list1 :
    print(a)

sum = 0
for b in range(1,101) :
    sum+=b

print(sum)


fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print ('当前水果 : %s' % fruits[index])
 
print ("Good bye!")
#运行结果
#当前水果 : banana
#当前水果 : apple
#当前水果 : mango
#Good bye!
1.7.2.4 range

在这里插入图片描述

for循环语句,本质上是遍历:序列类型
语法:

  1. range(num),获取一个从0开始,到num结束的数字序列(不含num本身),如range(5),取得的数据室[0,1,2,3,4]
  2. range(num1,num2),获得一个从num1开始,到num2结束的数字序列(不含num2本身),如range(5,10),取得的数据室[5,6,7,8,9]
  3. range(num1,num2,step),获取一个从num1开始,到num2结束的数字序列(不含num2本身),数字之间的步长,以step为准(step默认为1),如range(5,10,2)取得的数据为:[5,7,9]

示例:

#range()的三种创建方式

'''第一种创建方式,只有一个参数'''
r =range(10) #默认从0开始,默认相邻两个数相差1,即步长为1
print(r)  #range(0, 10)
print(list(r))  #list可以用于查看range对象中的整数序列  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

'''第二种创建方式,给了两个参数,第一个是 起始位置 ,第二个为结束位置'''
r =range(1,10)
print(list(r)) #[1, 2, 3, 4, 5, 6, 7, 8, 9]

'''第三种创建方式,给了三个参数,起始位置、结束位置、步长'''
r =range(1,10,2)
print(list(r)) #[1, 3, 5, 7, 9]

#判断指定的整数在序列中是否存在
print(10 in r) #10不在当前的整数序列
print(9 in r) #9在当前的序列中
print(10 not in r) #10不在当前的整数序列
print(9  not in r) #9在当前的序列中

小练习:

# 练习:随机产生两个数字,计算其总和
# 一道题10分,总计30分,计算总成绩

import random
from turtle import st

successCount = 0  # 答对次数


for item in range(0, 3):
    print("第", item, "题")
    # 产生两个随机数
    num1 = random.randint(0, 100)
    num2 = random.randint(0, 100)
    inputNum = int(input('请输入 '+str(num1)+'+'+str(num2)+' 的结果'))
    if inputNum == num1+num2:
        print('恭喜你答对了')
        successCount+=1
    else:
        print('很遗憾,计算错误')

    print("")

print('您一共答对了 ', successCount, " 道题,总分:", successCount*10, "分")
1.7.2.5 break 语句

Python break语句,就像在C语言中,打破了最小封闭for或while循环。
break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。
break语句用在while和for循环中。
如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码。
在这里插入图片描述

示例:

for letter in 'Python':     # 第一个实例
   if letter == 'h':
      break
   print('当前字母 :', letter)
  
var = 10                    # 第二个实例
while var > 0:              
   print('当前变量值 :', var)
   var = var -1
   if var == 5:   # 当变量 var 等于 5 时退出循环
      break
 
print("Good bye!")

#运行结果:
#当前字母 : P
#当前字母 : y
#当前字母 : t
#当前变量值 : 10
#当前变量值 : 9
#当前变量值 : 8
#当前变量值 : 7
#当前变量值 : 6
#Good bye!

1.7.2.6 continue 语句

Python continue 语句跳出本次循环,而break跳出整个循环。
continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。
continue语句用在while和for循环中。
在这里插入图片描述

示例:

for letter in 'Python':     # 第一个实例
   if letter == 'h':
      continue
   print('当前字母 :', letter)
 
var = 10                    # 第二个实例
while var > 0:              
   var = var -1
   if var == 5:
      continue
   print('当前变量值 :', var)
print("Good bye!")

#运行结果
#当前字母 : P
#当前字母 : y
#当前字母 : t
#当前字母 : o
#当前字母 : n
#当前变量值 : 9
#当前变量值 : 8
#当前变量值 : 7
#当前变量值 : 6
#当前变量值 : 4
#当前变量值 : 3
#当前变量值 : 2
#当前变量值 : 1
#当前变量值 : 0
#Good bye!

1.8 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

1.8.1 定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
4.函数内容以冒号起始,并且缩进。
5.return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。


函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

如下实例调用了printme()函数:

# 定义函数
def printme( str ):
   "打印任何传入的字符串"
   print( str)
   return
 
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")

1.8.2 函数的参数传递

在 python 中,类型属于对象,变量是没有类型的:

a=[1,2,3]
a="Runoob"

以上代码中,[1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。

可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

::: tip
python 传不可变对象实例与传可变对象实例这点一定要区分清楚
:::
传不可变对象实例

def ChangeInt( a ):
    a = 10
 
b = 2
ChangeInt(b)
print b # 结果是 2

实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它。


传可变对象实例

# 可写函数说明
def changeme( mylist )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值