2016-07-24 66 views
0

返回數組中的數字總和,忽略6到7之間的數字部分(每6個數字後面至少有一個7)。沒有號碼返回0。代碼通過了所有測試,但在其他測試中失敗..請按照鏈接

sum67([1, 2, 2]) → 5  
sum67([1, 2, 2, 6, 99, 99, 7]) → 5 
sum67([1, 1, 6, 7, 2]) → 4 

我的代碼:

def sum67(nums): 
    total = 0 
    n = 0 
    while(n < len(nums)): 
     if nums[n] == 6: 
      while(nums[n] != 7 and n < len(nums)): 
       n += 1 
      n += 1 
     if n > len(nums)-1: 
      break 
     total += nums[n] 
     n += 1 
    return total 

click here to test

回答

0

問題出現,如果7後有一個6直接。

您的代碼檢測到第一個6並跳過下一個7。但是如果下一個號碼是另一個號碼6,它將不會被跳過。

如果您將if nums[n]==6:更改爲while n<len(nums) and nums[n] == 6:,它將起作用。

+0

的條件的順序需要進行的改變:除了具有多循環和更新循環計數器自己,你可以只遍歷號的列表上,並有額外的變量有說服力,如果你需要跳過他們與否跟隨'while(nums [n]!= 7和n niemmi

+0

@niemmi「每6個會跟着至少一個7」 –

+0

你是絕對正確的,我完全錯過了。在這種情況下,根本不需要第二個條件'n niemmi

0

@Rawing得到了正確調試。下面是如果你喜歡另一種簡單的解決方法:

def sum67(nums): 
    total = 0 
    n = 0 

    while n < len(nums): 
     if nums[n] == 6: 
      # Skip forward until we find a 7 (or the end of the list). 
      while n < len(nums) and nums[n] != 7: 
       n += 1 
     else: 
      total += nums[n] 

     # We're either looking at a number we just added to the total, 
     # or we're looking at the 7 we just found. Either way, we need 
     # to move forward to the next number. 
     n += 1 

    return total 
0

由於@Rawing指出您的代碼不覆蓋場景67後緊跟。

def sum67(nums): 
    skip = False 
    total = 0 
    for x in nums: 
     if skip: 
      if x == 7: 
       skip = False 
     elif x == 6: 
      skip = True 
     else: 
      total += x 

    return total 
相關問題