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

def foo(x, *args, y):
    return x, args, y

def bar(x, y, *, a, b):
    return x, y, a, b

foo(1, 10, 10, y=3)
bar(1, 2, a=1, b=3)

  

2. 什么是LEGB,请解释

LEGB 表示变量的搜索顺序:Local 优先使用本地变量 --> Enclosing,本地变量没有,向外层函数的局部变量找 --> Global,还没有,向更外层的全局变量找 --> Built-in,还没有,向内置变量找,如果都没有则抛出NameError异常

 

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

1. 运行后提示让用户输入一个数字

2. 提示输入操作符(+ - * /)

3. 再次提示输入一个数字

4. 打印计算结果

5. 在不退出程序的前提下,可以允许用户继续输入新一组数据计算

6. 尽可能改善用户体验

import operator

operator_dic = {
    '+' : operator.add,
    '-' : operator.sub,
    '*' : operator.mul,
    '/' : operator.truediv
}

# def calculator(num1, num2, oper):
#     if oper == '/' and num2 == 0:
#         print("division by zero")
#         return None
#     return operator_dic[oper](num1, num2)

#判断字符串是否是数字(整数、小数、负数)
def is_number(num):
    #判断小数:把负号和点号都给去了,再通过isdigit判断
    str_num = num
    if str_num.count(".") == 1: 
        if str_num[0] == "-":
            str_num = str_num[1:]
        if str_num[0] == ".":
            return False
        str_num = str_num.replace(".","")
        if str_num.isdigit():
            return float(num)
        
    #判断整数:把负号给去了,再通过isdigit判断
    elif str_num.count(".") == 0: 
        if str_num[0] == "-":
            str_num = str_num[1:]
        if str_num.isdigit():
            return int(num)
    else:
        return False
        
        
flag = 1
while flag:
    while True:
        num1 = input(">>>请输入一个数字: ")  
        num1 = is_number(num1)
        if num1 or num1 == 0:
            break
        else:
            print("请您输入合法的数字")
    while True:
        oper = input(">>>请输入一个操作符(+、-、*、/): ")
        if oper not in operator_dic.keys():
            print("请输入正确的操作符,计算器支持的操作符有+、-、*、/")
        else:
            break
    while True:
        num2 = input(">>>请再输入一个数字: ")
        num2 = is_number(num2)
        if (num2 == 0 and oper == '/'):
            print("除数不能为0")
        elif num2 or num2 == 0:
            break
        else:
            print("请您输入合法的数字")
        
    print("{} {} {} = {}".format(num1, oper, num2, (lambda num1, num2, oper: operator_dic[oper](num1, num2))(num1, num2, oper)))
    while True:
        prompt = input(">>>是否继续:Yes/No")
        if prompt.lower() != 'yes' and prompt.lower() != 'no':
            print("请输入Yes或者No")
        else:
            if prompt.lower() == 'yes':
                flag = 1
            else:
                flag = 0
            break