• PYTHON1.day09


    day08 回顾:
       两个容器:
         集合set 和 固定集合 frozenset
           可变        不可变
       集合的创建:
         构造函数:
            set()
            set(range(10)))
         字面值:
            {1, 2, 3, 4}
         集合推导式:
            {x ** 2 for x in range(1, 10)}
       固定集合的创建:
         构造函数:
            frozenset()
            frozenset(range(10))
       集合的运算:
         &交集   |并集   ^对称补集 
         -补集   <子集   >超集    ==相等  !=不等
         <=子集或相等   >= 超集或相等
         in / not in

      集合的方法:
         S.add(x)      增加
         S.remove(x)   删除
         S.discard(x)  删除(但不提示错误)
         S.clear()
         S.pop()       删除随机元素
         S.copy()

      能用容器类的函数
         len(x) min(x) max(x) .....
      
    函数 function
       函数是面向过程编程的最小单位

    两条语句:
       def 语句
         语法:
           def 函数名(形参变量1, 形参变量2, ....):
               语句块
         作用:
            创建函数, 用函数名绑定这个函数

      调用表达式:
         函数名(实参1, 实参2, ....)

      return 语句
         作用:
           结束当前函数的执行,返回到调用此函数的地方
         格式:
           return [表达式]
        


    day09 笔记:
    python函数的参数传递(把数据给函数)

       传递方式:
         位置传参
           序列传参
         关键字传参
           字典关键字传参

    位置传参:
       实际参数(实参)的对应关系与形式参数(形参)的对应关系是按位置
         来依次对应的
       示意:
         def mymin(a, b, c):
             pass

        mymin(    1, 2, 3)
            
       说明:
         实际参数和形式参数通过位置进行传递和匹配
         实际参数的个数必须与形式参数的个数相同
       示例见:
         positional_give_args.py

       

      1 # positional_give_args.py
      2 
      3 
      4 # 此示例示意位置传参
      5 def myfun1(a, b, c):
      6     '''这是一个函数传参的示例'''
      7     print("a的值是:", a)
      8     print("b的值是:", b)
      9     print("c的值是:", c)
     10 
     11 myfun1(1, 2, 3)  # 1-->a  2-->b  3-->c
     12 myfun1(4, 5, 6)
     13 
     14 
     15 
     16 

    序列传参
       序列传参是指在函数调用过程中,用*将序列拆解后按位置进行传递的
         传参方式

      示例见:
         sequence_give_args.py

      1 
      2 
      3 # 此示例示意序列传参
      4 def myfun1(a, b, c):
      5     '''这是一个函数传参的示例'''
      6     print("a的值是:", a)
      7     print("b的值是:", b)
      8     print("c的值是:", c)
      9 
     10 L1 = [11, 22, 33]
     11 t2 = (100, 200, 300)
     12 s3 = "ABC"
     13 
     14 myfun1(L1[0], L1[1], L1[2])  # L1[0](将11)---> a, L1[1]--->b, ...
     15 myfun1(*L1)  # 等同于myfunc(L1[0], L1[1], L1[2])
     16 myfun1(*t2)
     17 myfun1(*s3)
     18 
     19 
     20 

       说明:
         序列传参时,序列拆解的位置将与形参一一对应

    关键字传参:
       关键字传参是指传参时,按着形参的名称给形参赋值
       实参和形参按名称进行匹配

      示例见:
         keywords_give_args.py

      1 
      2 
      3 # 此示例示意 关键字 传参
      4 def myfun1(a, b, c):
      5     '''这是一个函数传参的示例'''
      6     print("a的值是:", a)
      7     print("b的值是:", b)
      8     print("c的值是:", c)
      9 
     10 myfun1(c=33, b=22, a=11)
     11 myfun1(b=2, a=1, c=3)
     12 
     13 

       说明:
         实参和形参接形参名进行匹配,可以不按位置进行匹配

    字典关键字传参:
       是指实参为字典,将字典用**拆解后进行关键字传参的传参方式

      示例见:
         dict_keyword_give_args.py

      1 
      2 
      3 # 此示例示意 字典关键字 传参
      4 def myfun1(a, b, c):
      5     '''这是一个函数传参的示例'''
      6     print("a的值是:", a)
      7     print("b的值是:", b)
      8     print("c的值是:", c)
      9 
     10 d1 = {'c': 33, 'a': 11, 'b': 22}
     11 myfun1(c=d1['c'], a=d1['a'], b=d1['b'])  # 33--->c , 11--->a ...
     12 
     13 myfun1(**d1)  # 拆解字典,再按关键字传参方式传递
     14 
     15 
     16 

       说明:
         字典的键名和形参名必须一致
         字典的键名必须为符合标识符命名规则的字符串
         字典的键名要在形参中存在
      
    练习:
       已知有列表:
         L = [1, 2, True, None, 3.14]
         调用print函数,打印用'#'号分隔的文字信息到终端上
       print(....)  # 打印  1#2#True#None#3.14

      1 # 练习:
      2 #   已知有列表:
      3 #     L = [1, 2, True, None, 3.14]
      4 #     调用print函数,打印用'#'号分隔的文字信息到终端上
      5 #   print(....)  # 打印  1#2#True#None#3.14
      6 
      7 
      8 
      9 L = [1, 2, True, None, 3.14]
     10 
     11 print(*L, sep="#")  # 打印  1#2#True#None#3.14
     12 # 等同于print(1, 2, True, None, 3.14, sep='#')
     13 
     14 

    函数的综合传参:
       1. 函数的传参方式,在能确定形参能唯一匹配到相应实参的情况
         下可以任意组合
       2. 函数的位置传参要先于关键字传参

      示例:
         def myfun1(a, b, c):
             pass
         myfun1(100, c=300, b=200)  # 正确
         myfun1(c=300,b=200, 100)   # 错的
         myfun1(100, *[200, 300])   # 正确
         myfun1(*[100, 200], 300)   # 正确
         myfun1(100, *[200], 300)   # 正确
         myfun1(100, **{'c':300, 'b':200})  # 正确
         myfun1(**{'c':300, 'b':200}, a=100)  # 正确


    可变 和不可变类型的容器作为实参传递的区别:
       可变类型的实参作为参数传递时,在函数内部可以改变容器内的数据

      示例见:
         list_as_args.py
         list_as_args2.py

      1 # list_as_args.py
      2 
      3 # 此示例示意,当函数的实参为可变数据类型时,在函数内部可以改为
      4 # 容器的内容
      5 
      6 L = [1, 2, 3, 4]
      7 t = (1.1, 2.2, 3.3, 4.4)
      8 
      9 def append_5(x):
     10     # x.append(5)
     11     x += (5,)
     12     print('x=', x)  # 1.1, 2.2, 3.3, 4.4, 5
     13 
     14 append_5(L)
     15 print(L)  # [1, 2, 3, 4, 5]
     16 
     17 append_5(t)
     18 print(t)  # (1.1, 2.2, 3.3, 4.4)
     19 
     20 
     21 
     22 
    1
      1 # list_as_args2.py
      2 
      3 
      4 # 写一个函数,此函数读取用户输入的数据,最后保存于全局变量的列表
      5 # L中, 当用户输入小于零的数时结束输入
      6 L = []
      7 def input_number(L1):
      8     while True:
      9         x = int(input('请输入:'))
     10         if x < 0:
     11             break
     12         L1.append(x)
     13 
     14 input_number(L)
     15 print(L)
     16 input_number(L)
     17 print(L)
     18 
     19 
     20 
     21 
     22 
     23 
     24 
    2

    ----- 以下讲函数的定义(创建函数的def语句的形参列表)----
    函数的缺省参数:
       语法:
         def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):
             语句块
       示例见:
         default_args.py

      1 # default_args.py
      2 
      3 
      4 def info(name, age=1, address='不详'):
      5     print(name,'今年', age, '岁,家庭住址:', address)
      6 
      7 info("魏明择", 35, '北京市朝阳区')
      8 info("tarena", 15)
      9 info("小飞")
     10 
    default_args

      说明:
         缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其
         右侧的所有参数都必须有缺省参数,如:
             def test_fn(a, b=10, c):  是错的
         缺省参数可以有0个,1个或多个,甚至全部都有缺省参数
       示例:
         def fn(a, b=10, c):  # 错误
             pass
         def fn(a=0, b=10, c=20):  # 这是对的
             pass

    练习:
       写一个函数myadd,此函数可以计算两个数,三个数及四个数的和
         def myadd(...):
             ...
        
         print(myadd(10, 20))  # 30
         print(myadd(100, 200, 300))  # 600
         print(myadd(1, 2, 3, 4))  # 10

      1 # 练习:
      2 #   写一个函数myadd,此函数可以计算两个数,三个数及四个数的和
      3 #     def myadd(...):
      4 #         ...
      5 
      6 #     print(myadd(10, 20))  # 30
      7 #     print(myadd(100, 200, 300))  # 600
      8 #     print(myadd(1, 2, 3, 4))  # 10
      9 
     10 
     11 def myadd(a, b, c=0, d=0):
     12     return a + b + c + d
     13 
     14 print(myadd(10, 20))  # 30
     15 print(myadd(100, 200, 300))  # 600
     16 print(myadd(1, 2, 3, 4))  # 10
     17 
     18 


    函数形参的定义方式:
       1. 位置形参
       2. 星号元组形参
       3. 命名关键字形参
       4. 双星号字典形参

    位置形参
       语法:
         def 函数名(形参名1, 形参名2, ...):
             语句块

    星号元组形参:
       语法:
         def 函数名(*元组形参名):
             语句块
       作用:
         收集多余的位置传参
       说明:
         在一个函数定义中元组形参名最多只能有一个,一般命名为'args'
       示例见:
         star_tuple_args.py

    练习:
       写一个函数 mysum 可以传入任意个数字实参,返回所有实参的和
         def mysum(*args):
             ...
        
         print(mysum(1, 2, 3, 4))  # 10
         print(mysum(1, 3, 5, 7, 9))  # 25

      1 # 练习:
      2 #   写一个函数 mysum 可以传入任意个数字实参,返回所有实参的和
      3 #     def mysum(*args):
      4 #         ...
      5 
      6 #     print(mysum(1, 2, 3, 4))  # 10
      7 #     print(mysum(1, 3, 5, 7, 9))  # 25
      8 
      9 
     10 # 方法1
     11 # def mysum(*args):
     12 #     s = 0
     13 #     for x in args:
     14 #         s += x
     15 #     return s
     16 
     17 # 方法2
     18 def mysum(*args):
     19     return sum(args)
     20 
     21 print(mysum(1, 2, 3, 4))  # 10
     22 print(mysum(1, 3, 5, 7, 9))  # 25
     23 
     24 
    sun

    命名关键字形参
       语法:
         def 函数名(*, 命名关键字形参1, 命名关键字形参2, ...):
             语句块
         或
         def 函数名(*args, 命名关键字形参1, 命名关键字形参2, ..):
             语句块
       作用:
         强制所有的参数都必须用关键字传参或字典关键了传参
      示例见:
         named_keyword_args.py
         named_keyword_args2.py
     
      1 # named_keyword_args.py
      2 
      3 
      4 # 此示例示意在函数形参中定义命名关键字形参,强制让函数调用
      5 # 使用命名关键字传参:
      6 
      7 def func1(a, b, *, c, d):
      8     print(a, b, c, d)
      9 
     10 # func1(1, 2, 3, 4)  # 报错
     11 func1(1, 2, c=30, d=40)
     12 func1(a=10, b=20, c=30, d=40)
     13 
     14 
    1
      1 # named_keyword_args.py
      2 
      3 
      4 # 此示例示意在函数形参中定义命名关键字形参,强制让函数调用
      5 # 使用命名关键字传参:
      6 
      7 def func1(a, b, *args, c, d):
      8     print(a, b, args, c, d)
      9 
     10 # func1(1, 2, 3, 4)  # 报错
     11 func1(1, 2, c=30, d=40)
     12 func1(a=10, b=20, c=30, d=40)
     13 func1(1, 2, 3, 4, d=400, c=300)
     14 
     15 func1(*"ABCDEFG", **{'c':999, 'd':888})
     16 
     17 
     18 
    2

    双星号字典形参
       语法:
         def 函数名(**字典形参名):
             语句块
       作用:
         收集多余的关键字传参
       说明:
         字典形参名一般命名为'kwargs'
         一个函数内字典形参最多只能有一个
       示例见:
         star_dict_args.py

      1 # star_dict_args.py
      2 
      3 # 此示例示意用双星号字典形参接收多余的关键字传参
      4 
      5 def func(**kwargs):
      6     print("关键字传参的个数是:", len(kwargs))
      7     print("kwargs=", kwargs)
      8 
      9 func(name='weimingze', age=35, address='北京市朝阳区')
     10 func(a=1, b=2)
     11 
    1
      1 # star_tuple_args.py
      2 
      3 # 此示例示意星号元组形参的定义和使用
      4 
      5 def func(*args):
      6     print("实参个数是:", len(args))
      7     print('args=', args)
      8 
      9 func(1, 2, 3, 4)
     10 func(5, 6, 7, 8, 'A', 'B', 'C', 'D')
     11 func()
     12 
    2

    函数的参数说明:
       位置形参,缺省参数,星号元组形参,双星号字典形参可以混合使用

    函数参数自左至右的顺序为:
       1. 位置形参
       2. 星号元组形参
       3. 命名关键字形参
       4. 双星号字典形参

      示例:
         def fn(a, b=20, *args, c=30, d=40, **kwargs):
             pass
         fn(1)
         fn(100, 200, 300, 400, c='C', d='D', e='E')

      
    练习:
       已知内建函数max帮助文档为:
         max(...)
             max(iterable) -> value
             max(arg1, arg2, *args) -> value
       仿造 max写一个mymax函数,功能与max完全相同
         (要求不允许调用max)
       测试程序如下:
          print(mymax([6, 8, 3, 5]))  # 8
          print(mymax(100, 200))      # 200
          print(mymax(1, 3, 5, 9, 7)) # 9

      1 # 练习:
      2 #   已知内建函数max帮助文档为:
      3 #     max(...)
      4 #         max(iterable) -> value
      5 #         max(arg1, arg2, *args) -> value
      6 #   仿造 max写一个mymax函数,功能与max完全相同
      7 #     (要求不允许调用max)
      8 #   测试程序如下:
      9 #      print(mymax([6, 8, 3, 5]))  # 8
     10 #      print(mymax(100, 200))      # 200
     11 #      print(mymax(1, 3, 5, 9, 7)) # 9
     12 
     13 
     14 # def mymax(a, *args):
     15 def mymax(*args):
     16     # print("args=", args)
     17     if len(args) == 1:  # 判断是否是一个可迭代参数的情况
     18         L = args[0]  # 一定绑定一个可迭代对象
     19         zuida = L[0]  # 假设第一个元素最大
     20         for x in L:
     21             if x > zuida:
     22                 zuida = x
     23         return zuida
     24     else:  # 否则有多个参数的情况
     25         zuida = args[0]
     26         for x in args:
     27             if x > zuida:
     28                 zuida = x
     29         return zuida
     30 
     31 
     32 print(mymax([6, 8, 3, 5]))  # 8
     33 print(mymax(100, 200))      # 200
     34 print(mymax(1, 3, 5, 9, 7)) # 9
     35 
     36 
     37 
     38 
    max

      1 # 练习:
      2 #   已知内建函数max帮助文档为:
      3 #     max(...)
      4 #         max(iterable) -> value
      5 #         max(arg1, arg2, *args) -> value
      6 #   仿造 max写一个mymax函数,功能与max完全相同
      7 #     (要求不允许调用max)
      8 #   测试程序如下:
      9 #      print(mymax([6, 8, 3, 5]))  # 8
     10 #      print(mymax(100, 200))      # 200
     11 #      print(mymax(1, 3, 5, 9, 7)) # 9
     12 
     13 
     14 def mymax(a, *args):
     15     if len(args) == 0:  # 判断是否是一个可迭代参数的情况
     16         L = a  # 一定绑定一个可迭代对象
     17         zuida = L[0]  # 假设第一个元素最大
     18         for x in L:
     19             if x > zuida:
     20                 zuida = x
     21         return zuida
     22     else:  # 否则有多个参数的情况
     23         zuida = a
     24         for x in args:
     25             if x > zuida:
     26                 zuida = x
     27         return zuida
     28 
     29 
     30 print(mymax([6, 8, 3, 5]))  # 8
     31 print(mymax(100, 200))      # 200
     32 print(mymax(1, 3, 5, 9, 7)) # 9
     33 
     34 
     35 
     36 
    max2

    全局变量 和 局部变量
       局部变量 local varible:
         定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
         局部变量只能在函数内部使用
         局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
         当有同名的全局变量和局部变量时,优先访问局部变量
       全局变量 global variable:
         定义在函数外部,模块内部的变量称为全局变量
         全局变量,所有函数都可以直接访问(但函数内不能将其直接赋值)

    局部变量说明:
       在函数内部赋值语句不会对全局变量造成影响
       局部变量只能在其被声明的函数内部访问,而全局变量可以在整数模
       块范围内访问
    示例见:
       global_local.py

      1 # global_local.py
      2 
      3 # 此示例示意全局变量的定义和局部变量的定义
      4 a = 100
      5 b = 200
      6 c = 9999999
      7 def fx(c):
      8     a = 1  # 创建局部变量,并非改变全局变量
      9     d = 400
     10     print(a, b, c, d)
     11 
     12 fx(300)
     13 print('a=', a)  # 100
     14 print('b=', b)
     15 print('c=', c)

    globals 和 locals 函数:
       globals()  返回当前全局作用域内变量的字典
       locals()   返回当前局部作用域内变量的字典

      示例见:
         globals_and_locals.py

      1 # globals_and_locals.py
      2 
      3 
      4 # 此示例示意globals 和 locals函数的使用方法
      5 a = 1
      6 b = 2
      7 c = 3
      8 def fn(c, d):
      9     e = 300
     10     # 此处有多少个局部变量?
     11     print("locals()返回:", locals())
     12     # 此处有多少个全局变量?
     13     print("globals() 返回:", globals())
     14     print(c)  # 100
     15     print(globals()['c'])  # 3
     16 
     17 
     18 fn(100, 200)
     19 


    练习:
       1. 算出 100 ~ 999 以内的水仙花数(Narcissistic number)
         水仙花数是指百位的3次方加上十位的3次方加上个位的3次方
         等于原数的整数
         例如:  153 = 1**3 + 5**3 + 3**3
         答案:  153, 370, ...

      1 #   1. 算出 100 ~ 999 以内的水仙花数(Narcissistic number)
      2 #     水仙花数是指百位的3次方加上十位的3次方加上个位的3次方
      3 #     等于原数的整数
      4 #     例如:  153 = 1**3 + 5**3 + 3**3
      5 #     答案:  153, 370, ...
      6 
      7 # 方法1
      8 # for x in range(100, 1000):
      9 #     # 拆出百位,十位,个位
     10 #     bai = x // 100  # 百位
     11 #     shi = x % 100 // 10  # 十位
     12 #     ge = x % 10  # 个位
     13 #     if x == bai ** 3 + shi ** 3 + ge ** 3:
     14 #         print(x)  # 满足条件的水仙花数
     15 
     16 # 方法2, 将数字转为字符串
     17 # for x in range(100, 1000):
     18 #     s = str(x)
     19 #     bai = int(s[0])
     20 #     shi = int(s[1])
     21 #     ge = int(s[2])
     22 #     if x == bai ** 3 + shi ** 3 + ge ** 3:
     23 #         print(x)  # 满足条件的水仙花数
     24 
     25 # 方法3
     26 for bai in range(1, 10):
     27     for shi in range(0, 10):
     28         for ge in range(10):
     29             # print(bai, shi, ge)
     30             x = bai * 100 + shi * 10 + ge
     31             if x == bai ** 3 + shi ** 3 + ge ** 3:
     32                 print(x)


       2. 完全数:
          1 + 2 + 3 = 6 (6为完全数)
          1, 2, 3都为6的因数(能被一个数x整除的数为y,则y为x的因数)
          1 x 6 = 6
          2 x 3 = 6
          完全数是指除自身以外的所有因数之和相加等于自身的数
           求4~5个完全数,并打印
          答案:
            6
            28
            496
            ...

      1 #   2. 完全数:
      2 #      1 + 2 + 3 = 6 (6为完全数)
      3 #      1, 2, 3都为6的因数(能被一个数x整除的数为y,则y为x的因数)
      4 #      1 x 6 = 6
      5 #      2 x 3 = 6
      6 #      完全数是指除自身以外的所有因数之和相加等于自身的数
      7 #       求4~5个完全数,并打印
      8 #      答案:
      9 #        6
     10 #        28
     11 #        496
     12 #        ...
     13 
     14 def is_perfect_number(x):
     15     '''此函数判断x是否为完全数,如果是返回True,否则返回False'''
     16     L = []  # 创建一个列表,用来存放x所有的因数
     17     for i in range(1, x):
     18         if x % i == 0:  # 整除了,i则一定是x的因数
     19             L.append(i)
     20     if sum(L) == x:  # 是完全数
     21         return True
     22     return False
     23 
     24 def main():
     25     i = 2
     26     while True:
     27         # 如果i是完全数,则打印i的值
     28         if is_perfect_number(i):
     29             print(i)
     30 
     31         i += 1
     32 
     33 main()
     34 

       3. 写一个myrange()函数,参数可以传1~3个,实际意义同range函数
         规则相同,此函数返回符合range(...) 函数规则的列表
         如:
           L = myrange(4)
           print(L)  # [0, 1, 2, 3]
           L = myrange(4, 6)
           print(L)  # [4, 5]
           L = myrange(1, 10, 3)
           print(L)  # [1, 4, 7]


      1 #   3. 写一个myrange()函数,参数可以传1~3个,实际意义同range函数
      2 #     规则相同,此函数返回符合range(...) 函数规则的列表
      3 #     如:
      4 #       L = myrange(4)
      5 #       print(L)  # [0, 1, 2, 3]
      6 #       L = myrange(4, 6)
      7 #       print(L)  # [4, 5]
      8 #       L = myrange(1, 10, 3)
      9 #       print(L)  # [1, 4, 7]
     10 
     11 
     12 def myrange(start, stop=None, step=None):
     13     if stop is None:  # if not stop:
     14         stop = start
     15         start = 0
     16     if step is None:
     17         step = 1
     18     # 开始,结束和步长都已确定
     19     # return [x for x in range(start, stop, step)]
     20     if step > 0:  # 正向
     21         L = []
     22         while start < stop:
     23             L.append(start)
     24             start += step
     25         return L
     26     elif step < 0:
     27         L = []
     28         while start > stop:
     29             L.append(start)
     30             start += step
     31         return L
     32 
     33 L = myrange(4)
     34 print(L)  # [0, 1, 2, 3]
     35 L = myrange(4, 6)
     36 print(L)  # [4, 5]
     37 L = myrange(1, 10, 3)
     38 print(L)  # [1, 4, 7]
     39 
     40 L2 = myrange(10, 0, -2)
     41 print(L2)
     42 
     43 
     44 
      1 
      2 #   3. 改写之前的学生信息管理程序:
      3 #     用两个函数来封装功能的代码块
      4 #        函数1:  input_student()   # 返回学生信息字典的列表
      5 #        函数2:  output_student(L)  # 打印学生信息的表格
      6 
      7 def input_student():
      8     L = []  # 创建一个列表,准备存放学生数据的字典
      9     while True:
     10         n = input("请输入姓名: ")
     11         if not n:  # 如果用户输入空字符串就结束输入
     12             break
     13         a = int(input("请输入年龄: "))
     14         s = int(input("请输入成绩: "))
     15         d = {}  # 一定要每次都创建一个新的字典
     16         d['name'] = n
     17         d['age'] = a
     18         d['score'] = s
     19         L.append(d)   # 把d加入列表中L
     20     return L
     21 
     22 def output_student(L):
     23     print("+---------------+----------+----------+")
     24     print("|     姓名      |   年龄   |   成绩   |")
     25     print("+---------------+----------+----------+")
     26     for d in L:
     27         name = d['name']
     28         age = str(d['age'])  # 转为字符串
     29         score = str(d['score'])  # 转为字符串
     30         print("|%s|%s|%s|" % (name.center(15),
     31                             age.center(10),
     32                             score.center(10)))
     33     print("+---------------+----------+----------+")
     34 
     35 
     36 # infos = input_student()
     37 # print(infos)  # 打印列表[{...}, {...}]
     38 # output_student(infos)   # 根据实参infos打印表格
     39 
     40 def main():
     41     infos = []  # 此列表用于保存学生数据
     42     while True:
     43         print(" 1) 添加学生信息")
     44         print(" 2) 显示学生信息")
     45         print(" q) 退出")
     46         s = input("请选择: ")
     47         if s == '1':
     48             infos += input_student()
     49         elif s == '2':
     50             output_student(infos)
     51         elif s == 'q':
     52             break
     53 
     54 
     55 main()
     56 
    student
  • 相关阅读:
    window8用户在安装VirtualBox时弹出了“Installation failed!Error:系统找不到指定的路径”的错误提示
    JSON和JSONP原理和区别
    设计模式前言
    Apache POI使用指南(HSSFWorkbook生成excel)
    java策略模式
    记一次mysql5.7保存Emoji表情
    StopWatch任务计时器
    详谈linux中压缩
    List集合中元素排序
    java中文拼音字母排序
  • 原文地址:https://www.cnblogs.com/shengjia/p/10311202.html
Copyright © 2020-2023  润新知