我在程序中有一个循环,应该是
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]的情况下我想要修改等级,这在上面的代码中似乎不会出现。
答案 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)