基本的Python问题。 ((self)参数,for loop和bubblesort)

时间:2014-03-19 18:29:00

标签: python

#!/usr/bin/python3
class BubbleSort:
  def __init__(self):
    self.x=[]
    self.limit=0

  def getElements(self):
    self.limit=int(input("Enter the limit:"))
    print("Enter {} number".format(self.limit))
    for i in range(1,self.limit+1):
      self.x.append(int(input()))

  def sort(self):
    for i in range(0,self.limit):
      for j in range(0,(self.limit-1)-i):
          if self.x[j+1] < self.x[j]:
              temp1=self.x[j+1]
              temp2=self.x[j]
              del self.x[j]
              del self.x[j+1]
              self.x.insert(j+1,temp2)
              self.x.insert(j,temp1)
              print(self.x)

    print("Sorted list is")
    for i in self.x:
        print(i)


def main():
  b=BubbleSort()
  b.getElements()
  b.sort()
if __name__=="__main__":main()

这是一个简单的冒泡排序程序。

问题1:如果我运行该程序,则会输入两个相同的数字,例如,当我输入say - &gt; 3 6 5 1 2

输出 - &gt; 1 2 2 5 6

3被2替换。

2:为什么我在python中看到很多'self'作为函数的参数?那么self.x = []和self.limit = 0是做什么的?     作为一个概念我是方法的超级新手,我尝试阅读,他们没有帮助。

3.在函数getElements中,self.limit是什么?为什么甚至需要?我们可以使用像'x'这样的普通变量 例如:x= int(input("enter the limit:")) print("enter {} number".format(x))

3.解释self.x.append(int(input())))    不附加(int(something))会在列表末尾添加某些内容的值吗?

  1. 检查for循环,说self.limit为5(输入值)。然后循环需要6个数字吗? c ++中的等价 for(i=1;i<=6;i++) 假设在范围函数中python中没有考虑最左边的数字。正确?
  2. 主要解释每个功能中的'self'参数。

1 个答案:

答案 0 :(得分:1)

删除x [j]时,x [j + 1]变为x [j]。替换:

del self.x[j]
del self.x[j+1]

使用:

del self.x[j+1]
del self.x[j]

然而,就像@IanAuld所说的那样,在迭代它时删除数组元素是一种糟糕的编程习惯。相反,尝试创建一个新数组并将元素复制到新数组,在此过程中保持原始数组不变。之后,如果需要,可以用新数组替换旧数组。

为了回答你的第二个问题,self引用了这个类,你可以从你的函数所在的同一个类中访问其他变量。例如,如果你有:

#!/usr/bin/python3

class Foo:
    bar = 3
    def getValueOfBar(self):
       return self.bar


x = Foo()

print( x.getValueOfBar() )

self指父类,因此您可以从函数范围内的类中检索变量。