你好,我是python的新手,我正在构建一个小程序,如果字符串是等值图(没有重复字母的单词连续或非连续),则返回false,否则返回false。它还忽略字母大小写。
到目前为止,我已经初始化了一个空字典,它将存储包含字母(作为键)及其频率(值)的键值对。然后使用for循环进行迭代,在每次迭代中,字典都会更新字母及其计数。如果它已经有了这个字母,那么它将键值增加1,否则它将保持初始化为1。def is_isogram(string):
dict = {}
for letter in string.lower():
#if we have the letter
if letter in dict:
dict[letter] += 1
# if we don't have the letter
else:
dict[letter] = 1
现在我要确定它是不是一个等值图,我循环遍历字典键,并写了一个条件。然而,它总是给我完全相反的输出。
for values in dict:
if dict[values] > 1:
return False
else:
return True
输出:真正的
我也尝试了列表推导和lambda,但我一直得到相同的结果,我每次都得到True。有人知道为什么吗?
首先欢迎使用Python!我看了一下,似乎这个问题发生在你的第二个代码部分,在字典值上的for循环。
在循环中添加print语句可能有助于将来调试这类事情,例如
for values in dict:
print(values)
if dict[values] > 1:
return False
else:
return True
提示:这应该告诉您,您只查看任何给定字符串中的第一个字母,并且过早返回!要解决这个问题,需要移动"return True"部分,直到完成检查字符串中的每个字母。
修复这个问题应该会让你的代码正常工作!此外,随着您深入了解Python,您可能会发现有许多方法可以解决相同的问题。对于这个问题,可以在这里找到一个更"有效"或"优雅"的方法,但同样,解决任何问题都有许多不同的方法。