python由用户输入字典_Python全栈day13(作业讲解字典嵌套实现用户输入地址信息添加及查看)...

要求:

列出字典对应节点名称,根据用户输入可以添加节点,查看节点等功能,这里以地址省-市-县等作为列子,此题熟悉字典嵌套功能

vim day13-16.py

db = {}

path = []

while True:

#定义临时字典temp

temp = db

#path默认是空列表根据进入的节点深度有对应的内容

for item in path:

temp = temp[item]

#列出节点下面对应的可选key值

print('当前可选节点',list(temp.keys()),'\n')

choice = input('1:添加节点;2:查看并进入节点(Q退出/返回上一级B) \n>>>')

if choice == '1':

k = input('请输入要添加的子节点名称:')

if k in temp:

print('节点已经存在')

else:

temp[k] = {}

elif choice == '2':

k = input('请输入要查看的子节点:')

if k in temp:

path.append(k)

else:

print('子节点名称错误')

elif choice.lower() == 'b':

if path:

path.pop()

elif choice.lower() == 'q':

break

else:

print('输入不合法')

print('字典和path值为:',db,path)

执行步骤

一,第一次循环db为空 所以当前可选节点输出也为空

二,输入1添加一个节点江西对应的db值为{'江西': {}} path还是为空

同理在同一级下面再添加一个一级节点北京

三,输入2进入一级节点江西下面,db值没有变但是path值进过append方法添加了一条记录为["江西"],由于path有值使用执行了语句for item in path:然后把对应一级目录的字典值{}赋值给了temp所以当前可选节点为空

四,继续在一级节点江西下面添加两个节点分别为吉安和南昌,此时修改了对应的temp,temp对应的是字典db["江西"]所以db的值也会对应改变

五,继续进入下一级节点吉安,path的值变成了['江西', '吉安'],for循环执行了两次,第一次temp=["江西"]={'南昌': {}, '吉安': {}} 第二次 temp=["江西"]["吉安"]={}所以当前节点的可选节点为空,同理可以继续添加泰和等下一级节点

六,输入b退出本层节点,因为执行了pop删除的列表的最后一个元素所以path又变成["江西"]了,同理再输入一次b又执行一次pop就又回到第一层节点了

七,输入q则直接退出整个循环

通过这种字典嵌套的方法理论上可以实现无限字典嵌套字典

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是使用Python编写的实现用户从终端输入5个月份,按照月份大小输出每月的每天的代码: ```python import calendar # 获取用户输入的5个月份 months = [] for i in range(5): month = input("请输入一个月份(格式:YYYY-MM):") months.append(month) # 将月份按照大小排序 months.sort() # 输出每个月的每天 for month in months: year, month = map(int, month.split('-')) days_in_month = calendar.monthrange(year, month)[1] print(f"{year}年{month}月有{days_in_month}天:") for day in range(1, days_in_month+1): print(day) ``` 运行程序后,程序会要求用户依次输入5个月份,输入完成后程序会将月份按照大小排序,然后输出每个月的每天。例如,如果用户输入的月份分别为2022-03、2022-06、2022-01、2022-09和2022-02,则程序会按照月份从小到大的顺序输出每个月的每天: ``` 请输入一个月份(格式:YYYY-MM):2022-03 请输入一个月份(格式:YYYY-MM):2022-06 请输入一个月份(格式:YYYY-MM):2022-01 请输入一个月份(格式:YYYY-MM):2022-09 请输入一个月份(格式:YYYY-MM):2022-02 2022年01月有31天: 1 2 3 ... 29 30 31 2022年02月有28天: 1 2 3 ... 26 27 28 2022年03月有31天: 1 2 3 ... 29 30 31 2022年06月有30天: 1 2 3 ... 28 29 30 2022年09月有30天: 1 2 3 ... 28 29 30 ``` ### 回答2: 编写程序可以使用Python编程语言来实现用户从终端输入5个月份,并按照月份大小输出每月的每天。 首先,我们可以使用input()函数接收用户输入的5个月份,将其保存到一个列表中。 ``` months = [] for i in range(5): month = input("请输入一个月份:") months.append(month) ``` 接下来,我们可以创建一个字典,将每个月份作为键,对应一个存放该月份每天的列表作为值。然后,使用一个嵌套的循环来遍历输入的月份列表,并通过input()函数依次接收用户输入的每个月份的每一天,并添加到对应字典中的列表中。 ``` days_by_month = {} for month in months: days = [] for i in range(1, 32): day = input("请输入{}月的第{}天:".format(month, i)) if day == '0': break else: days.append(day) days_by_month[month] = days ``` 最后,我们可以遍历字典,按照月份的顺序输出每个月份的每一天。 ``` sorted_months = sorted(days_by_month.keys(), key=lambda x: int(x)) for month in sorted_months: print("{}月的每一天是:{}".format(month, days_by_month[month])) ``` 这样就实现用户从终端输入5个月份,并按照月份大小输出每月的每天的程序。 需要注意的是,上述程序没有对用户输入的月份和日期进行合法性验证,例如对于日期的范围、重复日期的判定等,根据实际需求可以添加相应的验证方式。 ### 回答3: 编写程序实现用户从终端输入5个月份,按照月份大小输出每月的每天的方法如下: 1. 首先,我们可以使用 Python 编程语言来实现这个程序。打开一个 Python 编辑器或者命令行窗口开始编写程序。 2. 在程序的开头,我们需要定义一个字典来存储每个月份对应的天数。可以用数字表示月份,并将每个月份对应的天数作为值存储在字典中。 3. 接下来,我们需要使用一个循环来获取用户输入的5个月份。可以使用 `input()` 函数来获取输入,并将输入的值存储在一个列表中。 以一个简单的循环为例: ``` months = [] for i in range(5): month = input("请输入第{}个月份:".format(i+1)) months.append(int(month)) ``` 4. 然后,我们可以对用户输入的月份进行排序,以便按照升序打印每个月份对应的天数。可以使用 `sorted()` 函数对列表进行排序。 ``` months = sorted(months) ``` 5. 最后,我们可以使用一个循环来打印每个月份对应的天数。可以使用字典中的值来获取每个月份的天数,并使用 `print()` 函数来打印输出。 ``` for month in months: days = month_days[month] print("{}月份的天数是:{}".format(month, days)) ``` 完整的程序示例: ```python month_days = { 1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31 } months = [] for i in range(5): month = input("请输入第{}个月份:".format(i+1)) months.append(int(month)) months = sorted(months) for month in months: days = month_days[month] print("{}月份的天数是:{}".format(month, days)) ``` 这样,程序就可以实现用户从终端输入5个月份,并按照月份大小输出每月的天数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值