python自编一个循环计算题_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实战班学员请联系老师获取补充练习,并做阶段学习交流

题目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([['剪刀', '石头'], ['布', '剪刀'], ['剪刀', '剪刀']])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值