Blackops

初心易得,始终难守

0%

Python学习笔记_day1

最近在上Python实训课,就随堂学习学习一下基本的Python语法,发现这个语言确实挺方便的,不是一个复杂的语言,甚至还可以很方便得写类和继承类。然后老师也讲了一些知识,整理了一下

Python的class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Person:
name = "大人"
__odername = "2"

def __init__(self):
print("Created!")
print(self.__odername)
self.__odername = 3
print(self.__odername)

def __del__(self):
print("Deleted!")
self.__odername = 1
print(self.__odername)

def eat(self):
print("吃货", self.__odername)#公有成员变量
  1. class的定义如代码所示。

  2. 非双下划线开头的变量/函数名相当于public的成员变量/函数,而用__作变量名/函数名开头的会被视为私有private成员变量/函数,示例代码中name就是public类型,而__odername是private类型。

  3. self参数相当于Java中的this,要使用本身类中的变量不像C语言在成员函数中直接写就行了,要用self.xxxxx来调用。

  4. __init__函数和__del__私有成员函数可以看作C++的构造和析构函数,在实例创建和消亡时会自动调用。

  5. 类的继承用括号实现,比如让class B继承class A,那么就可以这么写:

    1
    2
    class B(A)
    ......

    然后在B中写同名函数会覆盖A中的同名函数

遇到的一点问题

Python中创建$n*m$的二维数组,一开始我想当然地去用一维的长度为$m$的list扔$n$次到另一个$list$中,这样似乎没有什么问题,实际上想去修改某一个位置的值的时候会发现这一列全被修改了。去百度了一下发现其中涉及到一些引用的东西,这里就不细讲了,说下正确的做法之一:

1
arr = [[0 for i in range(m)] for i in range(n)]

这样就创建好了一个$n*m$的二维数组$arr[n][m]$了。

然后做题的时候读取一行的数据,可以把一行用read = input().split()(默认作为字符串str类型)读取进来并用split()(默认空格为分隔符)分割完毕,然后用下标访问读取的第$i$个元素,比如输入形式是数字 字符串 数字,那就可以这样:

1
2
3
read = input().split()
n, str, m = int(read[0]), read[1], int(read[2])
print(n, str, m)