实验三 Python组合数据类型

1. 创建列表以列表 list1 = ["life", "is", "short"] 和 list2 = ["You", "need", "python"],并完成以下任务:

(1)输出 list1 中的第一个元素 life 及其索引(下标)。

(2)在 short 后面增加一个!

list1 = ["life", "is", "short"]
list2 = ["You", "need", "python"]
print(list1[0], '下标:', list1.index('life'))
list1.append('!')
print(list1)

2. 编写程序,将列表 s=[9,7,8,3,2,1,5,6]中的偶数变成它的平方,奇数保持不变。

其运行效果如下图所示。

提示:可以利用“if(s[i]%2==0”的语句形式判断列表中的第 i 个元素是否为偶数。

s = [9, 7, 8, 3, 2, 1, 5, 6]
for i in range(len(s)):
    if s[i] % 2 == 0:
        s[i] = s[i] * s[i]
print(s)

3. 分别使用 if 和 while 语句删除将列表 x = [1,2,1,2,1,1,1]中的元素“1” 全部删除。

x = [1, 2, 1, 2, 1, 1, 1]
print('x=', x)
y = x[:]  # 在y列表中操作而非x
for i in y:
    if i == 1:
        x.remove(i)
print('   if语句:', x)

x = [1, 2, 1, 2, 1, 1, 1]
while 1 in x:
    x.remove(1)
print('while语句:', x)

4. 编写程序,删除一个 list 里面的重复元素,即所有元素不重复。

提示:可以利用 s. append(x)方法把对象 x 追加到列表 s 的尾部。

list = eval(input('请输入列表:'))
s = set(list)  # 通过创建集合,去重
print('方法一:', s)

s = []
for i in range(len(list)):
    if list[i] not in s:
        s.append(list[i])
print('方法二:', s)

5. (选做)统计所输入字符串中单词的个数,单词之间用空格分隔。其运行效果如下图所示。

s = input('请输入字符串:')
sum1 = 1
for i in s:
    if i == ' ':
        sum1 += 1
print(f'方法一(计算空格数):其中的单词总数有:{sum1}')

list = s.split(' ')
print(f'方法二(以空格分隔形成列表后计算长度):其中的单词总数有:{len(list)}')

6. 编写程序,输入字符串,将其每个字符的 ASCI 码形成列表并输出, 运行效果如下图所示。

提示:  (1)使用 ord(s[i])方法(ord()函数主要用来返回对应字符的 ascii 码)将字符转换为对应的 Unicode 码。

(2)使用 s. append(x)方法将对象 x 追加到列表 s 的尾部。

a = input('请输入一个字符串:')
s = []
for i in range(len(a)):
    x = ord(a[i])
    s.append(x)
print(s)

7. (选做) 创建列表,内容为 a-z、A~Z 和 0-9,从中随机抽出 6 个字符作为验证码。

提示:使用 ASCII 值和 chr 函数(chr()主要用来表示 ascii 码对应的字符他的输入时数字,可以用十进制,也可以用十六进制)生成大小写字母或 string 库。

import random

lists = []
list1 = [chr(i) for i in range(97, 123)]  # a~z十进制ASCII码为97~122
lists.extend(list1)
list2 = [chr(i) for i in range(65, 91)]  # A~Z十进制ASCII码为65~90
lists.extend(list2)
list3 = list(range(10))
lists.extend(list3)
# 将内容全部放入lists列表
code = []
for i in range(6):
    x = random.randint(0, len(lists))
    code.append(lists[x])
print("验证码:", end='')
print(''.join(map(str, code)))  # 直接连接,不插入任何连接符

8. 使用 列表 实现 筛选法 求 素数。

提示:素数判断方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数, 反之是素数。

import math

sushu = []
a = int(input('请输入一个正整数:'))
if a > 2:
    for i in range(2, a + 1):
        flag = True
        for j in range(2, int(math.sqrt(i) + 1)):
            if i % j == 0:
                flag = False
                break
        if flag:
            sushu.append(i)
    print(f' 2~{a} 素数列表:{sushu}')
else:
    int(input('请重新输入'))

9. 编写程序,求列表 s=[9,7,8,3,2,1,55,6]中的元素个数、最大值、最小值,以及元素之和、平均值。请思考有哪几种实现方法?

提示:可以分别利用 for 循环、 while 循环、直接访问列表元素( for i in s…)、间接访间列表元素( for i in range(O,len(s))…)、正序访问 (i=0; while i=0…)以及 while True:… break 等方法。

s = [9, 7, 8, 3, 2, 1, 55, 6]
n = len(s)
maxx = max(s)  # max函数求最大值
minn = min(s)  # min函数求最小值
he = sum(s)  # sum函数求和
avg = he / n  # avg函数求平均值
print('元素个数:', n)
print('最大值:', maxx)
print('最小值:', minn)
print('元素之和:', he)
print('平均值:', avg)

10.创建一个空字典 student,录入学生姓名和成绩,并一一对应,当所有学生的信息录入完之后,输入 1 退出。需要注意的是(学生成绩范围 为 0~150)超出范围重新输入。

提示:使用 dict 函数和 zip 函数

student = {}
sname = []
sgrade = []
prime = 0
while prime == 0:
    name = input("请输入学生姓名:")  # 键
    sname.append(name)
    grade = eval(input("请输入学生成绩:"))  # 值
    if grade > 0 and grade < 150:
        sgrade.append(grade)
    else:
        print("超出范围,请重新输入:")
    prime = int(input('输入1退出,输入0继续输入:'))
student = dict(zip(sname, sgrade))
print("学生姓名和成绩:", student)

11.自己编写一个长度至少五 5 的字典,其中姓名为键和性别为值;请编写一个程序,删除性别为男的员工信息。

employees = {'A': '男', 'B': '女', 'C': '男', 'D': '女', 'E': '男'}  # 自定义字典
print("删除前:", employees)

ename = []  # 键
esex = []  # 值
k = employees.keys()
v = employees.values()
for i in k:
    ename.append(i)
for j in v:
    esex.append(j)
for n in esex:
    if (n == '男'):
        x = esex.index('男')  # x标记值‘男’的下标位置,(值与键下标一致)
        esex.remove('男')
        ename.remove(ename[x])  # 姓名一列中删除下标为‘男’的键
new = dict(zip(ename, esex))
print("删除后:", new)

12.(选做)请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大输出学生的信息。提示:使用 sorted 函数并指定其对应的参数 key 的值。

student_old = {}
sno_old = []  # 学号为键
sname_old = []  # 姓名为值
prime = 0
while prime == 0:
    number = int(input("请输入学生学号:"))  # 键
    sno_old.append(number)
    name = input("请输入学生姓名:")  # 值
    sname_old.append(name)
    prime = int(input('输入1退出,输入0继续输入:'))
student_old = dict(zip(sno_old, sname_old))
student_new = {}
sno_new = []  # 学号为键
sname_new = []  # 姓名为值
sno_new = sorted(sno_old)
for i in sno_new:
    sname_new.append(student_old[i])  # _old[i]是指i键对应的值,使值形成新列表
student_new = dict(zip(sno_new, sname_new))
print("排序后:", student_new)

13.(选做)请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写,a 和 A 看是作一个字母), 统计出的结果,请按照 [‘a’:3,’b’:2] 的格式输出。

