[编程题目]泥塑课
2015-12-31 22:47
337 查看
虽然不是难题,但是我这个菜鸟还是写了三个小时。
题目:
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑。在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。
小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。每组输入数据的第一行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友,最少也要有2个小朋友,每个小朋友在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示没有更多的班级了。
输出行数与小米老师带的班级数相同,形式为“X took clay from Y.”,具体请参考样例输出。
解题代码如下:
题目:
小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过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()
相关文章推荐
- 2015年编程方面的总结
- 解决EditorLineEnds.ttr被锁定导致Delphi2006-2010无法启动的问题
- C++实现DPM/LatentSVM 完整代码下载 --- 第四篇
- 《The C++ Programming Language》摘抄与总结——关于
- python递归深度报错--RuntimeError: maximum recursion depth exceeded
- Spring - Jdbc的使用 和 Spring进行事务控制
- PHP---LAMP初步
- Hadoop系列-Windows 环境中 Eclipse 用Maven构建Hadoop项目
- 3、进入32位模式并导入C语言
- Perfoce服务器代码迁移
- Good Bye 2015 A
- 编程之美 - 烙饼问题
- java学习之方法重载
- python语法总结
- python中元组的常用方法
- python中查找excel某一列的重复数据 剔除之后打印
- Python修改Excel数据的实例代码
- python往某一行行尾追增内容
- python使用mysql数据库
- python学习(一)pycharm安装配置篇