泥塑课

      小米是一个幼儿园老师,每学期的泥塑课上,她都会给每个学生发不超过250立方厘米的等量橡皮泥,教大家做泥塑。

在上课过程中,她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮泥,于是她决定,在正式开始做泥塑前,让

大家把手里的橡皮泥都捏成一个立方体,并且测量手里捏好的橡皮泥的长、宽和高。这样,她就可以知道谁被谁抢了橡皮泥了。

      小米老师在不同的学期可能会带一个班或者同时带多个班,因此输入数据可能有一组或者多组。每组输入数据的第一

行为一个整数n,表示了这个班的小朋友数,之后n行每行包括了由空格分隔的三个整数和一个字符串,那个字符串表示了

小朋友的名字,前面三个整数则是这个学生手里橡皮泥块的长、宽、高数据。按照幼儿园的规定,每个班最多有9个小朋友

,最少也要有2个小朋友,每个小朋友在学籍系统中的名称不超过8个字符长。当出现一个班级的小朋友数为-1时,表示

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

样例输入

3 10 10 2 Jill

5 3 10 Will

5 5 10 Bill

4 2 4 10 Cam

4 3 7 Sam

8 11 1 Graham

6 2 7 Pam

-1

样例输出

Bill took clay from Will.

Graham took clay from Cam.

#!/usr/bin/env python3.5


def main():
    n = int(input('Please iuput infomation:\n'))
    name = []
    g_tiji = []
    while n != -1:                  #-1退出
        if 1 < n < 10:   
            j_tiji = []             #保存当前班级的体积的列表
            j_name = {}             #保存当前班级体积与名字的对应的字典
            for i in range(n):
                info = []
                info = input().split(' ')  #按照空格将一行输入保存在列表info
                tiji = int(info[0]) * int(info[1]) * int(info[2])
                j_name[info[3]] = tiji     #将名字与体积保存
                j_tiji.append(tiji)        #将体积保存
            g_tiji.append(j_tiji)          #将保存当前班级所有体积的列表作为一项加入另一个列表
            name.append(j_name)            #将保存当前班级所有名字和体积的字典作为哦一项加入另一个列表
        else:
            print('INPUT ERROR')
            break
        n = int(input())
    for i in range(len(name)):             #计算班级个数
        item = g_tiji[i]                   #第i+1个班级的体积
        itemss = name[i]                   #第i+1个班级的名字与体积
        item.sort()                        #体积排序
        for key, value in itemss.items():  #取出名字与体积
            if value == item[-1]:          #若二者体积相等打印 item[-1] 倒数第一项
                print('%s' % key + ' 拿了 ', end='')
                break
        for key, value in itemss.items():  #相等打印 
            if value == item[0]:
                print('%s' % key + ' 的橡皮泥')
                break


if __name__ == '__main__':
    main()

本次问题存在:pep8风格不熟悉,仍然是过程式解决思路,对于python语法还不熟悉,没有进行输错判断以及处理

思路:将输入按照每行读取,并按照空格分为一个列表,将列表前三个数转化为int后计算体积保存在列表,将name+体积保存在字典,然后将列表,字典添加到函数全局的两个列表(这样做为了保存多个班级)。输入完毕在取出两个列表的同下标的项(一项原型为列表,另一项原型为字典),用列表进行排序,用字典进行查找name。

其他:如果每次输入完一个班级就输出结果就不需要这么复杂的全部保存后输出,直接比较输出即可(我看见c语言的实现过程就是这样的,深深地被欺骗了) 如果仍要最后统一输出的话直接先比较把结果保存,不过也懒得写了=_=。

posted @ 2016-12-27 16:12  llspace  阅读(301)  评论(0)    收藏  举报