Python 通过函数添加减法值,并将数据附加到for循环的列表中
这里是一个非计算机科学的家伙的问题,但我正在尝试制作一个程序,可以根据事件的时间表编译数字(希望这一切都有意义) Schedule是一个嵌套字典: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 = {
'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。我没有完成整个练习,但我希望这能让我了解我的想法。