跳转至

Python练习:循环

题目1

有如下的2个字符串

str1 = '''
熊宁
杰益

王伟伟

青芳

玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''

str2 = '''
焦候涛 
熊宁 
玉琴 

骆龙 

韩旭 
杨高旺

杰益  

莫福  

伟伟

李福  
'''

请写一个程序

找出 str1 中所有 str2 中不存在的人名,并且

找出 str2 中所有 str1 中不存在的人名

答案视频讲解1 - 伪代码理清思路


请大家点击此处链接,观看讲解视频

答案视频讲解2 - 根据伪代码实现程序


请大家点击此处链接,观看讲解视频



题目2

有如下的字符串,记录了三国人物的名字和年龄

ageTable = '''
    诸葛亮, 28
    刘备, 48
    刘琦, 25
    赵云, 32
    张飞, 43
    关羽, 45
'''

请写一个程序将其中 30岁以上和以下的人分别打印出来,类似这样

大于等于30岁的人有:
刘备
赵云
张飞
关羽

小于30岁的人有:
诸葛亮
刘琦

答案视频讲解


请大家点击此处链接,观看讲解视频



题目3

关羽 和张飞 正在玩 剪刀石头布 的游戏。

写一个函数calculate_score, 参数是列表, 里面包含了n个元素也是列表。

比如 像这样 [["剪刀", "石头"], ["布", "剪刀"], ["剪刀", "剪刀"]]

n 个元素代表 n局 比赛,用列表表示,比如 ["剪刀", "石头"]

其中第1个元素表示关羽打出的手势,第2个元素是张飞打出的手势。

函数要计算出谁赢得次数多,输出比赛结果。

如果他们打成平手,输出“平局”。

比如:

calculate_score([["剪刀", "石头"], ["布", "剪刀"], ["剪刀", "剪刀"]]) 
输出应该是 张飞 3局赢了2局平手一局张飞胜出


calculate_score([["布", "石头"], ["石头", "剪刀"], ["石头", "剪刀"]]) 
输出应该是 关羽 3局赢了3局关羽胜出

视频讲解

和VIP学员甲讲解本题,当你毫无思路时,如何用伪代码理清思路

和VIP学员乙讲解本题的开发思路,他已经可以开发出一部分代码,但是关键点卡住了



补充练习

VIP实战班学员请联系老师获取补充练习,并做阶段学习交流

您需要高效学习,找工作? 点击咨询 报名实战班

点击查看学员就业情况

题目1-答案

str1 = '''
熊宁
杰益

王伟伟

青芳

玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''

str2 = '''
焦候涛 
熊宁 
玉琴 

骆龙 

韩旭 
杨高旺

杰益  

莫福  

伟伟

李福  
'''

# 注意:有的人名 可能是另外一个人名的一部分,
# 比如 伟伟 是王伟伟 的一部分, 
# 所以我们不能 通过 'name in str1' 这样的方式判断


# 先定义一个函数,可以把参数字符串中的人名都放入一个列表中

def getNameList(namesStr):
    tmp = namesStr.splitlines()

    # 去掉其中的空行和人名前后的空格
    names = []
    for name in tmp:
        name = name.strip()
        if name == '':
            continue

        names.append(name)

    return names


names1 = getNameList(str1)
names2 = getNameList(str2)

print('str1中独有的人名是:')
for name in names1:
    if name not in names2:
        print(name)

print('\n\n')

print('str2中独有的人名是:')
for name in names2:
    if name not in names1:
        print(name)    



题目2-答案

ageTable = '''
    诸葛亮, 28
    刘备, 48
    刘琦, 25
    赵云, 32
    张飞, 43
    关羽, 45
'''



# 先转换成如下格式的列表
# ageList = [
#     '诸葛亮, 28',
#     '刘备, 48',
#     '赵云, 42',
#     ....
# ]

ageList = []
for item  in ageTable.split('\n'):
    # 跳过空行
    if item.strip()  == '':
        continue

    ageList.append(item)

g30 = []  # 大于30岁人员列表
l30 = []  # 小于30岁人员列表
for oneman  in ageList:
    name,age   = oneman.split(',')
    age = int(age.strip())
    name = name.strip()
    if age >= 30:
        g30.append(name)
    else:
        l30.append(name)


print('大于等于30岁的人有:')
for man in g30:
    print(man)


print('\n小于30岁的人有:')
for man in l30:
    print(man)



题目3-答案

def calculate_score(rounds):
    guan_win_round = 0
    zhang_win_round = 0
    ping_round   = 0

    # 取出列表里面每一局round,进行如下处理:
    for round in rounds:
        guan = round[0]
        zhang = round[1]

        # 判断谁赢
        win = None
        if guan == '剪刀':
            if zhang == '石头':
                win = 'z'
            elif zhang == '剪刀':
                win = '='
            elif zhang == '布':
                win = 'g'
        elif guan == '石头':
            if zhang == '石头':
                win = '='
            elif zhang == '剪刀':
                win = 'g'
            elif zhang == '布':
                win = 'z'
        elif guan == '布':
            if zhang == '石头':
                win = 'g'
            elif zhang == '剪刀':
                win = 'z'
            elif zhang == '布':
                win = '='

        if win == 'g':
            print('关羽赢')
            guan_win_round += 1
        elif win == 'z':
            print('张飞赢')
            zhang_win_round += 1
        elif win == '=':
            print('平局')
            ping_round  += 1

    print('\n=============\n')
    print(f'关羽赢{guan_win_round}次')
    print(f'张飞赢{zhang_win_round}次')
    print(f'平局{ping_round}次')

    if guan_win_round> zhang_win_round:
        print('关羽赢')
    elif  guan_win_round < zhang_win_round:
        print('张飞赢')
    else:
        print('平局')

calculate_score([['剪刀', '石头'], ['布', '剪刀'], ['剪刀', '剪刀']])