繁体   English   中英

添加到字典时如何使用 while 循环?

[英]How to use a while loop while adding to your dictionary?

我的词典:

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: "), ---> ID <---, input("Enter owners name: ")

While 循环限制用户只能输入len == 11的数字

while True:
    ID = input("Enter companys ID: ")
    if len(ID) == 11:
        print(ID)
        break
    else:
        print("ID has to have 11 digits. Try again.")

我的问题是:如何将这个 while 循环放在更新字典的company_account中,而不是ID中? 或者也许是其他一些解决方案来限制用户在更新字典时输入恰好 11 位数字的数字?

我尝试放置global ID ,但它返回错误。

您获取输入的循环很好。 只需将其设为函数并使用它代替键分配中的标准input

def get_id():
    while True:
        ID = input("Enter companys ID: ")
        if len(ID) == 11:
            return ID
        else:
            print("ID has to have 11 digits. Try again.")

company_account[input("Enter company key: ")] = [input("Enter company name: "), ..., get_id(), ...]

是这样的吗? 使您的 len-check 成为一个功能,并提出您的问题并将它们放入字典中。 如果你问我,更容易阅读。

还添加到 check_len 函数以确保输入是 int。 对城市代码也一样。


def check_len(description):
    while True:
        ID = input(description)
        if len(ID) == 11:
            try:
                return int(ID)
            except ValueError:
                print('ID can only contain digits.')
        else:
            print("ID has to have 11 digits. Try again.")

def check_int(description):
    while True:
        ID = input(description)
        try:
            return int(ID)
        except ValueError:
            print('ID can only contain digits.')


a = check_len('Enter Company key: ')
b = input('Enter Company name: ')
c = input('Enter Company address: ')
d = check_int('Enter Company City Code: ')
e = input('Enter City: ')
f = input('Enter owners name: ')

company_account = {
    "CompanyKey": [a, b, c, d, e, f]
}

print(company_account)

输出:

Enter Company key: 12345678910
Enter Company name: Useless Apps
Enter Company address: Useless Street
Enter Company City Code: 1337
Enter City: Useless Town
Enter owners name: Mr Useless
{'CompanyKey': [12345678910, 'Useless Apps', 'Useless Street', 1337, 'Useless Town', 'Mr Useless']}

不过,我肯定会建议您查看类和对象。

钱币。 你正在用钢锯砍树。 我们需要给你买些电动工具!

我会给你一些“香草”Python 3.6+ 的东西,同时提到有第三方库可以帮助你。

class CompanyAccount:
    
  def __init__(self):
    self.key=self.ask_for("key")
    self.name=self.ask_for("name")
    self.address=self.ask_for("address")
    self.city_code=self.ask_for("City Code")
    self.city=self.ask_for("City")
    self.owner=self.ask_for("owner's name")

    self.id=self.ask_for_id()

  @staticmethod
  def ask_for_id():
    while True:
      ID = self.ask_for("ID")
      if len(ID) == 11:
        break
      else:
        print("ID has to have 11 digits. Try again.")
    # break out of loop here
    return ID

  @staticmethod
  def ask_for(val):
    return input(f"Enter Company {val}: ")

  def to_dict(self):
    return {
      self.key: [
        self.name,
        self.address,
        self.city_code,
        self.city,
        self.id,
        self.owner,
      ]
    }

# initialise
company = CompanyAccount()

print(company.id) # etc.

company.to_dict() # in case the format you asked for is really important

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM