以下python代码中发生了什么?

时间:2017-07-21 17:35:13

标签: python python-2.7 python-3.x

我正在尝试在脑海中处理此代码并获取输出。我得到1作为答案是不正确的。有人可以解释原因吗?

def testString(aString):
  aDict = {}
 for letter in aString:
     num = aString.count(letter)
     if num not in aDict:
         aDict[num] = letter
     else:
         return num
 return -1


text = 'eager'
print(testString(text))

3 个答案:

答案 0 :(得分:1)

我已经格式化了您的代码:

def testString(aString):
    aDict = {}
    for letter in aString:
        num = aString.count(letter)
        if num not in aDict:
            aDict[num] = letter
        else:
            return num
    return -1


text = 'eager'
print(testString(text))

循环的每次迭代:

# First iteration
aDict = {}
letter = 'e'
num = 2
if 2 not in aDict: #True
    aDict[2] = 'e'
else:
    return 2

# Second iteration
aDict = {2: 'e'}
letter = 'a'
num = 1
if 1 not in aDict: #True
    aDict[1] = 'a'
else:
    return 1

# Third iteration
aDict = {2: 'e', 1: 'a'}
letter = 'g'
num = 1
if 1 not in aDict: #False
    aDict[1] = 'g'
else:
    return 1 #returns 1

答案 1 :(得分:0)

看到ea后,aDict{2: 'e', 1: 'a'}。在查看g时,num又是1,这已经是aDict中的关键字,因此会返回1

答案 2 :(得分:0)

这不是用语言解释的最简单的代码片段。此函数有效地跟踪字母出现的次数,并且一旦检测到第二个字母出现的次数与前一个字母的次数相同,它就会返回该字母的出现次数。

因为在这个例子中'e'出现两次,'a'出现一次,一旦代码终止,'g'也会出现并返回'1'