week07

1. 如何为函数定义keyword-only参数(写出个例子即可)?

keyword-only形参,位于*args或者*,之后,只能接受关键字传入实参。

#示例1
def foo(x, *args, y):
    print(x, y, args)
    
foo(1, 2, 4, y=200)   #调用时keyword-only参数只支持以关键字形式传入的参数
    
#示例2
def foo(*, x, y): 
    print(x, y)

foo(x=1, y=‘abc‘)
#示例3
def bar(a, b, /, c, d=10, *args, m=20, n, **kwargs):  #注意*args后面的m=20定义缺省值可以放在前面
    print(a, b, c, d, args, m, n, kwargs)

#该函数中,m和n时keyword-only参数,需要以k,y的形式传入实参,但是因为m有默认值,所以直接传入n的参数即可。注意传参的时候要放到位置参数后面。
bar(1, 2, n=100, c=5)
2 5 10 () 20 100 {}

2. 什么是LEGB,请解释

变量的优先级顺序,优先级由高低依次是L-->E-->G-->B。函数定义中,优先使用本地局部变量,本地无定义的情况下在按顺序向外查找。

  • L: Local,本地局部变量。

  • E: Enclosing,外层函数局部变量。

  • G: Goabl,跟模块有关,当前模块中的全局变量,模块需要加载,默认是main模块。

  • B: Built-in,内建变量,print,list,str,int,range,Exception 生命周期和解释器相同。

3. 实现一个计算机程序,如下效果:

  1. 运行后提示让用户输入一个数字
  2. 提示输入操作符(+ - * /)
  3. 再次提示输入一个数字
  4. 打印计算结果
  5. 在不退出程序的前提下,可以允许用户继续输入新一组数据计算
  6. 尽可能改善用户体验
def addition(x, y):
    return x + y

def subtraction(x, y):
    return x - y 

def multipulication(x, y):
    return x * y
    
def division(x, y):
    return x / y

def calculator(*args):
    print("="* 30 + "简单计算器" + "=" * 30)
    x = int(input(‘请输入一个数字: ‘))
    o = input(‘请输入运算符 + - * /: ‘)
    y = int(input(‘请输入第二个数字: ‘))
    if x or y or o:
        print("请按要求输入相应的字符。")
    if o == ‘+‘:
        return addition(x, y)
    elif o == ‘-‘:
        return subtraction(x, y)
    elif o == ‘*‘:
        return multipulication(x, y)
    if o == ‘/‘ and y != 0:
        return division(x, y)
    else:
        print("0不可以做除数,请重新输入。")

while True:
    print("计算结果:{}".format(calculator()))

#输出结果
==============================简单计算器==============================
请输入一个数字: 1000
请输入运算符 + - * /: +
请输入第二个数字: 1000
请按要求输入相应的字符。
计算结果:2000

week07

上一篇:曼哈顿最小生成树


下一篇:游戏开发中的物理介绍(2)