File size: 2,414 Bytes
4222961
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Implemented by 李鲁鲁
#
# ChatHaruhi X 主播女孩重度依赖,
#
# 母项目主页 https://github.com/LC1332/Chat-Haruhi-Suzumiya
#
# 我希望实现一个Agent类
#
# 这个agent有多个属性(目前设计有 Stress , Darkness和Affection)
#
# 可以通过类似agent["Stress"]这样的形式调用
#
# 请用self.attributes 字典形式存储,并且重载[]操作符使得agent的行为和字典一致
#
# 同时实现一个成员函数apply_attribute_change( attribute_change )
#
# attribute_change是一个形如{"Darkness":-1, "Stress":1}的字典,如果字典key的值在self.attributes中存在,则累加在上面,不然则汇报warning并跳过

import json

class Agent:

    def __init__(self, attributes_str=None):
        if attributes_str:
            attributes = json.loads(attributes_str)
        else:
            attributes = {
            "Stress": 0,
            "Darkness": 0, 
            "Affection": 0
            }
        self.attributes = attributes

    def save_to_str(self):
        return json.dumps(self.attributes, ensure_ascii=False)

    def __getitem__(self, key):
        return self.attributes.get(key)

    def __setitem__(self, key, value):
        self.attributes[key] = value

    def apply_attribute_change(self, attribute_change):
        for key, value in attribute_change.items():
            if key in self.attributes:
                self.attributes[key] += value
                if self.attributes[key] < 0:
                    self.attributes[key] = 0
            else:
                print(f"Warning: {key} not in attributes, skipping")

    def in_condition( self, condition ):
        if condition is None:
            return True
        if condition[0] in self.attributes:
            return self.attributes[condition[0]] >= condition[1] and self.attributes[condition[0]] <= condition[2]
        else:
            return False

if __name__ == "__main__":
    # 示例用法
    agent = Agent()
    print(agent["Stress"])  # 输出 0
    agent["Stress"] += 1
    print(agent["Stress"])  # 输出 1
    agent.apply_attribute_change({"Darkness": -1, "Stress": 1})
    print(agent["Darkness"])  # 输出 -1
    print(agent["Stress"])  # 输出 2
    agent.apply_attribute_change({"Nonexistent": 5})  # 输出 Warning: Nonexistent not in attributes, skipping

    condition = ('Stress', 0, 19)

    print( agent.in_condition( condition ) )