综合练习👈

一、基础题

1、请取出第一个学生的第一个爱好

students_info = [['egon', 98, ['play', ]], ['alex', 18, ['play', 'sleep']]]
print(students_info[0][-1][0])  # play

2、请取出取公司名

info = {'name': 'egon', 'hobbies': ['play', 'sleep'],
        'company_info': {'name': 'Oldboy', 'type': 'education', 'emp_num': 40, }}
print(info.get('company_info').get('name'))  # Oldboy

3、请画出以下列表在内存中是如何存放的

4、用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式

'''
格式:
------------ info of Egon -----------
Name  : Egon
Age   : 22
Sex   : male
Job   : Teacher
------------- end -----------------
'''

username = input('姓名>>:').strip()
age = input('年龄>>:').strip()
sex = input('性别>>:').strip()
job = input('工作>>:').strip()
print("""
------------ info of Egon -----------
Name  : {}
Age   : {}
Sex   : {}
Job   : {}
------------- end -----------------
""".format(username, age, sex, job))
'''
------------ info of Egon -----------
Name  : egon
Age   : 18
Sex   : female
Job   : 社会毒打
------------- end -----------------
'''

5、有一个字典students要求循环打印所有学生的详细信息

'''
# 格式如下
<name:egon age:18 sex:male>
<name:alex age:38 sex:fmale>
<name:wxx age:48 sex:male>
<name:yuanhao age:58 sex:fmale>
<name:liwenzhou age:68 sex:male>
'''
students = [
    {'name': 'egon', 'age': 18, 'sex': 'male'},
    {'name': 'alex', 'age': 38, 'sex': 'fmale'},
    {'name': 'wxx', 'age': 48, 'sex': 'male'},
    {'name': 'yuanhao', 'age': 58, 'sex': 'fmale'},
    {'name': 'liwenzhou', 'age': 68, 'sex': 'male'},
]
for item in students:
    name, age, sex = item
    print("<name:{} age:{} sex:{}>".format(item.get(name), item.get(age), item.get(sex)))
'''
<name:egon age:18 sex:male>
<name:alex age:38 sex:fmale>
<name:wxx age:48 sex:male>
<name:yuanhao age:58 sex:fmale>
<name:liwenzhou age:68 sex:male>
'''

6、使用while循环输出1 2 3 4 5 6 8 9 10 11 12

num = 1
while num < 13:  # 1~12
    if num == 7:
        num += 1
        continue
    print(num, end=' ')
    num += 1
'''
1 2 3 4 5 6 8 9 10 11 12
'''

7、求1-100的所有数的和

# 方法一:
init_num = 1
sum_num = 0
while init_num < 101:  # 1~100
    sum_num += init_num
    init_num += 1
print(sum_num)  # 5050

# 方法二:
print(sum(range(1, 101)))  # 5050

# 方法三:
sum_num = 0
for i in range(1, 101):
    sum_num += i
print(sum_num)

8、输出 1-100 内的所有奇数

# 方法一:
odd_num = 1
while odd_num < 101:  # 1~100
    if odd_num % 2:  # 奇数除以2,余1
        print(odd_num, end=' ')
    odd_num += 1

# 方法二:
for i in range(1, 101, 2):
    print(i, end=' ')
'''
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
'''

9、输出 1-100 内的所有偶数

# 方法一:
even_num = 1
while even_num < 101:  # 1~100
    if not even_num % 2:  # 偶数除以2,余0
        print(even_num, end=' ')
    even_num += 1

# 方法二:
even_num = 0
for i in range(0, 101, 2):
    if i == 0:
        continue
    print(i, end=' ')
'''
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
'''

10、求1-2+3-4+5 ... 99的所有数的和

# 方法一:
num = 1
sum_num = 0
while num < 100:  # 1~99
    # 奇数相加,偶数相减
    if num % 2:
        sum_num += num
    else:
        sum_num -= num
    num += 1
print(sum_num)  # 50

# 方法二:
print(sum(range(1, 100, 2)) - sum(range(0, 100, 2)))  # 50

# 方法三:
even_num = 0
odd_num = 0
for i in range(1, 100, 2):
    even_num += i

for i in range(0, 100, 2):
    odd_num += i
print(even_num - odd_num)  # 50

11、写代码,有如下变量,请按照要求实现每个功能

