题目36

# 对10个数排序

my_list = [2,2,1,1,3,67,43,22,55,10,11]

print(my_list)
my_list.sort()
print(my_list)

题目37

# 求一个3*3的矩阵对角线元素之和
# 主对角线: 00 11 22
# 副对角线: 02 11 20

def get_diagonal_sum(matrix):
    matsize = len(matrix)
    sum = 0
    for i in range(matsize):
        sum += matrix[i][i]
        sum += matrix[i][matsize-1-i]
    sum -= matrix[matsize//2][matsize//2]
    return sum

matrix = []

for i in range(3):
    row = []
    for j in range(3):        
        row.append(int(input("请输入一个数字:\n")))
    matrix.append(row)

print(get_diagonal_sum(matrix))

题目38

# 有一个已经排好序的数组,现输入一个数,按原来的规律将它插入数组中

# 利用列表的一些现成的方法
# 利用可变数据类型(List,Dict,Set)的特点完成在原有列表中添加新的元素
# 可变和不可变数据类型,可自行了解。这里不做介绍。
def insert_num(my_list:list, num:int):
    reserve_flag = False

    print(f"Before insert a num = {num}, my_list = {my_list}")
    if my_list[0] > my_list[len(my_list) -1]:
        reserve_flag = True
        
    my_list.append(num)
    my_list.sort(key=None, reverse=reserve_flag)
    print(f"After insert a num = {num}, my_list = {my_list}")

num = int(input('请输入一个数字:\n'))
my_list = [1,2,3,4,33,44,55,99]

insert_num(my_list, num)
my_list.reverse()
print(my_list)

insert_num(my_list, num)
print(my_list)

题目39

# 将一个数组逆序输出

# 利用列表切片
def reserve_print(my_list):
    return my_list[::-1]
# 自己手动 负的index

def reserve_print1(my_list):
    tmp = my_list[:]
    list_size = len(my_list)
    for i in range(list_size//2):
        tmp[i], tmp[-i-1] = tmp[-i-1],tmp[i]
    return tmp
nums = [1,23,4,5,6,7,8,9]

# 自己手动 正的index
def reserve_print2(my_list):
    tmp = my_list[:]
    list_size = len(my_list)
    for i in range(list_size//2):
        tmp[i], tmp[list_size - 1 -i] = tmp[list_size - 1 -i],tmp[i]
    return tmp

print('input list : ', nums, 'id = ', id(nums))
print(reserve_print(nums))
print(reserve_print1(nums))
print(reserve_print2(nums))
print(list(reversed(nums)))
nums.reverse()  # 该方法会改变原有的list
print(nums)
nums.reverse() # 为了不改变原有list的顺序,这里要再次反序一下
print('input list : ', nums, 'id = ', id(nums))    

题目40

# 定义静态变量   看到这个部分(其实早就有这个感觉),感觉这些题怕是从其它语言来的吧,没有针对python
# 把题改一下,改成类变量
# 类变量的特性:
# 类变量用于类的所有实例共享的属性和方法
# 同样的属性名称同时出现在实例和类中,则属性查找会优先选择实例
# 不是通过实例定义的变量

class MyClass:
    # shared_var = 0
    def set_value(self, value):
        self.value = value
    def get_value(self):
        return self.value
    def get_value2(self):
        return self.shared_var1

# 可以在类外定义类变量
MyClass.shared_var = 1234   
myclass1 = MyClass()
myclass1.set_value(11)
# print('myclass1.get_value2()',myclass1.get_value2()) # 'MyClass' object has no attribute 'shared_var1'. Did you mean: 'shared_var'?
# 可以在定义实例后,为该实例定义实例变量
myclass1.shared_var = 123
myclass1.shared_var1 = 12345

print('myclass1.get_value2()',myclass1.get_value2())

# 实例.类变量名  这种方式访问的,如果实例变量和类变量重名,优先访问实例变量
print('myclass1.shared_var', myclass1.shared_var)

print('myclass1.get_value()',myclass1.get_value())

# 类名.类变量 这种方式,访问的一定是类变量
print('MyClass.shared_var', MyClass.shared_var)


myclass2 = MyClass()
myclass2.set_value(12)
print(MyClass.shared_var)

print('myclass2.shared_var', myclass2.shared_var)
print('MyClass.shared_var', MyClass.shared_var)
print('myclass2.get_value()',myclass2.get_value())

# 遵循先定义后使用的规则(不这样,会报错的)
08-03 00:38