Как заставить цикл работать, когда он перестает иметь смысл? - PullRequest
0 голосов
/ 03 июня 2018

У меня есть цикл внутри программы, который должен быть

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 голосов
/ 03 июня 2018

Почему бы не использовать for для итерации списка и enumerate для подсчета количества попыток.Это было бы более питоническим, чем while imho.

def get_rank(...):
   for index, lst_number in enumerate(lst):
       if number < lst_attempt:
           return -index
   return -len(lst)
0 голосов
/ 03 июня 2018

Единственная причина, по которой

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

не работает, заключается в том, что вы не можете вычислить lst [count], когда счетчик слишком велик, однако вы можете использовать факт коротких замыканий python и / илиоператоры

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

Таким образом цикл будет правильно останавливаться, либо если счет слишком большой, либо если второе условие станет ложным.

...