如何使循环运行到它停止有意义的时候?

时间:2018-06-02 22:16:17

标签: python python-3.x loops while-loop

我在程序中有一个循环,应该是

while number >= lst[count]:
    rank -= 1
    count += 1

我想在那里跑步直到它停止有意义。我尝试了一些没有用的东西(见帖子的结尾),但以下是有效的:

lst = [int(x) for x in input().split()]
number = int(input())
count = 0
rank = 0

def attempt(lst, a):
    try:
        result = lst[a]
    except:
        result = float('inf')
    return result


while number >= attempt(lst, count):
    rank -= 1
    count += 1
print(rank)

然而,我并不认为这是非常优雅的,似乎是做作的。是否有更优雅的解决方案(对于这种情况,并且通常对于给定条件)?

其他尝试(不成功):

while aliceScores[i] >= lst[count] and count < len(lst):
    rank -= 1
    count += 1

上述操作失败,因为while尝试运行count = len(lst)并运行错误,因为lst [len(lst)]不存在。

while aliceScores[i] >= lst[count] and count < len(lst)-1:
    rank -= 1
    count += 1

以上失败是因为如果条件发生在lst [len(lst) - 1]的情况下我想要修改等级,这在上面的代码中似乎不会出现。

2 个答案:

答案 0 :(得分:3)

唯一的原因

while aliceScores[i] >= lst[count] and count < len(lst):
    rank -= 1
    count += 1

不起作用的是,当count太大时你无法评估lst [count],但你可以利用事实python short-circuits and/or operators

while count < len(lst) and aliceScores[i] >= lst[count]:
    rank -= 1
    count += 1

这样,如果count太大,或者第二个条件变为False,循环将正常停止。

答案 1 :(得分:0)

为什么不使用for来迭代列表,使用enumerate来计算尝试次数。 它会比while imho更加pythonic。

def get_rank(...):
   for index, lst_number in enumerate(lst):
       if number < lst_attempt:
           return -index
   return -len(lst)