您的位置:首页 > 编程语言

[编程题目]泥塑课

2015-12-31 22:47 337 查看
虽然不是难题,但是我这个菜鸟还是写了三个小时。

题目:

小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。

小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。每组输入数据的第一行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友,最少也要有2个小朋友,每个小朋友在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示没有更多的班级了。

输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。



解题代码如下:

# coding: utf-8
"""
__title__   =  '泥塑课'
__mtime__   =  '15/12/31'
__author__  =  'XueWeihan'

"""

def get_input():
"""获取控制台输入的值
"""
_input = raw_input()
_input = str_to_int(_input)
return _input

def str_to_int(str):
try:
return int(str)
except Exception as e:
return str

def print_format(max_person, min_person):
print '%s took clay from %s.' % (max_person, min_person)

class Student(object):
def __init__(self, name, volume):
self.name = name
self.volume = volume

def handle(input_data):
"""处理逻辑
"""
# gruop_list 存放的是不同班级的list
group_list = []

# class_list 存放的是一个班级中Student的对象
class_list = []

# i_index 和 e_index用于把每个班级的数据分出来
i_index = 0
for fi_input_list in input_data:
if isinstance(fi_input_list, int):
e_index = i_index + fi_input_list + 1
else:
# 通过切片分出每个班级的数据(因为每个班级的第一个数据都是总数,不需要分析,故+1)
for i in input_data[i_index+1:e_index]:
# 分析每个同学的数据
student_data_list = [str_to_int(fi_person_data)
for fi_person_data in i.split(' ')]

volume = student_data_list[0] * student_data_list[1] * student_data_list[2]
name = student_data_list[3]

studnet = Student(name, volume)

class_list.append(studnet)
if class_list:
group_list.append(class_list)
i_index = e_index
# 当分析完一个班的数据之后,需要重新把class_list清空
class_list = []

# 找出每个班级中volume最大和最小的student对象
for fi_group_list in group_list:
max_num = max([fi_class_list.volume for fi_class_list in fi_group_list])
min_num = min([fi_class_list.volume for fi_class_list in fi_group_list])
max_obj = filter(lambda x :x.volume == max_num, fi_group_list)[0]
min_obj = filter(lambda x :x.volume == min_num, fi_group_list)[0]
print_format(max_obj.name, min_obj.name)

def main():
input_list = []
while 1:
_input = get_input()
if isinstance(_input, int):
# 当遇到-1时结束
if _input < 0:
handle(input_list)
break
input_list.append(_input)

main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: