n排宽度不一的座位,每排2座,2×n名内外向乘客依序上车按各自喜好选座。
(笔记模板由python脚本于2023年11月05日 21:49:31创建,本篇笔记适合熟悉python列表list、字符串str、元组tuple的coder翻阅)
Python 官网:https://www.python.org/
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
本文质量分:
CSDN质量分查询入口:http://www.csdn.net/qc
【题目截图原文地址:https://blog.csdn.net/qq_41840843/article/details/132913345】
代码运行效果截屏图片
乘客上车就坐情况字典
输入:
3
45 30 40
010011
输出:
{‘45’: [(4, ‘1’), (3, ‘0’)], ‘30’: [(1, ‘1’), (0, ‘0’)], ‘40’: [(5, ‘1’), (2, ‘0’)]}
输入样例,用dict.fromkeys方法初始化乘客上车就坐字典。
print('\n输入:')
in_text1 = []
for i in 'abc':
s = input()
if not s:
break
in_text1.append(s)
in_text2 = '''3
45 60 30
010011''' # 默认输入样例。
in_text = in_text2.split('\n') if not in_text1 else in_text1
start = time() # 记录程序开始处理时的秒时间。
n, seat, person = in_text
seat = dict.fromkeys(seat.split()) # 生成座位字典。
遍历乘客字符,依内、外向乘客喜好选位。虽然,题目描述中说“数据保证存在合理”,但我还是设置了,选不到座位打印提示字符后退出程序。
for k,i in enumerate(person):
if not int(i):
seatNone = sorted([i for i in seat.keys() if not seat.get(i)])
if not seatNone:
print(f"\n{' 找不到合适的座位!':~^32}")
exit() # 终止程序。
seat[seatNone[0]] = [(k, i)]
else:
seatOne = sorted([i for i in seat.keys() if len(seat.get(i) if seat.get(i) else []) == 1])
if not seatOne:
print(f"\n{' 找不到合适的座位!':~^32}")
exit() # 终止程序。
seat[seatOne[-1]] = [(k, i)] + seat.get(seatOne[-1])
乘客上车就坐字典格式打印输出,比直接输出字典更易读。
格式化输出函数
def outSeat(): # 格式化返回乘客座位分配字典内容字符串。
result = ''
for k,i in enumerate(seat.keys()):
last, first = seat.get(i)
result += f" 第{k+1}排(座宽{i}):第{last[0]+1}位{'内向' if last[1]=='0' else '外向'}乘客、第{first[0]+1}位{'内向' if first[1]=='0' else '外向'}乘客"
return '\n'.join(result.split())
插值字符串格式调用“格式化输出函数”,打印输出最后结果。题目有时间要求,我调用当前秒时间获取方法计算执行程序用时。
if __name__ == '__main__':
print(f"{in_text2 if not in_text1 else ''}\n\n输出:\n{outSeat()}\n")
#print(f"{in_text2 if not in_text1 else ''}\n\n输出:\n{seat}\n")
print(f"\n{f' 程序运行用时{round(time()-start, 6)}秒 ':~^33}")
(源码较长,点此跳过源码)
#!/sur/bin/nve python
# coding: utf-8
from time import time
print('\n输入:')
in_text1 = []
for i in 'abc':
s = input()
if not s:
break
in_text1.append(s)
in_text2 = '''3
45 60 30
010011''' # 默认输入样例。
in_text = in_text2.split('\n') if not in_text1 else in_text1
start = time() # 记录程序开始处理时的秒时间。
n, seat, person = in_text
seat = dict.fromkeys(seat.split()) # 生成座位字典。
for k,i in enumerate(person):
if not int(i):
seatNone = sorted([i for i in seat.keys() if not seat.get(i)])
if not seatNone:
print(f"\n{' 找不到合适的座位!':~^32}")
exit() # 终止程序。
seat[seatNone[0]] = [(k, i)]
else:
seatOne = sorted([i for i in seat.keys() if len(seat.get(i) if seat.get(i) else []) == 1])
if not seatOne:
print(f"\n{' 找不到合适的座位!':~^32}")
exit() # 终止程序。
seat[seatOne[-1]] = [(k, i)] + seat.get(seatOne[-1])
def outSeat(): # 格式化返回乘客座位分配字典内容字符串。
result = ''
for k,i in enumerate(seat.keys()):
last, first = seat.get(i)
result += f" 第{k+1}排(座宽{i}):第{last[0]+1}位{'内向' if last[1]=='0' else '外向'}乘客、第{first[0]+1}位{'内向' if first[1]=='0' else '外向'}乘客"
return '\n'.join(result.split())
if __name__ == '__main__':
print(f"{in_text2 if not in_text1 else ''}\n\n\n输出:\n{seat}\n")
print(f"\n{f' 程序运行用时{round(time()-start, 6)}秒 ':~^33}")
我的HOT博:
本次共计收集 246 篇博文笔记信息,总阅读量 40.46w,平均阅读量 1644。已生成 16 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-12 05:41:03 完成,用时 4 分 41.10 秒。
精品文章:
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
CSDN实用技巧博文: