【问题标题】:NameError, function not defined. Python Beginner [closed]NameError,未定义函数。 Python初学者[关闭]
【发布时间】:2021-05-16 06:30:32
【问题描述】:

尝试用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 次?

【问题讨论】:

  • 你的意思是:'self.minFinder()'?
  • 请展示研究并提供minimal reproducible example
  • 正如@quamrana 所说,这可能是因为您没有使用self.,而不仅仅是minFinder,而是您包含在sampleStats 方法中的所有方法

标签: python nameerror


【解决方案1】:

self 表示类的实例。通过使用self 关键字,我们可以访问python 中类的属性和方法。它将属性与给定的参数绑定。因此,您的成员函数无法访问它们。 了解更多selfread 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

【讨论】:

    【解决方案2】:

    由于您使用的是类,因此在定义和访问类的方法、属性时必须使用 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
    

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2017-02-05
      相关资源
      最近更新 更多