name = " aleX"
# b)	移除 name 变量对应的值两边的空格,并输出处理结果
print(name.strip())  # aleX

# c)	 判断 name 变量对应的值是否以 "al" 开头,并输出结果
print(name.startswith('al'))  # False

# d)	 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
print(name.endswith('X'))  # True

# e)	将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
print(name.replace('l', 'p'))  # apeX

# f)	将 name 变量对应的值根据 “l” 分割,并输出结果
print(name.split('l'))  # [' a', 'eX']

# g)	将 name 变量对应的值变大写,并输出结果
print(name.upper())  # ALEX

# h)	将 name 变量对应的值变小写,并输出结果
print(name.lower())  # alex

# i)	请输出 name 变量对应的值的第 2 个字符?
print(name[1])  # a

# j)	请输出 name 变量对应的值的前 3 个字符?
print(name[:3])  # al

# k)	请输出 name 变量对应的值的后 2 个字符?
print(name[-1:-3:-1][::-1])  # eX

# l)	请输出 name 变量对应的值中 “e” 所在索引位置?
print(name.find('e'))  # 3
print(name.rfind('e'))  # 3
print(name.index('e'))  # 3
print(name.rindex('e'))  # 3

# m)	获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
print(name[:len(name) - 1])  # ale

12、列表与元组的区别的是什么?

'''
相同之处: 
    列表与元组都可以存放多个任意类型的值.
不同之处:
    元组是不可变类型,元组中的索引对应值的内存地址不可变.而列表是可变类型.
    定义列表一个值的情况下可以不加逗号:[1].而定义元组一个值的情况下就必须加逗号:(1,)
'''

13、有如下两个集合,pythons是报名python课程的学员名字集合.linuxs是报名linux课程的学员名字集合.

pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
linuxs = {'wupeiqi', 'oldboy', 'gangdan'}
# c)	1. 求出即报名python又报名linux课程的学员名字集合
# 交集
print(pythons & linuxs)  # {'gangdan', 'wupeiqi'}

# d)	2. 求出所有报名的学生名字集合
# 并集
print(pythons | linuxs)  # {'wupeiqi', 'alex', 'egon', 'gangdan', 'biubiu', 'oldboy', 'yuanhao'}

# e)	3. 求出只报名python课程的学员名字
# 差集
print(pythons - linuxs)  # {'alex', 'biubiu', 'egon', 'yuanhao'}

# f)	4. 求出没有同时这两门课程的学员名字集合
# 对称差集
print(pythons ^ linuxs)  # {'alex', 'egon', 'biubiu', 'oldboy', 'yuanhao'}

14、有如下字典,要求循环取出字典中的key和value

msg_dic = {
    'apple': 10,
    'tesla': 100000,
    'mac': 3000,
    'lenovo': 30000,
    'chicken': 10,
}
for key, value in msg_dic.items():
    print(key, value, end=':')
'''
apple 10:tesla 100000:mac 3000:lenovo 30000:chicken 10
'''

15、统计s='hello alex alex say hello sb sb'中每个单词的个数

s = 'hello alex alex say hello sb sb'
dic = {}
word_set = set(s.split())
for word in word_set:
    dic[word] = s.count(word)
print(dic)  # {'sb': 2, 'alex': 2, 'say': 1, 'hello': 2}

16、有列表l=['a','b',1,'a','a'],去重,有序。无序

li = ['a', 'b', 1, 'a', 'a']
# 去重,有序
new_li = []
for item in li:
    if item not in new_li:
        new_li.append(item)
print(new_li)  # ['a', 'b', 1]

# 去重,无序
print(list(set(li)))  # [1, 'b', 'a']

17、声明变量时需要注意的有哪些?

'''
变量名的命名规范:
    1、变量名只能以数字、下划线、字母组成
    2、变量名不能以数字开头
    3、变量名不能是python内置的关键字
变量名的命名风格:变量名命名最好使用 字母+下划线
下划线开头的变量名有特殊意义,单个下划线表示该变量名是废弃的变量。
'''

18、for循环嵌套之打印99乘法表

'''
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
层数:9
第一层: 1个    
第二层: 2个   
'''
for i in range(1, 10):  # 控制层数,和右边的值
    for j in range(1, i + 1):  # 控制每层的的个数,和左边的值
        print('{} * {} = {}'.format(j, i, j * i), end=" ")
    print()
