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