如何在更新Python字典时嵌入限制11位ID的while循环?
问题说明
现有Python字典:
company_account = { "CompanyKey": ["Company", "Address", 321321, "City", 14575159920, "Name"] }
需要通过用户输入为字典添加新键值对,代码框架如下:
company_account[input("Enter company key: ")] = ( input("Enter company name: "), input("Enter company address: "), input("Enter company city code: "), input("Enter city: "), # 此处需要插入验证后的11位ID input("Enter owners name: ") )
已有用于限制ID为11位的while循环:
while True: ID = input("Enter companys ID: ") if len(ID) == 11: print(ID) break else: print("ID has to have 11 digits. Try again.")
需求:将该循环整合到字典更新逻辑中,避免单独的ID变量;或找到其他在更新字典时限制ID为11位的方法,此前尝试使用global关键字报错。
解决方案
方案1:封装验证逻辑为函数(推荐)
把ID验证的循环写成独立函数,在更新字典时直接调用函数获取合法ID,逻辑清晰且可复用:
def get_valid_company_id(): while True: id_input = input("Enter company's ID: ") if len(id_input) == 11: print(id_input) return id_input else: print("ID has to have 11 digits. Try again.") # 初始化字典 company_account = { "CompanyKey": ["Company", "Address", 321321, "City", 14575159920, "Name"] } # 更新字典时调用函数获取合法ID company_account[input("Enter company key: ")] = ( input("Enter company name: "), input("Enter company address: "), input("Enter company city code: "), input("Enter city: "), get_valid_company_id(), input("Enter owner's name: ") )
后续如果要修改验证规则(比如要求ID全为数字),直接修改函数即可,维护成本低。
方案2:内联验证循环(无单独变量)
如果一定要避免单独变量或函数,可利用赋值表达式:=和next()把循环内联到赋值语句中(可读性稍差,不推荐新手使用):
company_account = { "CompanyKey": ["Company", "Address", 321321, "City", 14575159920, "Name"] } company_account[input("Enter company key: ")] = ( input("Enter company name: "), input("Enter company address: "), input("Enter company city code: "), input("Enter city: "), # 内联循环获取11位ID next(id_input for _ in iter(int, 1) if (id_input := input("Enter company's ID: ")) and len(id_input) == 11), input("Enter owner's name: ") )
这个写法会持续请求输入,直到用户输入11位长度的内容为止。
关于global的问题
你之前用global报错是因为完全没必要——global用于在局部作用域修改全局变量,但这里根本不需要全局ID变量,直接通过函数返回值或内联逻辑获取合法ID即可,用global反而会增加代码耦合性,容易引发不必要的问题。
内容的提问来源于stack exchange,提问作者Ivo
相关产品推荐
相关产品推荐