'''
1 * 1 = 1 
1 * 2 = 2 2 * 2 = 4 
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

19、for循环嵌套之打印金字塔

'''
  *
 ***
*****
总层数:3层
当前层空格 = 总层数 - 当前层数
当前层符号数 = 当前层数 * 2 - 1
'''
# 方法一:
max_level = 6
for current_level in range(1, max_level + 1):
    print('{}{}'.format(' ' * (max_level - current_level), '*' * (current_level * 2 - 1)))

# 方法二:
max_level = 6
for current_level in range(1, max_level + 1):
    for space in range(1, max_level - current_level + 1):
        print(' ', end='')
    for symbol in range(1, current_level * 2):
        print('*', end="")
    print()
'''
     *
    ***
   *****
  *******
 *********
***********
'''

20、用列表的insert与pop方法模拟队列

li = []
# 入队
for i in range(5):
    li.insert(i, i)
    print(li)
'''
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
'''
# 出队
for i in range(5):
    li.pop(0)
    print(li)
'''
[1, 2, 3, 4]
[2, 3, 4]
[3, 4]
[4]
[]
'''

21、用列表的insert与pop方法模拟堆栈

li = []
# 入栈
for i in range(5):
    li.insert(i, i)
    print(li)
'''
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]
'''

# 出栈
for i in range(5):
    li.pop()
    print(li)
'''
[0, 1, 2, 3]
[0, 1, 2]
[0, 1]
[0]
[]
'''

二、综合题

1、猜年龄游戏

# 要求:允许用户最多尝试3次每尝试3次后,如果还没猜对,就问用户是否还想继续玩如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序.如何猜对了,就直接退出
age = 18
count = 0
while count < 3:  # 0~2
    guess_age = input('猜年龄>>:').strip()
    if guess_age.isdigit():
        guess_age = int(guess_age)
        if guess_age == age:
            print('猜对了!')
            break
        else:
            print('需要输入数字:错误次数【{}】次'.format(count+1))
            count += 1

            if count == 3:
                while True:
                    con = input('是否继续:').strip()
                    if con.lower() == 'y':
                        count = 0
                        break
                    elif con.lower() == 'n':
                        count = 3
                        break
    else:
        print('需要输入数字:错误次数【{}】次'.format(count+1))
        count += 1

2、编写登录功能,让用户有三次输错的机会

username = 'egon'
password = '123'
for i in range(3):
    inp_username = input('please input your username>>:').strip()
    inp_password = input('please input your password>>:').strip()
    if inp_password == password and inp_username == username:
        print("登录成功")
        break
    else:
        print('错误次数【{}】次'.format(i+1))
else:
    print('错误三次,退出!')

3、注册功能,让用户输入用户名与密码进行注册,注册成功后将用户名与密码存到文件中

import os
import time

account_file = r'account.txt'
if not os.path.isfile(account_file):
    with open(account_file, 'wt', encoding='utf-8') as f:
        f.write('egon:123\nalex:123\n\n\n\n')

username_exist = False
while True:
    username = input('请输入用户名>>:').strip()
    with open(account_file, 'rt', encoding='utf-8') as f:
        for line in f:
            res = line.strip()
            if not res:
                continue
            if res.split(':')[0] == username:
                print("用户已经存在,请重新输入")
                username_exist = True
                break
        else:
            username_exist = False
    if username_exist:
        continue

    password = input('请输入密码>>:').strip()
    if '' in [username, password] or not username.isalpha():
        print('用户名,密码可能为空!且用户名必须是由字母组成!请重新输入!')
        continue

    confirm_password = input('请确认密码>>:').strip()
    if password != confirm_password:
        print("2次密码不一致,请重新输入!")
        continue

    with open(account_file, 'at', encoding='utf-8') as f:
        f.write('{}:{}\n'.format(username, password))
        print('正在帮你注册,请稍等'.center(50, '-'))
        time.sleep(2)  # 这里模仿一下过程,实际情况不会这么写
        print('恭喜[{}]!,注册成功'.center(50, '-').format(username))
    break
posted @ 2020-03-14 11:00  给你加马桶唱疏通  阅读(244)  评论(0编辑  收藏  举报