Python基础学习

news/2024/4/29 7:25:37/文章来源:https://blog.csdn.net/m0_58022371/article/details/126798465

文章目录

    • 1.1变量与运算符
      • 案例一:变量与运算符
    • 1.2选择结构与循环结构实训
      • 案例一:使用for循环输出满足条件的内容
      • 案例二:使用while循环
    • 1.3数据结构实战
      • 案例一:列表
      • 案例二:元组
      • 案例三:字典
      • 案例四:集合
    • 1.4函数实训
      • 案例一:斐波那契数列计算
    • 1.5文件处理I/O操作实训

1.1变量与运算符

案例一:变量与运算符

根据以下题目进行练习,将结果写入桌面文件test.py中(自行创建)

1.定义一个变量x,对其赋值为3,查看变量类型
2.对实数3和5进行相加、相乘。
3.创建一个列表[3,6,9],访问列表第1个元素。
4.对列表[1, 2, 3] 、[4, 5, 6]进行连接。
5.对集合{1, 2, 3}、{3, 2, 1} 进行比较,测试是否相等。

  • 通过=可以为变量赋值
  • type()函数查看变量类型
  • 使用+、-、*、/进行变量间的运算
  • 列表元素查看可以通过列表的索引,使用“+”号进行列表连接
  • 使用==符号可以判断内容是否相等
#测试1&2
#查看数据类型
x=3
y=5
z=x+y
a1=x*y 
type(a1)   #测试3
#创建一个列表
#输出列表第一个元素
list=[1,2,3,4,5,6]  
list[0]             #测试4
#连接两个链表
list1=[1,2,3,4,5,6]
list2=[7,8,9,10]
list1.extend(list2) 
list1+list2#测试5:测试集合中元素是否相等
set1={1,2,3}
set2={1,3,2}
set1==set2
#true

1.2选择结构与循环结构实训

案例一:使用for循环输出满足条件的内容

编写程序,使用for循环输出50~99之间能被3整除但不能同时被5整除的所有整数。

for i in range(1, 51):if i % 3 == 0 and i % 5 != 0:print(i)

案例二:使用while循环

编写程序,使用while循环输出50~99之间能被3整除但不能同时被5整除的所有整数。

i=50
while i<=99:if i % 3 == 0 and i % 5 != 0:print(i)i+=1

1.3数据结构实战

案例一:列表

  列表(list)是最重要的Python内置对象之一,是包含若干元素的有序连续内存空间。

  在形式上,列表的所有元素放在一对方括号[]中,相邻元素之间使用逗号分隔。

  在Python中,同一个列表中元素的数据类型可以各不相同,可以同时包含整数、实数、字符串等基本类型的元素,也可以包含列表、元组、字典、集合、函数以及其他任意对象。

  如果只有一对方括号而没有任何元素则表示空列表。
任务说明:

1.使用列表推导式查找列表中最大元素的所有位置

代码编写:

#生成20个介于[1, 10]的整数
x = [randint(1, 10) for i in range(20)]#上面的一行代码相当于
for i in range(20):print(randint(1,10))#最大整数出现的位置
m = max(x)
[index for index, value in enumerate(x) if value == m]

**任务说明:**在列表推导式中同时遍历多个列表或可迭代对象。

代码编写:

#第一种实现方式
[(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]#第二种实现方式
result=[]
for x in [1,2,3]:for y in[3,1,4]:if x!=y:result.append((x,y))
result

案例二:元组

  元组可以看作列表的简化版本,和列表的本质区别在于元组不可变
  从形式上,元组的所有元素放在一对圆括号中,元素之间使用逗号分隔,如果元组中只有一个元素则必须在最后增加一个逗号

任务说明:元组的创建与元素访问

代码编写:

>>>x = (1, 2, 3)       #直接把元组赋值给一个变量
>>>type(x)             #使用type()函数查看变量类型
<class  'tuple'>>>>x[0]                #元组支持使用下标访问特定位置的元素
1>>>x[-1]               #最后一个元素,元组也支持双向索引
3>>>x = (3)             #这和x = 3是一样的
>>>x
3>>> x = (3,)           #如果元组中只有一个元素,必须在后面多写一个逗号>>>x
(3,)>>>x = ()             #空元组
>>> x = tuple()        #空元组
>>> tuple(range(5))    #将其他迭代对象转换为元组
(0, 1, 2, 3, 4)

任务说明:很多内置函数的返回值也是包含了若干元组的可迭代对象,例如enumerate()、zip()等等

代码编写:

>>> list(enumerate(range(5)))
[(0, 0), (1, 1), (2, 2), (3, 3),(4, 4)]>>> list(zip(range(3), 'abcdefg'))
[(0, 'a'), (1, 'b'), (2, 'c')]

任务说明:使用生成器对象__next__()方法或内置函数next()进行遍历

代码编写:

>>> g = ((i+2)**2 for i in range(10))  #创建生成器对象
>>> g
<generator object <genexpr> at 0x0000000003095200>>>> tuple(g)                           #将生成器对象转换为元组
(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)>>> list(g)             #生成器对象已遍历结束,没有元素了
[] >>> g = ((i+2)**2 for i in range(10))  #重新创建生成器对象
>>> g.__next__()        #使用生成器对象的__next__()方法获取元素
4>>> g.__next__()        #获取下一个元素
9>>> next(g)             #使用函数next()获取生成器对象中的元素
16

任务说明:使用for循环直接迭代生成器对象中的元素

代码编写:

g = ((i+2)**2 for i in range(10))
for item in g:               
#使用循环直接遍历生成器对象中的元素print(item, end=' ')#4 9 16 25 36 49 64 81 100 121

案例三:字典

​   字典(dictionary)是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含用冒号分隔开的“键”和“值”两部分,表示一种映射或对应关系,也称关联数组。定义字典时,每个元素的“键”和“值”之间用冒号分隔,不同元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。
​   字典中元素的“键”可以是Python中任意不可变数据,例如整数、实数、复数、字符串、元组等类型等可哈希数据,但不能使用列表、集合、字典或其他可变类型作为字典的“键”
字典中的**“键”不允许重复,“值”是可以重复的。**

任务说明:定义字典

代码编写:

>>> x = dict() # 空字典
>>> type(x)    # 查看对象类型
>>> <class 'dict'>
>>> x = {}     # 空字典

任务说明:创建字典

代码编写:

>>> aDict = {'server':'db.diveintopython3.org', 'database':'mysql'}
>>> aDict
{'server': 'db.diveintopython3.org', 'database': 'mysql'}

字典中内容没有顺序,所以查看字典内容时顺序可能不同

#使用内置类dict以不同形式创建字典
keys = ['a','b','c','d']
values = [1, 2, 3, 4]
dictionary = dict(zip(keys, values)) # 根据已有数据创建字典
dictionaryd = dict(name='Dong', age=39) # 以关键参数的形式创建字典
daDict = dict.fromkeys(['name','age','sex']) # 以给定内容为“键”,创建“值”为空的字典
aDict

任务说明:使用“键”访问字典元素的“值”

代码编写:

aDict = {'age':39,'score':[98,97],'name':'Dong','sex':'male'}
aDict['age'] # 指定的“键”存在,返回对应的“值”
39aDict['address'] # 指定的“键”不存在,抛出异常
KeyError: 'address'

案例四:集合

​   集合(set)属于Python无序可变序列,使用一对大括号作为定界符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复
​   集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。

任务说明:创建集合

代码编写:

>>> a = {3,5} # 创建集合对象
>>> a_set = set(range(8,14)) # 把range对象转换为集合
>>> a_set
{8, 9, 10, 11, 12, 13}
>>> b_set = set([0,1,2,3,0,1,2,3,7,8]) # 转换时自动去掉重复元素
>>> b_set
{0, 1, 2, 3, 7, 8}
>>> x = set() # 空集合

任务说明:想集合中添加元素

代码编写:

>>> s = {1,2,3}
>>> s.add(3) # 添加元素,重复元素自动忽略
>>> s
{1, 2, 3}
>>> s.update({3,4}) # 更新当前集合,自动忽略重复的元素
>>> s
{1, 2, 3, 4}

1.4函数实训

案例一:斐波那契数列计算

任务说明:

  1. 结合生成器函数yield和while循环实现15项斐波那契数的计算。
  2. 通过__next__() 方法获取内容,使用print方法将每一项之间通过空格隔开,不换行展示。
  3. 将代码实现的过程存储到sequences.py文件中,将代码文件保存在“/home/qingjiao/Desktop”目录中。

学习相关知识点

  • yield语句与return语句的作用相似,都是用来从函数中返回值。
  • 每次执行到yield语句并返回一个值之后会暂停或挂起后面代码的执行
  • 可以通过生成器对象的__next__()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时恢复执行。
  • print()函数中,使用“end = ’ ’ ” 可以设置输出的多个内容在同一行展示,而且每个内容通过空格隔开。

代码编写:

def Fab(n):"""使用yield来返回值;用非递归来实现斐波那契数列,使用yield来返回值,"""a, b, m = 0, 1, 0i = 1while m < n:yield ba, b, m = b, a+b, m+1i += 1t = Fab(15)
num = 1
for i in t:print(i,end=" ")num += 1

1.5文件处理I/O操作实训

任务说明:向文本文件中写入内容,然后再读出。

s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n'
with open('sample.txt', 'w') as fp: #默认使用cp936编码fp.write(s)with open('sample.txt') as fp: #默认使用cp936编码print(fp.read())#运行结果
Hello world
文本文件的读取方法
文本文件的写入方法

任务说明:遍历并输出文本文件的所有行内容。

with open('sample.txt') as fp: #假设文件采用CP936编码for line in fp:            #文件对象可以直接迭代print(line)#运行结果
Hello world文本文件的读取方法文本文件的写入方法

  任务说明:假设文件data.txt中有若干整数,每行一个整数,编写程序读取所有整数,将其按降 序排序后再写入文本文件data_asc.txt中。

s = '23\n24\n50\n243\n546\n234\n'
with open('date.txt','w')as we:we.write(s)
data = [int(item) for item in data]      #列表推导式,转换为数字
data.sort(reverse=True)                  #降序排序
data = [str(item)+'\n' for item in data] #将结果转换为字符串
with open('data_desc.txt', 'w') as fp:   #将结果写入文件qwer = fp.writelines(date)

任务说明:统计文本文件中最长行的长度和该行的内容。

with open('sample.txt') as fp:result = [0, '']for line in fp:t = len(line)if t > result[0]:result = [t, line]
print(result)

任务说明:使用pick模块写入二进制文件。

import  picklei = 13000000
a = 99.056
s = '中国人民 123abc'
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
tu = (-5, 10, 8)
coll = {4, 5, 6}
dic = {'a':'apple', 'b':'banana', 'g':'grape', 'o':'orange'}
data = (i, a, s, lst, tu, coll, dic)
with open('sample_pickle.dat', 'wb') as f:try: pickle.dump(len(data), f)         #要序列化的对象个数for item in data:pickle.dump(item, f)         #序列化数据并写入文件except:print('写文件异常')

任务说明:使用pickle模块读上例中二进制文件的内容。

import pickle
with open('sample_pickle.dat', 'rb') as f:n = pickle.load(f)                     #读出文件中的数据个数for i in range(n):x = pickle.load(f)                   #读取并反序列化每个数据print(x)

任务说明:使用struct模块写入二进制文件。

import structn = 1300000000
x = 96.45
b = True
s = 'a1@中国'
sn = struct.pack('if?', n, x, b)  #序列化,i表示整数,f表示实数,?表示逻辑值
with open('sample_struct.dat', 'wb') as f:f.write(sn)f.write(s.encode())

任务说明:使用struct模块读取上例中二进制文件的内容

import structwith open('sample_struct.dat', 'rb') as f:sn = f.read(9)n, x, b1 = struct.unpack('if?', sn)   #使用指定格式反序列化print('n=',n, 'x=',x, 'b1=',b1)s = f.read(9).decode()print('s=', s)

任务说明:使用扩展库openpyxl读写Excel 2007以及更高版本的文件

import openpyxl
from openpyxl import Workbookfn = r'test.xlsx'                                #文件名
wb = Workbook()                                  #创建工作簿
ws = wb.create_sheet(title='你好,世界')          #创建工作表
ws['A1'] = '这是第一个单元格'                      #单元格赋值
ws['B1'] = 3.1415926
wb.save(fn)                                      #保存Excel文件
wb = openpyxl.load_workbook(fn)                  #打开已有的Excel文件
ws = wb.worksheets[1]                            #打开指定索引的工作表
print(ws['A1'].value)                            #读取并输出指定单元格的值
ws.append([1,2,3,4,5])                           #添加一行数据
ws.merge_cells('F2:F3')                          #合并单元格
ws['F2'] = "=sum(A2:E2)"                         #写入公式
for r in range(10,15):for c in range(3,8):ws.cell(row=r, column=c, value=r*c)       #写入单元格数据
wb.save(fn)

  任务说明:把记事本文件test.txt转换成Excel 2007+文件。假设test.txt文件中第一行为表头,从第二行开始是实际数据,并且表头和数据行中的不同字段信息都是用逗号分隔。

def main(txtFileName):new_XlsxFileName = txtFileName[:-3] + 'xlsx'wb = Workbook()ws = wb.worksheets[0]with open(txtFileName) as fp:for line in fp:line = line.strip().split(',')ws.append(line)wb.save(new_XlsxFileName)
main('test.txt')

任务说明:输出Excel文件中单元格中公式计算结果

import openpyxl
#打开Excel文件
wb = openpyxl.load_workbook('data.xlsx', data_only=True)#获取WorkSheet
ws = wb.worksheets[1]#遍历Excel文件所有行,假设下标为3的列中是公式
for row in ws.rows:print(row[3].value)

在这里插入图片描述

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

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

相关文章

《高级C/C++编译技术》01

Linux程序内存布局:启动程序的默认加载点是在链接阶段才添加的,通常放在程序内存映射的起始处(这是可执行文件和动态库之间的唯一区别)。启动代码有两种不同方式:crt0:“纯粹”的入口点,这是程序代码的第一部分,在内核控制下执行 crt1:更现代化的启动例程,可以在main…

某银行开发一个信用卡管理系统CCMS

38&#xff0e;现准备为某银行开发一个信用卡管理系统CCMS&#xff0c;该系统的基本功能为&#xff1a; (1)信用卡申请&#xff1a;非信用卡客户填写信用卡审请表&#xff0c;说明所要申请的信用卡类型及申 请者的蒸本信息&#xff0c;并提交给CCMS。如果信用卡申请者被…

Day08__异常

异常 Error和Exception捕获和抛出异常package exception;public class Demo01 {public static void main(String[] args) {int a=1;int b=0;//Ctrl+Alt+ttry {//try监控区域System.out.println(a/b);}catch (ArithmeticException e){//捕获异常System.out.println("除数不…

JAVA基础知识

JAVA基础知识目录IDEA快捷键简洁语法CtrlAltShift操作其他常用操作JAVA基础知识注释字面量变量数据类型关键字标识符类型转换自动类型转换表达式的自动类型转换强制类型转换运算符算数运算符符号做连接符自增自减运算符关系运算符和逻辑运算符三元运算符运算符优先级数组数组的…

Code For Better 谷歌开发者之声——Flutter - Google 开源的移动 UI 框架

写在前面 如今&#xff0c;人们都希望自己手机里的应用又漂亮的设计&#xff0c;顺滑的动画以及优异的功能&#xff0c;为了做到这些&#xff0c;开发者们需要在不妥协质量和性能的前提下&#xff0c;更快速地推进新功能的研发&#xff0c;这就是Flutter的核心。 文章目录写在前…

【转】VS2019 安装完成之后再安装其它功能模块组件安装

VisualStudio2019安装完成之后,由于开发需求需要安装其它模块或组件,点击工具,选择获取工具和功能,进行选择安装。 做个笔记随笔记录一下。选择需要的模块进行即可。【转自】https://www.cnblogs.com/jiayan1578/p/13665423.html

网络抖动了解

转自:https://blog.csdn.net/W_317/article/details/112801222, https://zhuanlan.zhihu.com/p/403614008 1.网络抖动 指网络中的延迟是指信息从发送到接收经过的延迟时间,一般由传输延迟及处理延迟组成; 抖动=最大延迟-最小延迟 如访问一个网站的最大延迟是20毫秒,最小延迟…

【转载】预测算法--时间序列(ARIMA)模型

ARIMA:AutoregressiveIntegratedMovingAverage model。自回归差分移动平均模型(p,d,q),可以说AR自回归模型,MA移动平均模型,ARMA自回归移动平均模型都是ARIMA的特殊形式. 时间序列模型一般性步骤包括:1. 数据平稳性检验;2. 确定模型参数;3. 构建时间序列模型;4.模型预测…

STM32二十:OLED和LCD

一.概述 1.OLED介绍 1 //OLED的显存2 //存放格式如下.3 //[0]0 1 2 3 ... 127 4 //[1]0 1 2 3 ... 127 5 //[2]0 1 2 3 ... 127 6 //[3]0 1 2 3 ... 127 7 //[4]0 1 2 3 ... 127 8 //[5]0 1 2 3 ... 127 9 //[6]0 1 2 3 ... 127 10 //[7]0 1 2 3 ... 127 …

一.xv6环境搭建

内容大致来源:1.视频教程:https://space.bilibili.com/16765968/channel/collectiondetail?sid=86878 2.文档:https://tarplkpqsm.feishu.cn/docs/doccnoBgv1TQlj4ZtVnP0hNRETd#W8iZmH一.windows升级为专业版注意:docker支持Windows 10 操作系统专业版,所以要升级windows…

【ASP.NET Core】自定义Session的存储方式

在开始今天的表演之前,老周先跟大伙伴们说一句:“中秋节快乐”。 今天咱们来聊一下如何自己动手,实现会话(Session)的存储方式。默认是存放在分布式内存中。由于HTTP消息是无状态的,所以,为了让服务器能记住用户的一些信息,就用到了会话。但会话数据毕竟是临时性的,不…

MySQL-3-多表查询和事务(结合案例学习)

我们之前在讲解SQL语句的时候&#xff0c;讲解了DQL语句&#xff0c;也就是数据查询语句&#xff0c;但是之前讲解的查询都是单表查询&#xff0c;而本章节我们要学习的则是多表查询操作&#xff0c;主要从以下几个方面进行讲解。 多表查询多表查询多表关系分类连接查询内连接隐…

【数据结构】绪论

文章目录 1. 绪论 1.1 概述 1.2 数据与数据结构 1.2.1 术语 1.2.2 逻辑结构 1.2.3 存储结构&#xff1a; 1.2.4 数据操作&#xff1a; 1.3 算法 1.3.1 算法特性 1.3.2 算法目标 1.3.3 算法分析&#xff1a;概述 1.3.4 算法分析&#xff1a;时间复杂度&#xff08;大…

Markdown笔记软件之 Obsidian

我使用过什么markdown笔记软件了解自己的需求 Markdown 语法简洁vscode内置 markdown 插件,预览等 snippet(摘要功能)自定义代码片段typero实时渲染,所见即所得 美观缺点不适合我个人 收费 不支持打标签 tag 放弃:解决不了我的痛点(全键盘),收费 不支持移动端joplin支持 v…

模拟用户登录功能的实现以及演示SQL注入现象

模拟用户登录功能的实现以及演示SQL注入现象 /* 实现功能&#xff1a;1、需求&#xff1a;模拟用户登录功能的实现。2、业务描述&#xff1a;程序运行的时候&#xff0c;提供一个输入的入口&#xff0c;可以让用户输入用户名和密码用户输入用户名和密码之后&#xff0c;提交信息…

Day07__面向对象

面向对象 什么是面向对象回顾方法的定义 package objectOriented;import java.io.IOException;//回顾方法的定义 public class Demo01 {public static void main(String[] args) {}public static String sayHello(){return "Hello,World!";}public int max(int a,int…

Deno 会取代NodeJS吗?

目标:了解Deno的学习价值和前景。 从下面几个维度进行分析 成熟度 Node已经在大量商业应用中,Deno只是还在商业试验阶段 生态 Node已经有丰富的生态,包含各种框架和库,并且都已经广泛应用Deno的框架和库基本上都是刚刚起步 学习成本 如果你已经了解Node,Deno也还是需要不…

基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)

目录 1 蜜蜂优化算法 1.1 蜂群觅食机制 1.2 蜜蜂算法 1.3 流程 2 经济调度 3 运行结果 4 Matlab代码及文章 5 参考文献 6 写在最后 1 蜜蜂优化算法 蜜蜂算法( Bees Algorithm&#xff0c;BA) 由英国学者 AfshinGhanbarzadeh 和他的研究小组于 2005 年提出。该算法是一…

element table 列头和行高调整

1、行高调整<el-table :row-style="{height:0}"></el-table>2、列头高度调整<el-table :header-cell-style="{padding:0}" :row-style="{height:0}"></el-table>

都这麽大了还不了解防火墙?

目录 一、思考 二、实验 三、过程 1、实验拓扑 2、cloud-IO配置 3、防火墙配置 3.1 登录防火墙 4、区域划分 方法一 方法二 4.1 内网划分 4.2 各区域网关 4.3 区域配置 5、防火墙策略 5.1 允许-回程路由&#xff08;内网~外网&#xff09; 5.2 禁止-新建策略…