让我们集中于什么问:
为什么把最大的没有。在列表中的第一个位置是给出索引超出界限的错误,否则它运行完美?
的答案很简单:
该指数i
,j
是在启动0
和1
。如果列表中的第一个项目最大,则列表j
中的每个项目都增加1,导致列表中最后一个项目的索引超出界限。
如果最大的项目是不是第一个j
将增加一个最大n-1
倍,其中n
是列表k
的长度,因此,指数走出束缚的错误不能“成就”。
这里不改变使用这样的功能,而不是max(k)
搜索最大的病“逻辑”修复:
def gr(k):
i=0
j=1
for x in k:
if j > len(k)-1:
x=k[i]
break
if k[i]>k[j]:
x=k[i]
j+=1
else:
x=k[j]
i+=1
print (x)
顺便说一句:在stackexchange他们为有这样的一种乐趣人民创造问题https://codegolf.stackexchange.com。
我们处于stackoverflow ...
这里完整起见:
此功能不能总是找到一个列表
最大值什么挑战好奇地发现它返回的情况下,错误的价值:)
(如果您喜欢,您可以在下面的评论中为此挑战提供“解决方案”)
我下面的评论的请求表明,当以上功能并没有提供正确的结果:
gr([1, 2, 3, 4, 5])
gr([4, 1, 7, 3, 9])
给出:
4
7
它应该给5 9代替。
增编答:在评论帖子的启发我已经有点进一步提高最后在提供了改进的功能的版本的意见,所以它现在可以正确地覆盖了所有可能的情况:
def ki(k):
i=0
j=1
y=k[j-1]
for x in k:
if i > i + j:
y=k[i]
break
if k[j] > y:
y=k[j]
i+=2
else:
x=k[j-1]
i+=3
i-=1
j+=1
if j > len(k)-1:
break
if x < x - j:
print(x)
else:
print(y)
不要采取上述严重,但不要笑!没有幽默在stackoverflow!
附录B:现在的解决方案,该解决方案......所有上面的代码,如果你只是扔掉所有这一切都没有必要,在那里为制造混乱唯一的缘故语句和变量可表示如下:
def ki(k):
y=k[0]
for x in k[1:]:
if x > y: y=x
print(y)
知道了这一点,你认识的实际挑战:编写的代码,不会完全一样的小片以上,但是汗牛充栋,因为混乱和难以遵循它实际做尽可能...
您正在更改循环中间的循环变量'x'的值,这绝不是一个好主意。也给有意义的变量名称,以便你的意图变得更清晰。 –
重新创建'max()'? –
NOPE!只是弄清楚它是如何工作的。 –