python基础作业1

附加练习题(提示:一步步拆解)

1.想办法打印出jason

l1 = [11, 22, 'kevin',
      ['tony', 'jerry',
       [123, 456, 'jason']
       ]
      ]
'''分步操作'''
# 1. 先看大列表到底有几个数据值 以及我们想要的数据值在哪个里面
# print(l1[3])
l2 = l1[3]  # ['tony', 'jerry', [123, 456, 'jason']]
# 2. 再次思考小列表有几个数据值 以及我们想要的数据值在哪个里面
# print(l2[2])
l3 = l2[2]  # [123, 456, 'jason']
# 3. 最后转化成了简单的索引直接取值
# print(l3[2])
'''简化操作'''
print(l1[3][2][2])

2.想办法打印出大宝贝

d1 = {'name': 'jason',
      'others': {'a1': 'heiheihei',
                 'a2': {'k1': 'hahaha',
                        'k2': 'hehehe',
                        'k3': '大宝贝'}
                 }
      }
'''分步操作'''
# 1. 先拿大字典第二个键值对的值
# print(d1['others'])
d2 = d1['others']  # {'a1': 'heiheihei', 'a2': {'k1': 'hahaha', 'k2': 'hehehe', 'k3': '大宝贝'}}
# 2. 再拿小字典第二个键值对的值
# print(d2['a2'])
d3 = d2['a2']  # {'k1': 'hahaha', 'k2': 'hehehe', 'k3': '大宝贝'}
# 3. 转化成简单的按k值直接取值
# print(d3['k3'])
'''简化操作'''
print(d1['others']['a2']['k3'])

3.想办法打印出run

data = {'username': 'jason',
        'hobby': [11,22,
                  {'height': 183,
                   'hobby': ['read', 'run', 'music']
                   }
                  ]
        }
'''分步操作'''
# print(data['hobby'])
data1 = data['hobby']  # [11, 22, {'height': 183, 'hobby': ['read', 'run', 'music']}]
# print(data1[2])
data2 = data1[2]  # {'height': 183, 'hobby': ['read', 'run', 'music']}
# print(data2['hobby'])
data3 = data2['hobby']  # ['read', 'run', 'music']
print(data3[1])
'''简化操作'''
print(data['hobby'][2]['hobby'][1])

4.获取用户输入并打印成下列格式

#     ------------- info of Jason ---------
#     Name : Jason
#     Age  : 18
#     Sex  : male
#     Job  : Teacher
#     ---------------- end -----------------
# 1.先制定一个打印的模板
info_demo = """
   ------------ info of %s -------------
    Name : %s
    Age  : %s
    Job  : %s 
   ---------------- end -----------------
"""
# 2.获取用户输入
username = input('username>>>:')
age = input('age>>>:')
job = input('job>>>:')
# 3.格式化输出
print(info_demo % (username, username, age, job))

image

5 根据用户输入内容打印其权限

'''
    jason --> 超级管理员
    tom  --> 普通管理员
    jack,rain --> 业务主管
    其他 --> 普通用户
'''
# 1. 获取用户输入的用户名
username = input('请输入您的用户名>>>:')
# 2. 判断用户名 打印不同的提示>>>:不同的条件执行不同的代码 那么需要使用分支结构
if username == 'jason':
    print('超级管理员')
elif username == 'tom':
    print('普通管理员')
# elif username == 'jack' or 'rain':  # 错误写法
# elif username == 'jack' or username == 'rain':
elif username in ['jack', 'rain']:  # 正确写法
    print('业务主管')
else:
    print('普通用户')

image

6 编写用户登录程序

 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
    eg:black_user_list = ['jason','kevin','tony']
 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
    eg: oscar 123

# 提前定义好黑名单用户
black_user_list = ['jerry', 'kevin', 'tony']
# 1.先获取用户输入的用户名和密码
username = input('请输入您的用户名>>>:')

# 3. 先判断用户名是否是黑名单用户
if username in black_user_list:
    print('您一句被拉黑了 无法消费')
else:
    password = input('请输入您的密码>>>:')
