Python学习第五天课后练习 2019.07.18

Python学习第五天课后练习 2019.07.18

1) 移除 name 变量对应的值两边的空格,并输出处理结果

程序代码:
name = " aleX"
if name[0]==' ':
    name=name[1:]
if name[-1]==' ':
    name=name[:-1]
print(name)
运行结果:

aleX

2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果

程序代码:

name = " aleX"
if name[:2]=='al':
    print('name变量是以al开头的')
else:
    print('name变量不是以al开头的')
运行结果:

name变量不是以al开头的

3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果

程序代码:
name = " aleX"
if name[-1]=='X':
    print("name变量是以X为结尾的")
else:
    print("name变量不是以X为结尾的")
运行结果:

name变量是以X为结尾的

4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果

程序代码:
name = " aleX"
num = len(name)
for i in range(num):
    if name[i]=='l':
        name = name.replace('l','p')
print(name)
运行结果:

apeX

5) 将 name 变量对应的值根据 “l” 分割,并输出结果

程序代码:
name = " aleX"
new_name = name.split('l')
print(new_name)
运行结果:

[' a', 'eX']

6) 将 name 变量对应的值变大写,并输出结果

程序代码:
name = " aleX"
new_name = name.upper()
print(new_name)
运行结果:

ALEX

7) 将 name 变量对应的值变小写,并输出结果

程序代码:
name = " aleX"
new_name = name.lower()
print(new_name)
运行结果:

alex

8) 请输出 name 变量对应的值的第 2 个字符

程序代码:
name = " aleX"
print(name[1])

运行结果:

a

9) 请输出 name 变量对应的值的前 3 个字符

程序代码:
name = " aleX"
print(name[:3])
运行结果:

al

10) 请输出 name 变量对应的值的后 2 个字符

程序代码:
name = " aleX"
print(name[-2:])
运行结果:

eX

11) 请输出 name 变量对应的值中 “e” 所在索引位置

程序代码:
name = " aleX"
num = len(name)
for i in range(num):
    if name[i] == 'e':
        print(i)
运行结果:

3

12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo

程序代码:
name = " aleX"
new_name = name[:-1]
print(new_name)
运行结果:

ale

1.将以下数据存储为字典类型

# # 数据:info = "name:Owen|age:18|gender:男"
# # 结果:{'name': 'Owen', 'age': 18, 'gender': '男'}
程序代码:
info = "name:Owen|age:18|gender:男"
new_info = info.split('|')
dict_info = {}
list_info=[]
num = len(new_info)
for i in range(num):
   list_info += new_info[i].split(':')
list_num = len(list_info)
for i in range(0,list_num,2):
    dict_info.setdefault(list_info[i],list_info[i+1])
print(dict_info)
运行结果:

2.完成数据的去重

# # 数据:t3 = [1, 2, 1, 2, 3, 5, 9]
# # 结果:t3 = [1, 2, 3, 5, 9]
程序代码:
t3 = [1, 2, 1, 2, 3, 5, 9]
# 先将序列转为集合去除重复值,再将集合转回序列输出
new_t3 = list(set(t3))
print(new_t3)
运行结果:

[1, 2, 3, 5, 9]

3.有如下值集合 [11,22,33,44,55,66,77,88,99,90...]

# # 将所有大于 66 的值保存至字典的第一个key中
# # 将小于 66 的值保存至第二个key的值中
# # 即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
程序代码:
list_str = [11,22,33,44,55,66,77,88,99,90]
k1_list,k2_list = [],[]
for i in list_str:
    if i>66:
        k1_list.append(i)
    else:
        k2_list.append(i)
dict_str = {'k1':k1_list,'k2':k2_list}
print(dict_str)
运行结果:

4.完成录入电话本(选做)

# # 需求:
# '''
# -- 从键盘中录入姓名(不区分大小写):
# 	-- 姓名必须是全英文字母组成,不是则重新录入姓名,如果是q,代表退出
# -- 从键盘中再录入电话:
# 	-- 电话必须为字符串中是数字(如'12312312312')且长度必须是11位
# -- 如果出现姓名相同,则保留最后一次电话号码
# -- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成
# 	-- {
#     	'O': {
#     		'Owen': '13355667788'
#     	}
# 	}
# 最终数据,分组名一定大写:
# {
#     'E': {
# 		'egon': '17788990000',
# 		'engo': '16633445566'
#     },
#     'O': {
#     	'Owen': '13355667788'
#     }
# }
# '''
程序代码:
# 定义一个字典电话本,用来接收存储的信息
dict_nums = {}
# 定义一个信息字典,用来存储姓名和手机号码
dict_info = {}
# 定义一个用来接收新的信息的字典

# 定义个序列用来判断输入的name是否有数字
list_num = ['0','1','2','3','4','5','6','7','8','9']
# 定义一个用来判断的变量
check_name_boolen = True
# 用来判断是不是要退出整个程序
check_quit = True
check_num_boolen = True
# 定义一个判断输入姓名的函数
def check_name(name):
    global check_name_boolen
    for i in name:
        if i in list_num:
            print("你输入的name中包含了数字,请重新输入!")
            check_name_boolen = False
            break
        else:
            check_name_boolen = True
    return check_name_boolen
# 定义一个判断输入姓名的函数
def check_num(num):
    global check_num_boolen
    num_len = len(num)
    for i in num:
        if i not in list_num or num_len !=11:
            print("你输入的电话号码有误,需要重新输入!")
            check_num_boolen = False
            break
        else:
            check_num_boolen = True
    return check_num_boolen

#### 程序主题
while check_quit:
    name = input("请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):")
    # 对name值进行判断
    if name=='q':
        print("你选择了退出程序!")
        check_quit = False
        break
    check_name(name)
    while check_name_boolen != True:
        name = input("请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):")
        check_name(name)
        if name == 'q':
            print("你选择了退出程序!")
            check_quit = False
            break
    num = input("请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):")
    # 对输入的电话号码进行判断
    check_num(num)
    while check_num_boolen != True:
        num = input("请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):")
        check_num(num)

    # 到了这的时候就已经能够拿到了 有效的输入数据 name 和num.接下来要做的就是将这些数据放到字典中就行了
    new_dict = {name,num}
    old_dict = dict_nums.values()

    if dict_info == {}:
        dict_info.setdefault(name,num)
    else:
        for i in dict_info.keys():
            if i == name:
                dict_info[name] = num
        dict_info.setdefault(name, num)
    # check_quit = False
    #for i in dict_nums.keys():
    if dict_nums == {}:
        dict_nums.setdefault(name[0].upper(), dict_info)
    else:
        for i in dict_nums.keys():
             if i == name[0].upper():
                dict_nums[i] = new_dict
        dict_nums.setdefault(name[0].upper(), new_dict)
print(dict_nums)
运行结果:

请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):forever
请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):13721111111
请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):Owen
请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):12233445566
请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):q
你选择了退出程序!

最后一道题有问题,还需要修改
最后一道题已经修改了,修改如下:

# 定义一个字典电话本,用来接收存储的信息
dict_nums = {}
# 定义一个信息字典,用来存储已经存入的姓名和手机号码
old_dict ={}
# 定义一个用来接收新的信息的字典
new_dict = {}

# 定义个序列用来判断输入的name是否有数字
list_num = ['0','1','2','3','4','5','6','7','8','9']
# 定义一个用来判断的变量
check_name_boolen = True
# 用来判断是不是要退出整个程序
check_quit = True
check_num_boolen = True
# 定义一个判断输入姓名的函数
def check_name(name):
    # 获取全局变量check_name_boolen
    global check_name_boolen
    # 循环一下name函数判断名字 如果名字里有数字就判断输入错误
    for i in name:
        if i in list_num:
            print("你输入的name中包含了数字,请重新输入!")
            # 将 检验姓名的变量置为 False
            check_name_boolen = False
            # 跳出for 循环
            break
        else:
            # 如果名字没有问题就返回true
            check_name_boolen = True
    # 该函数的返回值 用来反馈输入的name值是否符合条件
    return check_name_boolen

