执行程序显示 "IndexError"。它是 HackerRank 上问题的代码

Program on execution shows "IndexError". It is a code for the problem on HackerRank

问题: 一个狂热的徒步旅行者会详细记录他们的徒步旅行。在最后一次采取精确步数的徒步旅行中,对于每一步,它都会被记录下来,是上坡、下坡还是下坡。远足总是在海平面开始和结束,每一步向上或向下代表高度的一个单位变化。我们定义了以下术语:

一座山是一系列连续的海拔高度,从海平面上升到海平面下降结束。 山谷是海平面以下的一系列连续步骤,从海平面下降开始,到海平面上升结束。 给定徒步旅行中上下台阶的顺序,找出并打印走过的山谷数量。


n = int(input("Enter the no. of steps:"))
steps = input("Enter the path:")[:n].upper()
uc,dc = 0,0
vc = 0
valley = []
for i in steps:
    #to count the no. of down steps
    if i == 'D': 
        dc += 1

    #to count the no. of up steps        
    if i == 'U': 
        uc += 1
    valley.append(i) #list for valleys or mountains

    #Start recounting if up_count == down_count; to get to **sea level**
    if dc == uc:
        dc,uc = 0,0
    
    #--Valleys--
    if valley[0] == 'D'  and uc == 0 and dc==0:
        vc += 1 #No. of valleys
        valley.clear() #clear the list

    #--Mountains--
    if valley[0] == 'U' and uc == 0 and dc==0:
        valley.clear()

print(vc)

这是因为如果条件是True-

,下面的代码会清除valley
#--Valleys--
if valley[0] == 'D'  and uc == 0 and dc==0:
    vc += 1 #No. of valleys
    valley.clear() #clear the list

而您仍然尝试在此处检查 valley[0]-

#--Mountains--
if valley[0] == 'U' and uc == 0 and dc==0:
    valley.clear()

您需要使用 elif 而不是 if 或者您需要检查 valley 是否不为空。