流程控制

'''
1.
用if分支完成猜数字游戏
-- 先通过键盘输入一个数字算作出题
-- 在键盘输入答案
-- 正确:猜对 | 误差3以内:接近了 | 误差外小值:太小 | 误差外大值:太大
'''

quest = int(input("输入一个数字完成出题:"))
answer = int(input('输入你的答案:'))
error = quest - answer
if quest == answer:
    print('猜对')
elif -3 < error < 3:
    print('接近了')
elif error > 3:
    print('太大了')
elif error < 3:
    print('太小了')

'''
2.
添加循环,让第1题可以循环完成多次猜字游戏
-- 一次循环完成一次出题和猜题
-- 当出题输入Q或q时结束游戏
'''

while True:
    #要求出题输入q退出,所以出题的这个变量值quest必须是字符串
    quest = input("输入一个数字完成出题,输入q|Q退出:")
    end = ['q', 'Q']
    if quest in end:
        break
    # 出题的变量之前已经定义了字符串,接下来要做的都是算数运算,所以不管是出题输入的值还是答案都要转换成数字
    quest=int(quest)
    answer = int(input('输入你的答案:'))
    error = quest - answer
    if quest == answer:
        print('猜对')
        break
    elif -3 < error < 3:
        print('接近了')
    elif error > 3:
        print('太大了')
    elif error < 3:
        print('太小了')

'''
3.
在第二题基础上,完成一次出题可以最多进行三次猜题
-- 一次出题,进入猜题,猜对进入下一次出题
-- 猜错进入下一次猜题,最多错三次,三次全错自动进入下一次出题
'''

while True:
    quest = input("输入一个数字完成出题,输入q|Q退出:")
    end = ['q', 'Q']
    if quest in end:
        break

    # 先定义一个计数器,目的是为了统计输入错误的次数,当计数器为3,则结束循环,进行上一层循环继续出题
    count = 1
    while count <= 3:

        quest = int(quest)
        answer = int(input('输入你的答案:'))
        error = answer - quest

        if error == 0:
            print('猜对')
            break

        elif -3 < error < 3:
            print('接近了')
        elif error > 3:
            print('太大了')
        elif error < 3:
            print('太小了')
        count += 1
    
    #如果循环结束,表示count已经大于3,提供用户返回信息
    else:
        print()
        print('你已输错3次,请重新输入')

列表的操作

'''
1.循环输入10条信息,如果输入的是自然数,就存放到名为nums的列表中,如果不是,就存放到名为strs列表中
    -- nums中存放的数据都是int类型
    -- strs中存放的都是字符串类型
    -- 最终打印两个列表以及个列表的中元素的个数
'''

(方法一)
nums = []
strs = []
count = 1
while count <= 10:
    res = input('请输入正整数或者字符串 ')
    if res.isdigit() == True:
        nums.append(int(res))
    else:
        strs.append(res)
    count += 1
print('nums变量中存放的元素有%s个,%s' % (len(nums), nums))
print('strs变量量中存放的元素有%s个,%s' % (len(strs), strs))


(方法二)
for i in range(10):
    info = input('请输入10条信息 ')
    if info.isdigit():
        nums.append(int(info))
    else:
        strs.append(info    )
print(nums)
print(strs)


'''
2.完成用list存放注册用户信息的功能:可以循环来完成注册,先输入账号,再输入密码,密码需要二次确认,两次密码一致才能往下进行注册,
如果不一致返回重新注册输入
    -- 账号输入Q或q,退出整个程序
    -- 账号成功,进行两次密码验证,验证失败直接进入下一次注册
    -- 账号必须全部是英文字母3个长度及以上,密码必须是英文或数字3个长度及以上
    -- 两次密码验证成功,就注册信息存放到列表中
    -- 假设注册成功了Owen,123 | Zero,000两个信息,最终形成的注册结果为
    [['Owen', '123'], ['Zero', '000']]
'''

list_1 = []  # 先定义一个人空列表,空列表一定要写在while循环外面,如果写在while循环里面,则每次赋值回到while循环,则都会被重新赋值成空列表
while True:
    user = input('请输入账号,输入q/Q退出程序 ')
    if user == 'q' or user == 'Q':
        break

    if not user.isalpha() and len(user) >= 3:  # 将满足条件的筛选出来并取反,那么接下来的条件都是成立的
        print('注册不成功,请重新输入用户名')
    while True:
        pwd = input('请输入密码 ')
        if pwd:
            re_pwd = input('请再次输入密码 ')
            if pwd == re_pwd:
                info = [user, pwd]
                list_1.append(info)
                print('注册成功')
                break
            else:
                print('两次密码输入不一致,请重新输入密码 ')
                continue

print(list_1)

字典的操作

'''
1.将几个指定字符串形成目标字符串
指定字符串:'I' | 'am' | 'you are a good boy' | '!'
目标字符串:'I am a good boy!'
'''

