Python 将 false 返回给“1”==“1”。任何想法为什么?
Python is returning false to "1"=="1". Any ideas why?
我已经为我的 A Level 计算任务编写了一个 scout 系统。该程序旨在将 scout 的信息存储在 scout 小屋中,包括徽章、排行榜系统和列表中 adding/finding/deleting scout 的管理系统. scout 信息必须存储在文件中。
删除函数的文件处理过程(我的问题所在):
删除 scout 按钮会触发弹出窗口 window(使用 tkinter)。 window 收集 scout 的 ID,然后搜索 scout 文件,扫描存储的 scout 的 ID,并将其与输入的 ID 进行比较。如果找到 ID,它将跳过文件的这一行,否则将该行复制到临时文件。完成所有行后,temp 中的行将复制到原始文件的新空白版本,并且 deletes/recreates 临时文件为空白。
我的问题:
问题是当程序将要删除的 ID (remID) 与文件中当前正在查看的 scout 的 ID (sctID) 进行比较时,它 returns false 而实际上它们是相等的。这可能是我对变量的处理、我拆分行以获取 ID 甚至我的数据类型的问题。我只是不知道。我尝试将两者都转换为字符串,但仍然是错误的。此部分的代码如下。提前致谢!
elif self._name == "rem":
remID = str(scoutID.get())
if remID != "":
#store all the lines that are in the file in a temp file
with open(fileName,"r") as f:
with open(tempFileName,"a") as ft:
lines = f.readlines()
for line in lines:
sctID = str(line.split(",")[3])
print("%s,%s,%s"%(remID, sctID, remID==sctID))
#print(remID)
if sctID != remID: #if the ID we are looking to remove isn't
#the ID of the scout we are currently looking at, move it to the temp file
ft.write(line)
#remove the main file, then rectrate a new one
os.remove(fileName)
file = open(fileName,"a")
file.close()
#copy all the lines back to the main file
with open(tempFileName,"r") as tf:
lines = tf.readlines()
with open(fileName,"a") as f:
for line in lines:
f.write(line)
#finally, delete and recreate the temp file
os.remove(tempFileName)
file = open(tempFileName,"a")
file.close()
#remove the window
master.destroy()
我的输出:
1,1
,False
1,2
,False
1,3
,False
这两个值不一样尝试打印出这些值并查看它们。除非 scoutID.get()
returns 是一个列表,否则 sctID 可能在字符串周围有一对 []
以及一些额外的逗号。或者你可能只有一个额外的特殊字符或 space.
通过转换为字符串,您隐藏了错误。
始终尝试使用 repr(value) 而不是 str(value) 进行调试。您还应该知道,最好比较整数而不是字符串——例如" 1" != "1".
Edit: From your output, it is clear that you have an extra '\n'
(Newline) in the sctID. Because you compare strings, this will be
always be False.
我想,您可能有带有额外空格或其他隐藏字符的字符串,或者只是不同类型的值,这也会导致不同的结果。
我已经为我的 A Level 计算任务编写了一个 scout 系统。该程序旨在将 scout 的信息存储在 scout 小屋中,包括徽章、排行榜系统和列表中 adding/finding/deleting scout 的管理系统. scout 信息必须存储在文件中。
删除函数的文件处理过程(我的问题所在): 删除 scout 按钮会触发弹出窗口 window(使用 tkinter)。 window 收集 scout 的 ID,然后搜索 scout 文件,扫描存储的 scout 的 ID,并将其与输入的 ID 进行比较。如果找到 ID,它将跳过文件的这一行,否则将该行复制到临时文件。完成所有行后,temp 中的行将复制到原始文件的新空白版本,并且 deletes/recreates 临时文件为空白。
我的问题: 问题是当程序将要删除的 ID (remID) 与文件中当前正在查看的 scout 的 ID (sctID) 进行比较时,它 returns false 而实际上它们是相等的。这可能是我对变量的处理、我拆分行以获取 ID 甚至我的数据类型的问题。我只是不知道。我尝试将两者都转换为字符串,但仍然是错误的。此部分的代码如下。提前致谢!
elif self._name == "rem":
remID = str(scoutID.get())
if remID != "":
#store all the lines that are in the file in a temp file
with open(fileName,"r") as f:
with open(tempFileName,"a") as ft:
lines = f.readlines()
for line in lines:
sctID = str(line.split(",")[3])
print("%s,%s,%s"%(remID, sctID, remID==sctID))
#print(remID)
if sctID != remID: #if the ID we are looking to remove isn't
#the ID of the scout we are currently looking at, move it to the temp file
ft.write(line)
#remove the main file, then rectrate a new one
os.remove(fileName)
file = open(fileName,"a")
file.close()
#copy all the lines back to the main file
with open(tempFileName,"r") as tf:
lines = tf.readlines()
with open(fileName,"a") as f:
for line in lines:
f.write(line)
#finally, delete and recreate the temp file
os.remove(tempFileName)
file = open(tempFileName,"a")
file.close()
#remove the window
master.destroy()
我的输出:
1,1
,False
1,2
,False
1,3
,False
这两个值不一样尝试打印出这些值并查看它们。除非 scoutID.get()
returns 是一个列表,否则 sctID 可能在字符串周围有一对 []
以及一些额外的逗号。或者你可能只有一个额外的特殊字符或 space.
通过转换为字符串,您隐藏了错误。
始终尝试使用 repr(value) 而不是 str(value) 进行调试。您还应该知道,最好比较整数而不是字符串——例如" 1" != "1".
Edit: From your output, it is clear that you have an extra '\n' (Newline) in the sctID. Because you compare strings, this will be always be False.
我想,您可能有带有额外空格或其他隐藏字符的字符串,或者只是不同类型的值,这也会导致不同的结果。