# 2. 判断用户名和密码是否正确
    if username == 'jason' and password == '123':
        print('登录成功 来宾一位')
    else:
        print('用户名或密码错误')

image

7 编写用户登录程序

 用户如果登录失败 则只能尝试三次
 用户如果登录成功 则直接结束程序
 
# 4. 定义一个计数器
count_num = 1
while True:
    # 6. 先判断当前尝试了几次
    if count_num == 4:
        print('很抱歉 您已经尝试了三次')
        break
    # 1.获取用户数据
    username = input('username>>>:')
    password = input('password>>>:')
    # 2. 校验数据是否正确
    if username == 'jason' and password == '123':
        print('登录成功')
        break  # 3.结束循环体代码
    else:
        print('用户名或密码错误')
        # 5. 每错误一次就让计数器自增1
        count_num += 1

image

8 猜年龄游戏

假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序

# 1. 先定义用户的真实年龄
real_age = 18
# 8. 定义计数器
count_num = 1
# 6. 添加循环结构
while True:
# 10. 判断当前尝试的次数
    if count_num == 4:
        choice = input('您已经尝试了三次 是否继续尝试(n/y)>>>:')
        # 11. 判断用户输入的选择
        if choice == 'y':
            # 12. 重置计数器
            count_num = 1
        else:
            print('下次再来玩哦')
            break
    # 2. 获取用户猜测的年龄
    guess_age = input('你猜一猜我的年龄 好不好呀>>>:')
    # 3. 由于一会儿需要比较大小 所以要将用户输入的字符串年龄转成整型的年龄
    guess_age = int(guess_age)
    # 4. 判断年龄是否猜测正确
    if guess_age > real_age:
        print('你这小伙子 真讨厌 人家有那么大吗')
        # 猜测错了 计时器加一
        count_num += 1
    elif guess_age < real_age:
        print('哎呀 你真讨厌 人家也没那么小啦')
        # 猜测错了 计时器加一
        count_num += 1
    else:
        print('你真棒 猜对了 嘿嘿嘿')
        # 猜对了 直接结束循环
        break

9 计算1-100 所有的数之和

all_num = 0
for i in range(1, 101):
    all_num += i
print(all_num)

10 判断列表中数字2出现的次数

l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
# 1. 先定义一个记录数字2出现次数的计数器
count_num = 0
# 2. 循环获取列表中每一个数据值判断是不是数字2
for i in l1:
    # 3. 如果i绑定的数据值是2 则让计数器自增1
    if i == 2:
        count_num += 1
# 4. 等待for循环运行结束 打印计数器
print(count_num)

11 编写代码自动生成所有页网址(注意总共多少页)

https: // movie.douban.com / top250?start = 0 & filter =
https: // movie.douban.com / top250?start = 25 & filter =
https: // movie.douban.com / top250?start = 50 & filter =

base_url = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0, 250, 25):
    print(base_url % i)

12 编写代码打印出下列图形(ps:for循环嵌套)

*****
*****
*****
*****
for i in range(4):  # 0 1 2 3  4次    4行
    for j in range(5):  # 0 1 2 3 4   5次  5列
        print('*', end='')
    print()
"""
补充debug调试模式(程序员后期找bug必备工具)
"""

13 基于字符串充当数据块完成用户登录(基础练习)

data_source = 'jason|123'  # 一个用户数据
#获取用户用户名和密码 将上述数据拆分校验用户信息是否正确

#定义用户真实数据
data_source = 'jason|123'
# 1. 获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2. 切割字符串 获取真实用户名和密码
real_name, real_pwd = data_source.split('|')
# 3. 校验用户名和密码是否正确
if username == real_name and password == real_pwd:
    print('登录成功')
else:
    print('用户名或密码错误')

14 基于列表充当数据库完成用户登录(拔高练习)

方法一:
data_source = ['jason|123', 'kevin|321', 'oscar|222']
# 1. 先获取用户输入的用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2. 循环获取列表中每个真实数据
for data in data_source:  # 'jason|123'  'kevin|321'
    real_name, real_pwd = data.split('|')
    if username == real_name and password == real_pwd:
        print('登录成功')
        break
