簡體   English   中英

初學者試圖調試一個簡單的程序

[英]Beginner trying to debug an easy program

我是學生,剛開始學習代碼。 現在我正在使用Python並且有一個我認為應該工作的程序,但只返回一些我不理解的錯誤:

回溯(最近一次調用最后一次):文件“C:\\ Program Files \\ Notepad ++ \\ 1913lab3.py”,第23行,打印(大多數(奇數,[]))

文件“C:\\ Program Files \\ Notepad ++ \\ 1913lab3.py”,第9行,大多數N = S [i] UnboundLocalError:在賦值之前引用的局部變量'i'

我不明白第一個錯誤告訴我的是什么,但我想我理解第二個錯誤,但我不明白為什么我會得到它。 我不認為我是一個局部變量,因為我在開始時立即定義它。 這是代碼:

t = 0
f = 0
i = 0

def odd(N):
    return N % 2 != 0

def most(P, S):
    N = S[i]
    if P == True:
        t += 1
    else:
        f += 1
    i += 1
    if i < len(S):
        most(P, S)
    else:
        if t > f:
            return 'True'
        else:
            return 'False'

print(most(odd, []))
print(most(odd, [0]))
print(most(odd, [1]))
print(most(odd, [1, 2]))
print(most(odd, [1, 2, 3]))

賦值是定義遞歸函數(most())。 該函數將一個函數和一個列表作為其參數(P和S)。 我不能使用循環或局部變量。 這是作業的引用:

“P是一個參數的函數,返回True或False,S是一個列表。函數最多在S的每個元素上調用P.如果P返回True的次數多於返回False,則必須返回True。它必須返回否則就錯了。“

5個打印命令只是我需要為信用工作的5個例子,但是這個程序需要適用於所有列表。 如果有人可以幫助我解決這些錯誤,那就太好了。 (此外,歡迎任何一般的Python技巧。)

默認情況下,假定在函數內修改的任何變量都是該函數的本地變量。 所以如果你有i += 1i必須先在函數中定義。 或者你必須聲明i作為全球第一( global i )這樣Python知道它是指的對i您已經定義(第一)之外的功能。 但要小心全局,它們通常很危險(因為它們很難跟蹤發生的事情),如果可能的話應該避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM