目录

  • 1 前言
    • 1.1  Python解释器安装
    • 1.2  PyCharm开发环境
  • 2 Python程序设计实验
    • 2.1  实验1 基本输入输出
    • 2.2  实验2 基本运算
    • 2.3  实验3 字符串处理
    • 2.4  实验4 列表与元组应用
    • 2.5  实验5 列表与元组应用
    • 2.6  实验6 字典与集合应用
    • 2.7  实验7 函数应用1
    • 2.8  实验8 函数应用2
    • 2.9  实验9 类的创建与应用
    • 2.10  实验10 模块应用
    • 2.11  实验11 文件操作
    • 2.12  实验12 异常处理
    • 2.13  实验13 使用正则表达式
    • 2.14  实验14 tkinter基础应用
  • 3 学习参考
    • 3.1  1 Python及其IDLE环境
    • 3.2  2 Python代码规范
    • 3.3  3 使用变量
    • 3.4  4 输入输出
    • 3.5  5 运算符
    • 3.6  6 字符串
    • 3.7  7 条件语句
    • 3.8  8 循环语句
    • 3.9  9 列表
    • 3.10  10 元组
    • 3.11  11 字典
    • 3.12  12 集合
    • 3.13  13 自定义函数
    • 3.14  14 内置函数
    • 3.15  15 类的创建和使用
    • 3.16  16 类的继承与多态
    • 3.17  17 time模块
    • 3.18  18 os模块
    • 3.19  19 random模块
    • 3.20  20 文件
    • 3.21  21 错误与异常处理
 实验5 列表与元组应用

    列表是最常用的Python数据类型。列表的数据项不需要具有相同的类型。

    元组与列表类似,不同之处在于元组的元素不能修改,没有append、insert这样的方法。不可变的元组有什么意义?因为元组不可变,所以代码更安全。如果可能,能用元组代替列表,就尽量用元组。

    元组使用小括号(),列表使用中括号[  ]。集合使用大括号{ }。


任务1:价格选择与排序

1、阅读理解、调试以下代码,程序保存到s5A.py

2、按以下要求修改代码,程序保存到s5B.py

(1)p的元素为二元元组。将每个元组的第1个元素与第2元素互换。

(2)程序运行效果不变。

p=[(399,"R18"), (4369,"T32"), (539,"T16"),(288,"S09"), (109,"S92"), (749,"R07"), (235,"U42"), (190,"T90"), (99,"S56"), (1000,"U80"), (1760,"R72"), (4210,"U92")]

m=int(input("输入最大价格:"))

n=int(input("输入最小价格:"))

p=[x for x in p if n<=x[0]<=m]

p.sort(reverse=True)

for x in p:

    print(x[1],x[0],sep="-",end=" ")

"""

(1)推导式生成列表

  [ 生成元素的表达式  for  迭代变量  in  可迭代对象  if  条件 ]

  除去[if 条件] 部分,其余各部分的含义以及执行顺序和for循环是完全一样的(表达式就是for循环中的循环体)。

  可以这样认为,推导式只是对for循环语句的格式做了一下简单的变形,并用 [ ] 括起来。不同之处在于,列表推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。

 如果修改为:

   ( 生成元素的表达式  for  迭代变量  in  可迭代对象  if  条件 )

       推导式生成的结果,数据类型为生成器generator,而非元组tuple。

>>>a=[x for x in range(6)]

>>>print(a)

  [0, 1, 2, 3, 4, 5]

  """

  a=[x for x in range(6)]   等效于:

  a=[ ]     #创建空列表

  for x in range(6):

    a.append(x)   #将生成元素表达式的值,添加到列表末尾

"""

>>>b=[3*x for x in a]    #生成元素表达式 为: 3*x

>>>print(b)

  [0, 3, 6, 9, 12, 15]

  """

  b=[3*x for x in a]  等效于:

  b=[ ]

  for x in a:

    b.append(3*x)

"""

>>>a=["How","are","you"]

>>>b=[y for y in a if 'o' in y]    #if  条件为:if 'o' in y

>>>b

  ['How', 'you']

  """

  添加if条件语句,只迭代符合条件的元素

  b=[y for y in a if 'o' in y]    等效于:

  b=[ ]

  for y in a:

    if 'o' in y:

      b.append(y)

(2)嵌套列表(教材P51)

    列表可以存储任何元素,也可以存储列表,还可以存储其他序列。

    若希望访问嵌套的内层序列中的元素,需要先使用索引获取内层序列,再使用索引访问内层序列中的元素。例如:

>>>p=[("R18",399),("T32",4369),("T16",539)]

