Python 实验五 高级数据结构

一、实验目的

(1)掌握序列的基本操作

(2)掌握集合、字典的基本操作

二、实验环境

联网计算机一台/每人,内装Windows 7以上操作系统和安装Python 3.7集成开发环境IDLE。

三、实验内容

Sy5-1

列表实现。编写一个函数,生成随机密码,要求: (1)密码长度不小于8位,不大于16位 (2)字符包括大小写字母和数字

Sy5-2

集合实例。删除5-1中生成的密码字符串中的重复字符,不改变原来的字符串顺序。

Sy5-3

字典实例。输入一段中英文字符串,统计每个字符出现的次数。

拓展1

数字重复统计。

(1)随机生成1000个整数

(2)数字范围[20,100]

(3)升序输出所有不同的数字及每个数字重复的次数。

拓展2

输入一段英文字符串,将其按照手机上的9键输入规则转换位相应的数字,即abc-2,def-3,ghi-4,jkl-5,mno-6,pqrs-7,tuv-8,wxyz-9

四、实验步骤与结果

1. 新建文件夹并命名为学号-姓名-实验五。

2. 安装 Python 解释器Python 3.7 集成开发环境IDLE,并进入IDLE。

3. 依次输入自己编好的程序实验内容1-7的源程序,分别命名为sy5_1.py - sy5_5.py 并保存至已建好的文件夹中。

4. 检查已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。

5. 运行程序并分析运行结果是否合理。在运行时要注意当输入不同的数据时所得结果是否正确,应测试两组以上数据,分别检查在不同情况下结果是否正确。

列出1-5题源程序清单并记录上机运行结果。

Sy5-1

列表实现。编写一个函数,生成随机密码,要求: (1)密码长度不小于8位,不大于16位 (2)字符包括大小写字母和数字

def passwordstr():
    import random
    #产生数字字符的ascii码列表
    numbers=list(range(48,58))          #48是字符'0'的ascii码
    #产生小写字符的ascii码列表
    letters_low=list(range(65,65+26))   #65是字符'A'的ascii码
    #产生大写字符的ascii码列表
    letters_upper=list(range(97,97+26)) #97是字符'a'的ascii码
    digits=random.randint(8,16)         #随机产生密码的位数

    print("位数:"+str(digits))
    s=''
    s1=0                                #保存随机的ascii码
    for i in range(1,digits+1):
        type=random.randint(1,4)
        if(type==1):
            s1=numbers[random.randint(0,9)]
        elif (type==2):
            s1=letters_low[random.randint(0,25)]
        elif (type==3):
            s1=letters_upper[random.randint(0,25)]
        #print("ascii:"+str(s1))
        s=s+chr(s1)
    print(s)

passwordstr()

Sy5-2

集合实例。删除5-1中生成的密码字符串中的重复字符,不改变原来的字符串顺序。

def passwordstr():
    import random
    #产生数字字符的ascii码列表
    numbers=list(range(48,58))          #48是字符'0'的ascii码
    #产生小写字符的ascii码列表
    letters_low=list(range(65,65+26))   #65是字符'A'的ascii码
    #产生大写字符的ascii码列表
    letters_upper=list(range(97,97+26)) #97是字符'a'的ascii码
    digits=random.randint(8,16)         #随机产生密码的位数

    print("位数:"+str(digits))
    s=''
    s1=0                                #保存随机的ascii码
    for i in range(1,digits+1):
        type=random.randint(1,4)
        if(type==1):
            s1=numbers[random.randint(0,9)]
        elif (type==2):
            s1=letters_low[random.randint(0,25)]
        elif (type==3):
            s1=letters_upper[random.randint(0,25)]
        #print("ascii:"+str(s1))
        s=s+chr(s1)
    print(s)
    return s

psStr=passwordstr()
print(psStr)
L1=list(psStr)         #转换为列表
L2=list(set(L1))       #使用集合去重之后重新生成列表
L2.sort(key=L1.index)  #按照原来字符串顺序排序
a=''.join(L2)
print(a)

Sy5-3

字典实例。输入一段中英文字符串,统计每个字符出现的次数。

dict={}
name = input()   #输入英文字符串
for letter in name:
    dict[letter]=dict.get(letter,0)+1

for i in dict:
    print("{0}({1}),".format(i,dict.get(i)),end='')

五、总结

1. 实验过程中的问题及解决方法:

  • 在生成随机密码时,可能遇到随机字符生成的范围和数量控制问题。通过使用随机数生成函数结合字符范围的设定,以及循环控制密码长度,解决了密码长度和字符类型的问题。
  • 在处理集合删除重复字符时,可能对集合的特性和操作不够熟悉。通过深入理解集合的元素唯一性特点,正确运用集合的操作方法,成功去除重复字符。
  • 在统计字符出现次数时,可能在字典的更新和数据处理上出现逻辑错误。通过仔细设计字典的键值对应关系和循环逻辑,确保了统计结果的准确性。

2. 实验收获

  • 熟练掌握了列表的操作和应用,能够灵活运用列表生成满足特定条件的数据。
  • 深入理解了集合的特性和用途,学会利用集合的唯一性来处理数据。
  • 掌握了字典的数据结构和使用方法,能够有效地进行数据的统计和分析。
  • 提升了对高级数据结构的综合运用能力,能够根据不同的需求选择合适的数据结构来解决问题。
  • 增强了问题解决的能力,在遇到数据处理和逻辑实现上的困难时,能够通过调试和查阅资料找到解决方案。
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值