else:
    print('用户名或密码错误')

方法二:
data_source = ['jason|123', 'kevin|321', 'oscar|222']
# 1. 先获取用户输入的用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_data = f'{username}|{password}'   # username + '|' + password
if user_data in data_source:
    print('登录成功')
else:
    print('用户名或密码错误')

15 利用列表编写一个员工姓名管理系统

"""
  输入1执行添加用户名功能
  输入2执行查看所有用户名功能
  输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码 '''
ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
"""
# 1. 先定义个专门存储用户名的列表
data_list = []
# 2. 添加循环结构
while True:
    # 3. 先打印项目功能 供用户选择
    print("""
    1.添加用户
    2. 查看用户
    3.删除用户
    """)
    # 4. 获取用户想要执行的功能编号
    choice_num = input('请输入您想要执行的功能编号>>>:').strip()
    # 5. 根据不同的功能编号执行不同的分支代码
    if choice_num == '1':
        # 6. 获取用户输入的用户名
        username = input('请输入您的用户名>>>:').strip()
        # 7. 判断当前用户名是否已经存在
        if username in data_list:
            print('用户名已存在')
        else:
            # 8. 列表添加用户名
            data_list.append(username)
            print(f'用户名{username}添加成功')
    elif choice_num == '2':
        # 9. 循环打印每一个用户数据
        for name in data_list:
            print(f"""
            ------user info-------
            用户名:{name}
            ----------------------
            """)
    elif choice_num == '3':
        # 10. 获取用户想要删除的用户名
        delete_username = input('请输入您想要删除的用户名>>>:').strip()
        # 11. 先判断用户名是否存在
        if delete_username in data_list:
            data_list.remove(delete_username)
            print(f'用户名{delete_username}删除成功')
        else:
            print('你个傻帽 用户名不存在')
    else:
        print('很抱歉 暂时没有您想要执行的功能编号')

16 优化员工管理系统

  拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名(能写就写不会没有关系)
  员工的信息有:用户名 年龄 岗位 薪资...
  员工管理系统:注册、查看(单个员工、所有员工)、修改薪资、删除员工

#定义一个存储所有员工信息的字典
user_data_dict = {}   #{'编号':用户字典,'编号':用户字典}
'''
数据存储的方式1
{
    ’jason‘: [18, 'teacher', 10],
    'kevin': [28, 'sale', 90]
}
数据存储的方式2
{
    'jason': {'age':18, 'job':'teacher', 'salary': 8000},
    'kevin': {'age':28, 'job':'sale', 'salary':9000}    
}
数据存储的方式3
{
    '1':{'name':'jason', 'age':18, 'job':'teacher', 'salary':8000},
    '2':{'name':'kevin', 'age':28, 'job':'sale', 'salary':9000},
    '3':{'name':'tony', 'age':28, 'job':'teacher', 'salary':8000},
}
'''