>>>p[1]    #列表中索引为1的元素,嵌套的元组

  ('T32', 4369)

>>>p[1][0]   #列表中索引为1,嵌套元组索引为0的元素

  'T32'

>>>p[1][1]

  4369

"""①

   p=[x for x in p if n<=x[1]<=m]  等效于:

   t=[ ]

   for x in p:

      if n<=x[1]<=m:

         t.append(x)

   p=t

   这里,生成元素的表达式x,数据类型是元组。

"""②

   p=[x[0] for x in p if n<=x[1]<=m]  等效于:

   t=[ ]

   for x in p:

     if n<=x[1]<=m:

       t.append(x[0])

   p=t

   这里,生成元素的表达式x[0],数据类型是字符串。

"""③

   p=[ (x[1],x[0]) for x in p if n<=x[1]<=m] 等效于:

   t=[ ]

   for x in p:

     if n<=x[1]<=m:

       t.append((x[1],x[0]))

   p=t

   这里,生成元素的表达式(x[1],x[0]),数据类型是由括号()重新组成的元组。

   生成元素的表达式,修改为[x[1],x[0]],可不可以??可以。列表和元组元素的访问方式相同,都是通过索引或切片。


任务2:计算序列的平均值

下面代码的作用是:输入不少于6个的整数,删除一个最小值、一个最大值,输出余下整数的平均值。

1、理解程序的处理方法,调试并保存到s5C.py。

2、不使用sorted函数,利用max函数和min函数求解。程序保存到s5D.py。

s=input("输入用','分隔的整数序列:")

s=eval(s)  #将输入的整数串转换为元组

n=len(s)   #得到整数个数

if n<6:print("ERROR")

else:

    s=sorted(s) #对元组s递增排序,得到列表s

    s=sum(s[1:-1])/(n-2) #对s首末外的元素求和后计算平均值

    print(f"{ s:.2f }") #四舍五入保留到小数点后2位输出s的值

"""

(1)len( )函数

    len(object)

    返回字符串、列表、元组、字典、集合等对象的长度或元素个数。

>>> s = "hello word" 

>>> len(s)     #计算字符串的长度

  10

>>> s= ['Java','Python','PHP']

>>> len(s)     #计算列表的元素个数

   3

>>> t=('hello', 100, 'Python',True)

>>> len(t)     #计算元组元素个数

   4

>>> d={'name':'小明', 'age':21, 'addr':"北京"}

>>> len(d)    #计算字典总长度(即键值对总数)

   3

(2)max( )函数

    max(interalbe,key)

    max(arg1,arg2,...,key)

    返回给定参数的最大值。只有一个参数时,参数必须为可迭代对象。

>>> max(2,14,9,11)    #多个数值型参数,取最大值

   14

>>> a=[2,14,9,11]

>>> max(a)           #参数为列表a

   14

>>> a=(2,14,9,11)

>>> max(a)          #参数为元组

   14

>>> a="How are you"

>>> max(a)          #参数为字符串,取排序靠后者

   'y'     

>>> a=("000","12","34","56","78","9")

>>> max(a)    #字符比较,默认逐字符比较

   '9'

>>> a=("000","12","34","56","78","9")

>>> max(a,key=len)

   '000'      #key=len,指定按长度比较

>>> a=("000","12","34","56","78","9")

>>> max(a,key=int)

   '78'       #key=int,指定转化为整数后比较

(3)sum( )函数

    sum(iterable[,start])

    对序列(如列表、元组、集合)进行求和计算。

>>> sum(1,2,3)

   TypeError      #出错,参数不正确

>>> sum([1,2,3])   #列表求和

   6

>>> sum((1,2,3))   #元组求和

   6

>>> sum({1,2,3})   #集合求和

   6

>>>sum([1,2,3],1)   #1是指定相加的参数start,默认为0。和切片中的start不一样!

   7

   题目中,sum(s[1:-1])等效于:sum(s)-s[0]-s[-1],s[0]为最前面的元素,s[-1]为最后的元素。


附加练习:

根据注释将代码补充完整。

s=input("输入逗号分隔的整数串:" )   #输入一个由逗号分隔的整数串s

a=______     #将字符串分割,转换为列表a

n= ______    #得到列表的元素个数n。

b=( ______  for i in range(n) if a[i] not in a[i+1:] )   #生成无重复元素的元组b

c= ______     #对元组b递减排序,生成列表c

print(",".join(c))    #将列表c的元素,连成字符串输出

程序运行结果:

输入逗号分隔的整数串:11,22,33,22,20,22,44,55

  55,44,33,22,20,11