我试图对来自codesignal的挑战抱有不必要的幻想。问题是:“给定一个数和一个范围,找出给定范围内可被给定数整除的最大整数。”
我用l
表示左边界,r
表示右边界,d
表示除数。如果边界内的数字都不可除,则函数必须返回-1。否则,返回最大可除数。你知道吗
有没有办法避免重复这个清单? 有没有更好的方法来做到这一点?(这同样不可读,当然也没有必要)
它们接收NameError: name '_' is not defined
,这是有意义的。你知道吗
maxDivisor = lambda l,r,d: _[0] if [i for i in range(l,r+1)[::-1] if i%d==0] else -1
maxDivisor = lambda l,r,d: [i for i in range(l,r+1)[::-1] if i%d==0][0] if _ else -1
这是可行的,但我不想重复我自己:
maxDivisor = lambda l,r,d: [i for i in range(l,r+1)[::-1] if i%d==0][0] if [i for i in range(l,r+1)[::-1] if i%d==0] else -1
这是可行的,但可读性太强:
def maxDivisor(left, right, divisor):
for i in range(left,right+1)[::-1]:
if i%divisor ==0:
return i
return -1
只是重申一下:
maxDivisor(-99,-96,5)
应该返回-1
和
maxDivisor(1,10,3)
应返回9
。你知道吗
谢谢你对我不必要的请求的帮助。你知道吗
不要仅仅为了写坏的和不可读的代码而写坏的和不可读的代码。1)
相反,我建议使用
max
和一个生成器表达式和一个默认值,这个默认值是,并读取,这正是您想要的:得到这个范围内的最大数,它是一个除数,如果不存在这样的值,则取-1。你知道吗类似的,但是可能在精神上更接近于您所尝试的,您可以在过滤的反向范围上使用
next
来获得最大的这样的元素,或者-1作为默认值。你知道吗如果你真的想变得“花哨”,那么,这样做怎么样:与其测试所有的数字,不如直接在O(1)中得到结果:
(所有的参数在这里都是不必要的,但是我想让它更具可读性,所以这甚至可以满足您的部分需求。)
从您的评论来看,似乎您正在尝试"Code Golf",其中的目标是拥有尽可能短的代码。在本例中,您可以使用第三种方法,但是使用这个变量时不使用三元
... if ... else ...
。这也完全符合您的“不必要和不可读”要求:我不会告诉你它是怎么工作的,不过,你得自己去弄清楚。你知道吗
1)除非这可能是某种模糊代码挑战。你知道吗
相关问题 更多 >
编程相关推荐