#1. 先搭建系统骨架
while True:
    print("""
    1. 创建员工信息
    2.查看单个员工
    3.查看所有员工
    4.修改员工薪资
    5.删除员工信息
    """)
    choice = input('请选择您想要执行的功能编号>>>>:').strip()
    if choice == '1':
        while True:
            # 1. 获取员工编号
            emp_id = input('请输入该员工的员工编号(q)>>>:').strip()
            if emp_id.lower() == 'q':
                break
            # 判断编号是否为纯数字
            if not emp_id.isdigit():
                print('员工编号必须是纯数字')
                continue
            # 2.判断员工编号是否已存在
            if emp_id in user_data_dict:
                print('员工编号已存在,请重新输入')
                continue
            # 3. 获取员工详细信息
            username = input('请输入员工姓名>>>>:').strip()
            age = input('请输入员工年龄>>>>:').strip()
            job = input('请输入员工岗位>>>:').strip()
            salary = input('请输入员工薪资>>>:').strip()
            # 4. 构建一个临时的小字典
            tmp_dict = {}
            # 5.添加员工信息键值对
            tmp_dict['emp_id'] = emp_id
            tmp_dict['name'] = username
            tmp_dict['age'] = age
            tmp_dict['job'] = job
            tmp_dict['salary'] = salary
            # 6. 添加到大字典中
            user_data_dict[emp_id] = tmp_dict
            print(f'员工{username}添加成功')

    elif choice == '2':
        while True:
            #1. 先获取员工编号
            target_id = input('请输入您想要查看的员工编号(q)>>>:').strip()
            if target_id.lower() == 'q':
                break
            # 2. 判断员工编号是否不存在
            if target_id not in user_data_dict:
                print('员工编号不存在 无法查看')
                continue
            # 3. 根据员工编号获取员工字典数据
            user_dict = user_data_dict.get(target_id)
            # 4. 格式化输出
            print(f"""
            -----------info of emp ------------
            编号:{user_dict.get('emp_id')}
            姓名:{user_dict.get('name')}
            年龄:{user_dict.get('age')}
            岗位:{user_dict.get('job')}
            薪资:{user_dict.get('salary')}        
            """)
    elif choice == '3':
        for user_dict in user_data_dict.values():
            print(f"""
            ------------info of emp--------
            编号:{user_dict.get('emp_id')}
            姓名:{user_dict.get('name')}
            年龄:{user_dict.get('age')}
            岗位:{user_dict.get('job')}
            薪资:{user_dict.get('salary')}
            -------------------------------   
            """)
    elif choice == '4':
        while True:
            # 1.先获取想要修改的员工编号
            target_id = input('请输入您想要修改的员工编号(q)>>>:').strip()
            if target_id.lower() == 'q':
                break
            if target_id not in user_data_dict:
                print('员工编号不存在')
                continue
            # 2. 获取新的薪资
            new_salary = input('请输入该员工的新薪资待遇>>>>:').strip()
            if not new_salary.isdigit():
                print('薪资只能是纯数字')
                continue
            # 3.获取员工字典
            user_dict = user_data_dict.get(target_id)  # {'emp_id':'1','name':'winter','age':18,'job':'sale','salary':3000}
            # 4. 修改字典中的薪资
            user_dict['salary'] = new_salary   # {'salary': 5000}
            # 5. 修改大字典
            user_data_dict[target_id] = user_dict
            print(user_data_dict.get(target_id))
    elif choice == '5':
        while True:
            # 1. 先获取想要修改的员工编号
            target_id = input('请输入您想要删除的员工编号(q)>>>>').strip()
            if target_id.lower == 'q':
                break
            if target_id not in user_data_dict:
                print('员工编号不存在')
                continue
            # 2. 字典删除键值对
            user_data_dict.pop(target_id)
    else:
        print('抱歉 暂无功能编号')

17 去重下列列表并保留数据值原来的顺序

# eg: [1,2,3,2,1] 去重之后 [1,2,3]
l1 = [2, 3, 2, 1, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 5, 6, 5]
# 不考虑顺序的情况下 去重
s1 = set(l1)
l2 = list(s1)
print(l2)
# 考虑顺序
new_list = []
for i in l1:
    if i not in new_list:
        new_list.append(i)
print(new_list)

18 集合运算

# 3.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
linuxs={'kermit','tony','gangdan'}
#   1. 求出即报名python又报名linux课程的学员名字集合
print(pythons & linuxs)
#   2. 求出所有报名的学生名字集合
print(pythons | linuxs)
#   3. 求出只报名python课程的学员名字
print(pythons - linuxs)
#   4. 求出没有同时这两门课程的学员名字集合
print(pythons ^ linuxs)

19 统计列表中每个数据值出现的次数并组织成字典展示

# 	eg: l1 = ['jason','jason','kevin','oscar']
#       结果:{'jason':2,'kevin':1,'oscar':1}
# 	真实数据
l1 = ['jason', 'jason', 'kevin', 'oscar', 'kevin', 'tony', 'kevin']
# 1. 先定义结果集空字典
data_dict = {}
# 2. 循环列表中每一个数据值
for name in l1:
    # 3.判断当前数据值是否在字典中的k中
    if name not in data_dict:
        data_dict[name] = 1  # {'jason':1}
    else:
        data_dict[name] += 1  #{'jason': 1+1}
        # data_dict[name] = data_dict.get(name) + 1