# 定义一个判断输入姓名的函数
def check_num(num):
    global check_num_boolen
    num_len = len(num)
    for i in num:
        if i not in list_num or num_len !=11:
            print("你输入的电话号码有误,需要重新输入!")
            check_num_boolen = False
            break
        else:
            check_num_boolen = True
    return check_num_boolen

#### 程序主题
while check_quit:
    name = input("请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):")
    # 对name值进行判断
    if name=='q':
        print("你选择了退出程序!")
        check_quit = False
        break
    # 调用 检验姓名函数 对输入的值进行检验
    check_name(name)
    # 如果函数返回输入的name值不对,会要求重新输入
    while check_name_boolen != True:
        name = input("请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):")
        # 再次调用姓名核验 函数对名字进行核验
        check_name(name)
        # 选择退出程序
        if name == 'q':
            print("你选择了退出程序!")
            check_quit = False
            break
    # 检查是否退出了
    if check_quit == False:
        break

    #  输入手机号码
    num = input("请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):")
    # 对输入的电话号码进行判断
    check_num(num)
    # 如果输入的号码不正确 就会要求重新输入
    while check_num_boolen != True:
        num = input("请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):")
        # 调用号码检查函数对输入的号码进行判断
        check_num(num)

    # 执行完上面的代码 还能执行到这的时候就已经说明 输入的数据是有效的
    # 到了这的时候就已经能够拿到了 有效的输入数据 name 和num.接下来要做的就是将这些数据放到字典中就行了

    # 这是一个 新的字典 用来放新获取来的数据
    new_dict = {name:num}
    # 判断总的电话字典是否为空 如果不为空且 电话本中 已经存在了此次输入的姓名的首字母
    if dict_nums != {} and name[0].upper() in dict_nums:
        # 将原有字母里存储的用户的信息 传给old_dict 字典
        old_dict = dict_nums[name[0].upper()]
    # 如果old_dict 字典为空
    if old_dict == {}:
        # 将此次输入的信息放进old_dict 字典中
        old_dict[name] = num
    else:
        # 如果这个字典不为空 则说明 里面已经存储了用户信息,需要对用户信息和此次输入的信息进行核验
        for i in old_dict:
            # 如果此次输入的姓名已经在电话本中存在
            if i == name:
                # 那么就更新原有电话本中该用户的手机号码
                old_dict[name] = num
        # 如果字典不为空 就将此处输入的信息添加到原有的old_dict中
        old_dict.setdefault(name,num)
    # 如果电话本是空的 就将第一次输入的信息放进去
    if dict_nums == {}:
        dict_nums.setdefault(name[0].upper(), new_dict)
    else:
        # 如果电话本不是空的 就对电话本进行循环
        for i in dict_nums.keys():
            # 如果此次输入的姓名的首字母已经存在了电话本中
             if i == name[0].upper():
                 # 就把电话本中的信息更新为 已经添加过此次输入进来数据的old_dict字典中
                dict_nums[i] = old_dict
        # 如果电话本中没有这个此次输入人的首字母,且 字典里已经有了数据,就将新的这个用户在电话本中新开辟一条数据
        dict_nums.setdefault(name[0].upper(), new_dict)
# 打印输出最后电话本中的信息
print(dict_nums)

运行结果:

请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):forever
请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):13722223333
请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):nick
请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):18888888888
请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):owen
请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):16666666666
请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):Owen
请输入手机号码(要求长度为11位且必须都为数字,输入错误需重新输入):15555555555
请输入姓名(要求为大小写英文,输入数字需重新输入,按q退出):q
你选择了退出程序!

posted @ 2019-07-18 21:46  foreversun92  阅读(374)  评论(0编辑  收藏  举报