【Python】第一次实验

1

# 1、编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)
​
import random
l1 = [random.randint(1,100) for i in range(20)]
l1[::2] = sorted(l1[::2], reverse=True)
print(l1)
​

2

# 2、有三个集合,pythonSet = {'王雪','李明','唐德','罗明'}、cSet = {'朱佳','李明','唐德','杨鹏'}、javaSet = {'李思','李明','郑君','罗明'}
# 分别表示会Python、C、Java语言的人名,请输出只会Python不会C的人、三种语言都会的人、会任意两种语言的人。
​
pythonSet = {'王雪','李明','唐德','罗明'}
cSet = {'朱佳','李明','唐德','杨鹏'}
javaSet = {'李思','李明','郑君','罗明'}
total = pythonSet.union(cSet, javaSet)
​
print("只会Python不会C:", end="")
for i in pythonSet:
    if i not in cSet and i not in javaSet:
        print(i, end=" ")
print()
print("三种语言都会:", end="")
for i in total:
    if i in cSet and i in javaSet and i in pythonSet:
        print(i, end=" ")
print()
print("会任意两种:", end="")
for i in total:
    if i in pythonSet and i in javaSet or i in pythonSet and i in cSet or i in javaSet and i in cSet:
        print(i, end=" ")
print()
​

3

# 3、生成8位无重复的密码(可以包含数字、大小写字母)。
​
import random
import string
​
totalChar = string.digits + string.ascii_letters
ans = ''
for i in range(8):
    ch = random.choice(totalChar)
    ans = ans + ch
    # 移除已添加字符
    totalChar = "".join(totalChar.split(ch))
​
print(ans)
​

4

# 4、首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。(使用字典)
​
import random
import string
all_characters = list(string.ascii_letters + string.digits + string.punctuation)
rand_string = "".join(random.choice(all_characters) for i in range(1000))
char_counts = {}
for ch in rand_string:
    if ch not in char_counts:
        char_counts[ch] = rand_string.count(ch)
for key, value in char_counts.items():
    print(f"{key}出现了{value}次")
    

5

# 5、阿凡提与国王比赛下棋,国王说要是自己输了的话阿凡提想要什么他都可以拿得出来。阿凡提说那就要点米吧,棋盘一共64个小格子,在第一个格子里放1粒米,
# 第二个格子里放2粒米,第三个格子里放4粒米,第四个格子里放8粒米,以此类推,后面每个格子里的米都是前一个格子里的2倍,一直把64个格子都放满。需要多少粒米呢?
​
total = 0
for i in range(64):
    total += 2**i
print(total)
​

6

# 6、编写程序,用户输入一个列表和2个整数作为下标,然后输出列表中介于2个下标之间的元素组成的子列表。例如用户输入[1,2,3,4,5,6]和2,5,程序输出[3,4,5]。
​
num_list = list(map(int, input().strip("[]").split(",")))
a,b = map(int, input().split(","))
print(num_list[a:b])
​

7

# 7、现有一个存放用户登录信息的字典,请对用户字典进行管理(更新删除和插入操作),操作时要求输出删除的用户名,每个操作后显示最新的字典。
​
import os
import time
userDict = {'admin': '123456', 'administrator': '12345678', 'root': 'password'}
while True:
    print("=================")
    print("1. 删除用户")
    print("2. 插入用户")
    print("3. 更新用户")
    print("0. 退出")
    print("=================")
    choice = input("请输入选项:")
    if choice == '1':
        print("当前用户信息如下:")
        for key, value in userDict.items():
            print(f"用户名:{key},密码:{value}")
        while True:
            toDel = input("请输入要删除的用户名")
            if toDel not in userDict.keys():
                print("未找到用户,请重新输入!")
                continue
            break
        print(f"已删除:{toDel},{userDict[toDel]}")
        del userDict[toDel]
        print("当前用户信息如下:")
        for key, value in userDict.items():
            print(f"用户名:{key},密码:{value}")
    elif choice == '2':
        print("请输入需要添加的", end="")
        addUserName = input("用户名:")
        addPassword = input("密码:")
        userDict[addUserName] = addPassword
        print("添加完成,当前用户信息如下:")
        for key, value in userDict.items():
            print(f"用户名:{key},密码:{value}")
    elif choice == '3':
        print("当前用户信息如下:")
        for key, value in userDict.items():
            print(f"用户名:{key},密码:{value}")
        while True:
            toModify = input("请输入要更新的用户")
            if toModify not in userDict.keys():
                print("未找到用户,请重新输入!")
                continue
            break
        newPassWord = input("请输入新的用户密码:")
        userDict[toModify] = newPassWord
        print("更新完成,当前用户信息如下:")
        for key, value in userDict.items():
            print(f"用户名:{key},密码:{value}")
    elif choice == '0':
        break
    else:
        print("输入有误,请重新输入!")

8

# 8、假设有三个列表:lst_who=[“小马”,“小羊”,“小鹿”],lst_where=[“草地上”,“电影院”,“家里”],lst_what=[“看电影”,“听故事”,“吃晚饭”]。
# 试编写程序,随机生成三个0-2范围内的整数,将其作为索引分别访问三个列表中的对应元素,然后进行造句。
# 例如,随机生成三个整数分别为1,0,2,则输出句子“小羊在草地上吃晚饭”。
​
import random
​
lst_who = ["小马","小羊","小鹿"]
lst_where = ["草地上","电影院","家里"]
lst_what = ["看电影","听故事","吃晚饭"]
print(f"{lst_who[random.randint(0,2)]}在{lst_where[random.randint(0,2)]}{lst_what[random.randint(0,2)]}")
​

9

# 9、编写程序,生成一个包含20个随机字符的列表(字母和数字),将其前10个元素升序排列,后10个元素降序排列。
import random
import string

totalChar = string.digits + string.ascii_letters
ans = []
for i in range(20):
    ch = random.choice(totalChar)
    ans.append(ch)

ans[0:10] = sorted(ans[0:10])
ans[10:] = sorted(ans[10:], reverse=True)
print(ans)

10

# 10、接收用户输入的字符串(你的姓名拼音),将其中的字符进行排序,并以逆序输出,例如:zhangsan - aaghnnsz--zsnnhgaa
name = input()
s1 = "".join(sorted(name))
s2 = "".join(sorted(name, reverse=True))
print(f"{name} - {s1} -- {s2}")

11

# 11、现在给出两个列表:· 列表A:(1,7,9,11,13,15,17,19)· 列表b:(2,4,6,8,10)
# 两个列表合并为列表c,按升序排列。向列表c指定位置插入一个元素(你的姓名)

A = [1, 7, 9, 11, 13, 15, 17, 19]
b = [2, 4, 6, 8, 10]
c = A+b
c.sort()
c.insert(len(c)//2, "Jerry")
print(c)

实验总结

对于我来说,使用切片对数据进行修改还是比较生疏,例如第一题和第十题,都用到了切片和排序。最初我是这样写的:print(l2[::2].sort(reverse=True))

sort()函数不会返回任何内容,所以它的打印结果是None,正因为这样,我后续把对于对象使用sort()方法改成了直接使用sorted()函数,将其返回值赋值给列表的切片,这样就修改了原列表中的对应位置的内容。

这次实验也让我加深了random包的使用,在实验中广泛用到了random.choice(),它可以在序列中随机选择一个元素并返回,日后我还需扩宽对random包的了解。

© 版权声明
THE END
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容