print(data_dict)

20 编写简易版本的拷贝工具

自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可

# 1. 获取想要拷贝的文件路径
source_file_path = input('请输入您想要拷贝的文件路径>>>:').strip()
# 2. 获取目标文件的路径
target_file_path = input('请输入您想要拷贝到哪个地方的路径>>>>:').strip()
# 3. 打开第一个文件路径 读取内容并写入第二个文件路径中
with open(r'%s' % source_file_path,'rb') as read_f,open(r'%s' %target_file_path,'wb') as write_f:
    for line in read_f:
        write_f.write(line)

21 利用文件充当数据库编写用户登录、注册功能

文件名称:userinfo.txt
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户)  文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件

while True:
    print("""
    1.注册功能
    2.登录功能
    """)
    choice = input('请选择您想要执行的功能编号>>>:').strip()
    if choice == '1':
        username = input('please input your username>>>:').strip()
        password = input('please input your password>>>:').strip()
        # 2.校验用户名是否存在
        with open(r'userinfo.txt','r', encoding='utf8') as f:
            for line in f:  # 'jason|123'
                real_name, real_pwd = line.split('|')
                if username == real_name:
                    print('用户名已存在 无法完成注册')
                    break
            else:
                with open(r'userinfo.txt','a',encoding='utf8') as f1:
                    f1.write(f'{username}|{password}\n')
                print(f'用户{username}注册成功')
    elif choice == '2':
        # 1. 获取用户名和密码
        username = input('please input your username>>>>:').strip()
        password = input('please input your password>>>:').strip()
        # 2.打开文件读取内容并校验
        with open(r'userinfo.txt','r',encoding='utf8') as f:
            for line in f:  # 'jason|123|\n'
                real_name, real_pwd = line.split('|')  # 'jason' '123\n'
                if real_name == username and real_pwd.strip('\n') == password:
                    print('登录成功')
                    break
            else:
                print('用户名或密码错误')
    else:
        print('没有该功能编号')
		
		
		
while True:
    print('''
    1.注册
    2.登录
    3.退出
    ''')
    choice = input('请输入功能编号>>>>:').strip()
    if choice == '1':
        while True:
            #多用户注册
            username=input('请输入注册用户名(q)>>>>:').strip()
            if username.lower() == 'q':
                break
            try:
                with open(r'user.txt','r',encoding='utf8') as f:
                    data=f.read()
                    for i in data:
                        real_user,real_pwd=i.split('|')
                        if username == real_user:
                            print('用户已存在,请重新输入')
                            continue
                    else:
                        password=input('请输入注册密码>>>>:').strip()
                        with open(r'user.txt','a',encoding='utf8') as f:
                            f.write(f'{username}|{password}\n')
                            print(f'{username}用户注册成功')
            except Exception as e:
                with open(r'user.txt','a',encoding='utf8') as f:
                    password = input('请输入注册密码>>>>:').strip()
                    with open(r'user.txt', 'a', encoding='utf8') as f:
                        f.write(f'{username}|{password}\n')
                        print(f'{username}用户注册成功')
    elif choice == '2':
        while True:
            username=input('请输入登录用户名>>>>(q):').strip()
            if username.lower() == 'q':
                break
            password=input('请输入登录密码>>>>:').strip()
            try:
                with open(r'user.txt','r',encoding='utf8') as f:
                    ####错误用法#######
                    # data=f.read()
                    # for i in data:
                    #     real_user, real_pwd = i.split('|')
                    #     if username == real_user and password ==  real_pwd.strip('\n'):
                    #         print('登录成功')
                    #         break
                    ########错误用法############
                    for line in f:  # 'jason|123|\n'
                        real_name, real_pwd = line.split('|')  # 'jason' '123\n'
                        if real_name == username and real_pwd.strip('\n') == password:
                            print('登录成功')
                            break
                    else:
                        print('用户名或密码错误')
            except Exception as e:
                print('请先注册,在验证登录')
                break
    elif choice == '3':
        break
    else:
        print('请输入正确数字')
        continue
posted @   悠悠-winter  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示