first = 'I'
second = 'am'
third = 'you are a good boy'
fourth = '!'

third = third[8:]

print('%s %s %s%s' % (first, second, third,fourth))


'''
2.写出你可以想到的所有按要求格式输出列表的解决方案
指定列表:[1, 2, 3, 4, 5]
输出结果:[5, 4, 3, 2, 1]

'''

list1 = [1, 2, 3, 4, 5]

# # (一)
print(sorted(list1, reverse=True))

# # (二)
print(list(reversed(list1)))

# # (三)
print(list1[::-1])

# # reverse方法和sort方法需要先执行再输出
#
# # (四)
list1.reverse()
print(list1)

# (五)
list1.sort(reverse=True)
print(list1)

'''
3.遍历删除包含 Bi词汇(脏话) 的目标
指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
输出结果:['Owen', 'ZeroS']
'''
#方法1: 匹配符合条件的,添加到新的列表(推荐)
list1 = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
list2 = []

source=['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
res=[]
for i in source:
    if 'SB' not in i:
        res.append(i)
print(res)

#反向遍历列表,不符合条件的,删除
for i in source[::-1]:
    if 'SB'  in i:
        source.remove(i)
print(source)


'''
4.求得指定元组中是字符串数据的总个数
指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9)
求的结果:3
'''
#方法1
ls = (1, 2, '3', '4', 5, '6', 7, 8, 9)
list1 = []
for i in ls:

    if isinstance(i, str):
        list1.append(i)
print(len(list1))

#方法2
ls = (1, 2, '3', '4', 5, '6', 7, 8, 9)
list1 = []
count = 0  #符合条件的自加1,起到计数的作用
for i in ls:

    if isinstance(i, str):
        list1.append(i)
        count += 1
print('字符串个数为%s' % count)

'''
5.求得指定元组中 str数据的个数 与 int数据的个数,存储到字典存放
指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9)
求的结果:{'str': 3, 'int': 6}
'''

# 方法1
tuple_refer=(1, 2, '3', '4', 5, '6', 7, 8, 9)
dic={}
inter=[]
string=[]
for i in tuple_refer:
    if isinstance(i,int):
        inter.append(i)
    else:
        string.append(i)

num_int=len(inter)
num_str=len(string)

dic['str']=num_str
dic['int']=num_int
print(dic)

#方法2
#定义计数器
count_str = 0
count_int = 0

#将元组转换为列表
tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9)
tuple_list = list(tuple_refer)

#判断字符串或者数字,如果判断到,就用各自的计数器自增1
for i in tuple_list:
    if isinstance(i, str):
        count_str += 1
    else:
        count_int += 1
print(dict({'str': count_str, 'int': count_int}))

#方法3
tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9)
#使用fromkeys方法为空字典定义key,默认值都设置为0
res = {}.fromkeys(['str', 'int'], 0)
#判断如果是字符串,就在'str'这个key的值加1
for i in tuple_refer:
    if isinstance(i, str):
        res['str'] += 1
    else:
        res['int'] += 1
print(res)

'''
6.列表数据的去重
指定列表:[3, 1, 2, 2, 1, 5, 9, 7]
求的结果:[3, 1, 2, 5, 9, 7]
'''

#方法1
list1=[3, 1, 2, 2, 1, 5, 9, 7]
 print(list(set(list1)))
  
#方法2 
-----> 定义一个新列表,然后遍历list1,将list1中的值取出来,判断是否包含在新列表list1_new中,如果不包含,就执行插入操作

list1=[3, 1, 2, 2, 1, 5, 9, 7]
list1_new=[]

for i in list1:
    if i not in list1_new:
        list1_new.append(i)
print(list1_new)

#方法3
list1 = [3, 1, 2, 2, 1, 5, 9, 7]
dic = {}.fromkeys(list1, 0)
dic_keys = dic.keys()
res=list(dic_keys)
print(res)

'''
7.回答字典能不能按索引取值?能不能切片?能去求长度?能否字典与字典拼接?成员运算判断的是key还是value
'''
# 字典不能按索引取值和切片
#字典可以求长度

#字典不可以进行拼接
dic = {'name': 'bob', 'age': 18}
dic3 = {'name2': 'bobbb', 'sex': 'male'}
res=dic.copy()
res.update(dic3)
print(res)
print(len(res))

#成员运算判断key
print('name' in res)
print('name2' in res)
print('age' in res)
print('sex' in res)

'''
8.修改所有以 Bi词汇(脏话) 开头或结尾的字符串,将 Bi词汇 替换为**
指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
运行结果:['Owen', 'Bob**', '**en', 'ZeroS', 'OSBO']
'''

source = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
for v in source:
    if v.startswith('SB') or v.endswith('SB'):
        index = source.index(v)
        source[index] = source[index].replace('SB', '**') #修改source列表里切片里的一个字符串,列表无法用replace
print(source)
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