Python 通过函数添加减法值,并将数据附加到for循环的列表中

Python 通过函数添加减法值,并将数据附加到for循环的列表中,python,Python,这里是一个非计算机科学的家伙的问题,但我正在尝试制作一个程序,可以根据事件的时间表编译数字(希望这一切都有意义) Schedule是一个嵌套字典: schedule = { '0:00': {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9

这里是一个非计算机科学的家伙的问题,但我正在尝试制作一个程序,可以根据事件的时间表编译数字(希望这一切都有意义)

Schedule是一个嵌套字典:

schedule = {

        '0:00':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '0:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '1:00':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '1:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '2:00':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '2:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '3:00':  {'Floor1': 'ON', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '3:30':  {'Floor1': 'ON', 'Floor2': 'ON', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '4:00':  {'Floor1': 'OFF', 'Floor2': 'ON', 'Floor3': 'ON', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '4:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'ON', 'Floor4': 'ON', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '5:00':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'ON', 'Floor5': 'ON', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},  
        '5:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'ON', 'Floor6': 'ON', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '6:00':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'ON', 'Floor7': 'ON', 'Floor8': 'OFF' , 'Floor9': 'OFF'},
        '6:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'ON', 'Floor8': 'ON' , 'Floor9': 'OFF'},
        '7:00':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'ON' , 'Floor9': 'OFF'},
        '7:30':  {'Floor1': 'OFF', 'Floor2': 'OFF', 'Floor3': 'OFF', 'Floor4': 'OFF', 'Floor5': 'OFF', 'Floor6': 'OFF', 'Floor7': 'OFF', 'Floor8': 'OFF' , 'Floor9': 'OFF'}   
       }
我可以循环查看
时间表
字典中的每个键,该字典将打印时间/键:

for key, value in schedule.items():
    print(key)
印刷品:

0:00
0:30
1:00
1:30
2:00
2:30
3:00
3:30
4:00
4:30
5:00
5:30
6:00
6:30
7:00
7:30
我很好奇,想看看我是否可以创建一个程序,可以循环通过每个键,并总结出在给定时间内的功耗。总楼面面积1、楼面面积2、楼面面积4等

这里有很多代码,很抱歉有任何提示如何做的更好,非常感谢。。。但是如果我运行这个

import time


def floor1(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 47.1  
    else:
        return 0

def floor2(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 31.8
    else:
        return 0

def floor4(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 45.69  
    else:
        return 0

def floor5(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 77.2 
    else:
        return 0

def floor6(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 36.6 
    else:
        return 0

def floor7(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 59.9 
    else:
        return 0

def floor8(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 85.2
    else:
        return 0


def floor9(run='OFF'):
    kW = 0 
    if run == 'ON':
        return 61.1  
    else:
        return 0
    
    
    
    
total_computed_data = []


for i in range(len(schedule.keys())):

    this_loop_data = []
    
    for key, value in schedule.items():
    
        floor1 = floor1(schedule[key]['Floor1'])
        print(floor1)
        this_loop_data.append(floor1)

        floor2 = floor2(schedule[key]['Floor2'])
        print(floor2)
        this_loop_data.append(floor2)
        
        floor4 = floor4(schedule[key]['Floor4'])
        print(floor4)
        this_loop_data.append(floor4)
        
        floor5 = floor5(schedule[key]['Floor5'])
        print(floor5)
        this_loop_data.append(floor5)

        floor6 = floor6(schedule[key]['Floor6'])
        print(floor6)
        this_loop_data.append(floor6)
        
        floor7 = floor7(schedule[key]['Floor7'])
        print(floor7)
        this_loop_data.append(floor7)
        
        floor8 = floor8(schedule[key]['Floor8'])
        print(floor8)
        this_loop_data.append(floor8)
        
        floor9 = floor9(schedule[key]['Floor9'])
        print(floor9)
        this_loop_data.append(floor9)

        total_computed_data.append(sum(this_loop_data))
        time.sleep(1)

    
我得到一个错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-14-96fa74c3978a> in <module>
     71     for key, value in schedule.items():
     72 
---> 73         floor1 = floor1(schedule[key]['Floor1'])
     74         print(floor1)
     75         this_loop_data.append(floor1)

TypeError: 'int' object is not callable    
TypeError回溯(最近一次调用)
在里面
71对于键,schedule.items()中的值:
72
--->73楼层1=楼层1(附表[图例]['floor1'])
74印刷品(1楼)
75此循环数据。追加(1)
TypeError:“int”对象不可调用

我的想法是能够为不同的模拟修改
计划
字典,并查看/绘制
总计算数据的不同变化。在这种情况下,我建议添加
print()
语句以查看发生了什么。例如,您可以将
print(floor1)
添加到代码中以查看其值

您很快就会发现,您使用名称
floor1
有两个不同的目的。第一次执行循环时,
floor1
是一个函数。但是,您可以立即将名称
floor1
指定给该函数的返回值。现在,下次循环迭代时,它将尝试将该值作为函数处理,并使用参数调用它。你可以想象,这是行不通的

这里的修复方法是使用两个不同的名称。不要在两件不同的事情上使用相同的名称

此外,我看到您有
floor1
floor8
。当你开始用数字来命名事物时,这是一个迹象,表明你应该找到更好的方法。在大多数情况下,应该使用列表而不是编号的变量名。这里可能更适合使用
dict
,因为您的输入数据有
“Floor1”
等作为键

例如,我会制作一个
dict
,保存每层楼的能源消耗量:

energy = {
   'Floor1': 47.1,
   'Floor2': 31.8,
    # etc...
} 
然后我会做一些类似的事情

for time, floors in schedule.items():
    for floor, on_or_off in floors.items():
        floor_energy = 0
        if on_or_off == 'ON':
            floor_energy = energy[floor]
        print(floor_energy)
注意我是如何在这里循环内部字典的。在本例中,我只是在检测到电流是开还是关后打印出结果。我把计算总数作为练习留给读者。作为提示,我建议使用dict来存储总数


还要注意,我使用的描述性名称不仅仅是
。外键显然是时间,内键是地板。我在这里选择的名字可能可以进一步改进。选择好的名称很难。

你用函数本身的返回值(一个int…)覆盖函数名。明白了吗?谢谢,你有机会展示一些推荐/最佳实践的代码吗?@HenryHub Done。我没有完成整个练习,但我希望这能让我了解我的想法。