所以我不确定如何在搜索中说出这个,所以我会告诉你细节。 我正在使用nfc阅读器,如果找到了卡片,则会执行操作。我想要做的是添加一个部分,如果卡不在数据库中打印"未知卡"
基本上是我的脚本。 max =文本文件中的行总和 cardid = card uid#
for i in range(max)
with open(....) as file
card = file.readlines()[i]
if cardid == card
print "card found"
这就是我到目前为止所拥有的。它按预期工作。我能看到的唯一解决方法是添加一个变量' cardfound'这样做
cardfound = 0
for i in range(max)
with open(....) as file
card = file.readlines()[i]
if cardid == card
print "card found"
cardfound = 1
if cardfound == 0
print "unknown card"
有更好的方法吗?
答案 0 :(得分:3)
首先,你一遍又一遍地阅读文件。阅读一次就足够了。
至于其他语言 - 在大多数语言中,你必须基本上做你所做的事情,如果你发现了某些东西,就会在某个地方有一个标记。但是,Python有一个很酷的for...else
形式:
with open(....) as file:
for card in file.readlines():
if card == cardid:
print "OKAY!!!"
break
else:
print "Sad now."
答案 1 :(得分:2)
我认为如果找到卡片,您是否需要继续处理该文件?在这种情况下,您可以这样做:
with open(....) as file
for card in file.readlines()
if cardid == card
print "card found"
break
else:
print "unknown card"
请注意,with open()
行不在循环中,您并不是每次都想要打开文件。此外,您可以取消range(max)
,因为file
是可迭代的。
如果您确实要处理整个文件(例如计算找到的卡片数量,那么您使用它的方式可能是最好的,尽管使用布尔值会更好:
cardfound = False
with open(....) as file
for card in file.readlines()
if cardid == card
print "card found"
cardfound = True
if not cardfound:
print "No card found"
更新如果您想计算行数,而不是手动迭代每行,请使用enumerate
计算:
cardfound = False
with open(....) as file
for i, card in enumerate(file.readlines())
if cardid == card
print "card found on line %d" % i
cardfound = True
if not cardfound:
print "No card found"
答案 2 :(得分:0)
显式地循环显示列表的行可以用in
运算符替换。
with open(...) as file:
cards = file.readlines()
if card in cards:
print('card found')
else:
print('unknown card')
您可能想要删除' \ n'从每行的末尾,用以下代码替换上面代码的第二行:
cards = [line.strip() for line in file]
最后,如果您只需要加载一次卡片列表并对其进行多次检查,请使用set
代替list
(in
运行得更快):< / p>
cards = set(line.strip() for line in file)