-5

最大的数字是 15,但它打印出 12。帮助?

nums = [12, 7, 8, 15, 2, 10, 3]

big = nums[0]

spot = 0

while spot == len(nums):
    spot = spot + 1
    if(nums[spot] > big):
        big = nums[spot]
print big
4

4 回答 4

2

你应该enumerate()在这里使用,并迭代nums[1:]

In [5]: nums = [12, 7, 8, 15, 2, 10, 3]

In [6]: big = nums[0]

In [7]: for i,x in enumerate(nums[1:],1):
   ...:     if x>big:
   ...:         big=x
   ...:         spot=i
   ...:         

In [8]: spot
Out[8]: 3

In [9]: big
Out[9]: 15

help()enumerate()

enumerate(iterable[, start]) -> 用于索引的迭代器,iterable 的值

返回一个枚举对象。iterable 必须是另一个支持迭代的对象。枚举对象产生包含一个计数(从开始,默认为零)和一个由可迭代参数产生的值的对。enumerate 对于获取索引列表很有用:(0, seq[0]), (1, seq[1]), (2, seq[2]), ...

于 2013-01-22T00:21:06.480 回答
2

因为您的循环终止条件没有意义。你永远不会进入循环,因为spot == len(nums)在循环开始时不是真的!

当您希望 while 循环退出时,再考虑一下条件 - 它最初应该为 true,当您到达列表末尾时变为 false。

于 2013-01-22T00:19:36.387 回答
1

while spot == len(nums):

因为spot是 0 和len(nums)7,所以这永远不会是真的。你的意思!=不是==我相信。

这看起来更干净:

for i in nums:
 if i > big:
  big = i
print big
于 2013-01-22T00:20:56.810 回答
0

你可以做

nums = [12, 7, 8, 15, 2, 10, 3]
big = max(nums)
spot = nums.index(big)
于 2013-01-22T00:44:55.247 回答