NameError,函数未定义。 Python 初学者

NameError, function not defined. Python Beginner

尝试用 python3 解决 leetcode 问题。这个问题只是要求一些简单的统计计算,但我什至无法获得 运行 的代码,因为我不明白问题是什么。名称拼写相同,函数在调用之前定义,是否带有参数?

 class Solution:
   def minFinder(nums):
       min = nums[0]
       for num in nums:
           if (num < min):
               min = num
       return min
               
   def maxFinder(nums):
       max = nums[0]
       for num in nums:
           if (num > min):
               max = num
       return max
   
   def meanFinder(nums):
       sum = 0
       for num in nums:
           sum += num
       mean = sum/(len(nums))
       return mean
   
   def medFinder(nums):
       if (len(nums) % 2 == 0):
           med = nums[((len(nums)/2 - 1) + (len(nums)/2)) / 2]
       else:
           med = nums[len(nums) // 2]
       return med
           
   def modeFinder(nums):
       index = 0
       freq = 0
       for num in nums:
           if nums.count(num) > freq:
               freq = nums.count(num)
               index = nums.index(num)
       mode = nums[index]
       return mode
               
   def sampleStats(self, count: List[int]) -> List[float]:
       fltr_cnt = []
       for num in count:
           if (num != 0):
               fltr_cnt.append(num)
       stats = []
       stats.append(minFinder(fltr_cnt) * 1.0)
       stats.append(maxFinder(fltr_cnt))
       stats.append(meanFinder(fltr_cnt))
       stats.append(medFinder(fltr_cnt))
       stats.append(modeFinder(fltr_cnt))
       return stats
name 'minFinder' is not defined

让我的代码不那么复杂的建议也很受欢迎,比如有没有更快的方法来执行 .append() 5 次?

由于您使用的是 classes,因此您在定义和访问 class 的方法和属性时必须使用 self,请尝试以下代码:

 class Solution:
   def minFinder(self, nums):
       min = nums[0]
       for num in nums:
           if (num < min):
               min = num
       return min
               
   def maxFinder(self, nums):
       max = nums[0]
       for num in nums:
           if (num > min):
               max = num
       return max
   
   def meanFinder(self, nums):
       sum = 0
       for num in nums:
           sum += num
       mean = sum/(len(nums))
       return mean
   
   def medFinder(self, nums):
       if (len(nums) % 2 == 0):
           med = nums[((len(nums)/2 - 1) + (len(nums)/2)) / 2]
       else:
           med = nums[len(nums) // 2]
       return med
           
   def modeFinder(self, nums):
       index = 0
       freq = 0
       for num in nums:
           if nums.count(num) > freq:
               freq = nums.count(num)
               index = nums.index(num)
       mode = nums[index]
       return mode
               
   def sampleStats(self, count: List[int]) -> List[float]:
       fltr_cnt = []
       for num in count:
           if (num != 0):
               fltr_cnt.append(num)
       stats = []
       stats.append(self.minFinder(fltr_cnt) * 1.0)
       stats.append(self.maxFinder(fltr_cnt))
       stats.append(self.meanFinder(fltr_cnt))
       stats.append(self.medFinder(fltr_cnt))
       stats.append(self.modeFinder(fltr_cnt))
       return stats

self表示class的实例。通过使用self关键字我们可以访问python中class的属性和方法。它使用给定的参数绑定属性。因此,您的成员函数无法访问它们。 了解更多 self read this article


class Solution:
    def minFinder(self, nums):
        min = nums[0]
        for num in nums:
            if (num < min):
                min = num
        return min

    def maxFinder(self, nums):
        max = nums[0]
        for num in nums:
            if num > max:
                max = num
        return max

    def meanFinder(self, nums):
        sum = 0
        for num in nums:
            sum += num
        mean = sum / (len(nums))
        return mean

    def medFinder(self, nums):
        if len(nums) % 2 == 0:
            med = nums[((len(nums) / 2 - 1) + (len(nums) / 2)) / 2]
        else:
            med = nums[len(nums) // 2]
        return med

    def modeFinder(self, nums):
        index = 0
        freq = 0
        for num in nums:
            if nums.count(num) > freq:
                freq = nums.count(num)
                index = nums.index(num)
        mode = nums[index]
        return mode

    def sampleStats(self, count: list):
        fltr_cnt = []
        for num in count:
            if (num != 0):
                fltr_cnt.append(num)
        stats = []
        stats.append(self.minFinder(fltr_cnt) * 1.0)
        stats.append(self.maxFinder(fltr_cnt))
        stats.append(self.meanFinder(fltr_cnt))
        stats.append(self.medFinder(fltr_cnt))
        stats.append(self.modeFinder(fltr_cnt))
        return stats

另外,maxFinder函数有错误。您已使用 min 而不是 max

   def maxFinder(nums):
       max = nums[0]
       for num in nums:
           if (num > min):
               max = num
       return max