提示:可以使用 chr 函数将字母变为整数,然后利用整数值的大小进行判定。

s_old = input("请输入字符串:")
ele = []
num = []
print(s_old)
s = str.lower(s_old)  # 大写转换为小写
for i in s:
    if i not in ele:
        ele.append(i)
        num = 1
    else:
        num += 1
s_new = dict(zip(ele, num))
print("字母及其出现次数:", s_new)

14. 使用元组创建一个存储 Python 关键字的对象,并利用 input 函数输入任何一个字符串,来检测输入的单词是否是 Python 的关键字。

import keyword

a = input('请输入字符串:')
if a in keyword.kwlist: # keyword.kwlist是关键字列表
    print(f"{a}是python中的关键字!")
else:
    print(f"{a}不是python中的关键字!")

15. 使用 集合 实现筛选法求 素数。

方法一:

# 使用集合实现筛选法求素数
import math

sushu = set()  # 创建一个集合
a = int(input('请输入一个正整数:'))
if a > 2:
    for i in range(2, a + 1):
        flag = True
        for j in range(2, int(math.sqrt(i) + 1)):
            if i % j == 0:
                flag = False
                break
        if flag:
            sushu.add(i)
    print(f' 2~{a} 素数集合:{sushu}')
else:
    int(input('请重新输入'))

方法二:

# 使用集合实现筛选法求素数
import math

num = int(input("请输入大于2的自然数:"))
number = set(range(2, num))
m = int(math.sqrt(num) + 1)
a = [p for p in range(2, m) if 0 not in [p % d for d in range(2, int(math.sqrt(p) + 1))]]
for p in a:
    for i in range(2, (num // p) + 1):  # //为整数除法
        number.discard(i * p)
print(number)

  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再见以前说再见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值