我被困在我的python代码中

时间:2016-03-15 16:32:32

标签: python

我正在实施以下算法:
创建一个执行以下操作的函数manipulate_data

接受指定要使用的数据结构的字符串作为第一个参数listsetdictionary
接受基于指定的数据结构(例如,对于列表数据结构为[1,4,9,16,25])要操纵的数据作为第二参数 基于第一个参数
返回列表的反向或将项"ANDELA""TIA""AFRICA"添加到集合中并返回结果集 返回字典的键。

我的代码如下所示:

manipulate_data(data_type, data):
    data_type = 'list'
    data_type = 'set'
    data_type = 'dictionary'
    if data_type == 'list':
        data = [1, 4, 9, 16, 25]
        new_data = data[::-1]
        return  new_data
    elif data_type == 'set':
        data = set()
        new_set = data.add("ANDELLA", "TIA", "AFRICA")
        return  new_set
    elif data_type == 'dictionary':
        data = {"Name": "John", "Age": 26,"School": "Holy"}
        new_dict = data.keys()
        return new_dict
    else:
        raise ValueError

测试课程如下:

import unittest
class DataStructureTest(unittest.TestCase):
def setUp(self):
    self.list_data = [1,2,3,4,5]
    self.set_data = {"a", "b", "c", "d", "e"}
    self.dictionary_data = {"apples": 23, "oranges": 15, "mangoes": 3, "grapes": 45}

def test_manipulate_list(self):
    result = manipulate_data("list", self.list_data)
    self.assertEqual(result, [5,4,3,2,1], msg = "List not manipulated correctly")

def test_manipulate_set(self):
    result = manipulate_data("set", self.set_data)
    self.assertEqual(result, {"a", "b", "c", "d", "e", "ANDELA", "TIA", "AFRICA"}, msg = "Set not manipulated correctly")

def test_manipulate_dictionary(self):
    result = manipulate_data("dictionary", self.dictionary_data)
    self.assertEqual(result, ["grapes", "mangoes", "apples", "oranges"], msg = "Dictionary not manipulated correctly")

我在执行代码时遇到错误。

1 个答案:

答案 0 :(得分:1)

你的功能毫无意义,你的传递" data_type"然后在顶部设置三次。这将强制解释器使用最后一个值集,在您的情况下,是"字典":

尝试按如下方式编写:

def manipulate_data(data):
    if type(data) is list:
        return [1, 4, 9, 16, 25]
    elif type(data) is set:
        return set(["ANDELLA", "TIA", "AFRICA"])
    elif type(data) is dict:
        data = {"Name": "John", "Age": 26, "School": "Holy"}
        return data.keys()
    else:
        raise ValueError

看起来好像你已经知道了这些类型,因此将它作为字符串传递是没有意义的,因为它可以使用"类型"来检查。

您的语法错误是因为您忘记包含" def"在声明函数名之前。