Python 如何从给定的元组列表中提取和比较数据?
代码: “数据”中的前两个元素是用户输入的小时和分钟。代码应采用用户输入的值,即此处的数据。并应检查当前时间,并应打印i[2],i[3],i[4],如代码所示 1) 我只想把值打印一次。但是,它会持续检查并打印值1整分钟。break语句不起作用Python 如何从给定的元组列表中提取和比较数据?,python,python-3.x,list,tuples,python-datetime,Python,Python 3.x,List,Tuples,Python Datetime,代码: “数据”中的前两个元素是用户输入的小时和分钟。代码应采用用户输入的值,即此处的数据。并应检查当前时间,并应打印i[2],i[3],i[4],如代码所示 1) 我只想把值打印一次。但是,它会持续检查并打印值1整分钟。break语句不起作用 2) 另外,是否可以通过某种方式检查而不打印“无” 我对代码做了一些更改 我不知道你为什么用While=True。正因为如此,它并没有脱离循环。所以我把它拿走了 刚刚添加了else语句以供检查,您可以将其删除 import datetime data
2) 另外,是否可以通过某种方式检查而不打印“无” 我对代码做了一些更改 我不知道你为什么用While=True。正因为如此,它并没有脱离循环。所以我把它拿走了 刚刚添加了else语句以供检查,您可以将其删除
import datetime
data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]
def calc(data):
print(data) #prints the whole table
while True:
h=datetime.datetime.today().strftime("%H")
mi=datetime.datetime.today().strftime("%M")
# z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
for i in data:
if i[0] == h and i[1]==mi:
print (i[2],i[3],i[4])
# sleep(60)
break
if __name__ == '__main__':
calc(data)
已编辑(现已生效):
如果我理解正确,您希望您的程序运行,直到找到当前时间与
数据中的一个元组(I
):(数据[I][0],数据[I][1])
)中指定的时间之间的匹配,然后打印元组的其余部分:I[2:5]
中断
在for
循环范围内,而不是您的while
循环。您退出for
循环,是的,而不是您的无限while True
循环
我宁愿在match\u not\u found:
时执行,然后设置match\u not\u found=True
,并在break
语句之前有一行match\u not\u found=False
如果要使用元组的所有剩余项,可以使用列表切片
我添加了一个额外的if
,以排除打印项目的None
就像这样:
import datetime
data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '52','fan is on', 'AC is on', None)]
def calc(data):
print(data) #prints the whole table
while True:
h=datetime.datetime.today().strftime("%H")
mi=datetime.datetime.today().strftime("%M")
# z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
for i in data:
if i[0] == h and i[1]==mi:
print (i[2],i[3],i[4])
# sleep(60)
exit()
if __name__ == '__main__':
calc(data)
如果当前时间是上午10:30,用户输入的时间为-data=[('10','31','fan is on','AC is on',none)]。然后,我们需要检查直到用户时间==当前时间,并打印“风扇打开”,“空调打开”,无。效果很好。谢谢顺便问一下,我们可以不打印none吗?这就是原因,我添加了while--如果当前时间是上午10:30,用户输入的时间为-data=[('10','31','fan is on','AC is on',none)]。然后,我们需要检查直到用户时间==当前时间并打印“风扇打开”,“空调打开”,无。@captainalooreptin“那么你的意思是,直到条件变为真,我们需要检查吗?”。如果是这种情况,请将while循环放回,并在If循环中添加exit()
after print语句YUP。工作!谢谢你能告诉我为什么中断声明不起作用吗?为什么它会进入一个无限循环?@captainalooreport'in Break就是从循环中走出来。用简单的话来说就是退出执行。将答案标记为正确
import datetime
data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '52','fan is on', 'AC is on', None)]
def calc(data):
print(data) #prints the whole table
while True:
h=datetime.datetime.today().strftime("%H")
mi=datetime.datetime.today().strftime("%M")
# z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
for i in data:
if i[0] == h and i[1]==mi:
print (i[2],i[3],i[4])
# sleep(60)
exit()
if __name__ == '__main__':
calc(data)
import datetime
data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]
def calc(data):
print(data) #prints the whole table
match_not_found = True
while match_not_found:
h=datetime.datetime.today().strftime("%H")
mi=datetime.datetime.today().strftime("%M")
# z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
for i in data:
if i[0] == h and i[1]==mi:
print ([j for j in i[2:5] if j != None])
match_not_found = False
break
if __name__ == '__main__':
calc(data)