如何停止程序以"END"单词



因此,当在pycharm的标准输入中使用ctrl+d时,我的程序可以完美地工作。它从标准输入中获取数据。问题是我的任务是当我写";结束";最后一行的单词。它不起作用,我不知道为什么。有人能帮我吗?

from collections import namedtuple
from typing import NamedTuple
import sys
LegoSet = NamedTuple ("LegoSet",
[("number", int), ("name", str),
("theme", str), ("pieces", int)])

def line_to_lego_set(line: str):
ls = line.strip().split(";")
return LegoSet(int(ls[0]), ls[1], ls[2], int(ls[3]))

def lego_set_to_line(lego_set: LegoSet):
return f"{lego_set.name} ({lego_set.number}): {lego_set.pieces} - {lego_set.theme}"

def sort_lego_sets(list):
for i in range(0, len(list)):
for j in range(i+1, len(list)):
if list[i][3] < list[j][3]:
list[i], list[j] = list[j], list[i]
elif list[i][3] == list[j][3] and list[i][2] > list[j][2]:
list[i], list[j] = list[j], list[i]
elif list[i][2] == list[j][2] and list[i][1] > list[j][1]:
list[i], list[j] = list[j], list[i]
elif list[i][3] == list[j][3] and list[i][0] > list[j][0]:
list[i], list[j] = list[j], list[i]
return list

def main():
lego_sets = []
for line in sys.stdin:
if line == "END":
break
else:
lego_set = line_to_lego_set(line.strip())
lego_sets.append(lego_set)
lego_sets = sort_lego_sets(lego_sets)
for lego in lego_sets:
print(lego_set_to_line(lego))

if __name__ == "__main__":
main()

这里的问题是,当您键入END并按ENTER时,实际的行不仅是END,而且是Linux上的ENDn或Windows上的ENDrnnrn是换行符。要使您的代码工作,您必须将if语句更改为:

for line in sys.stdin:
if line.rstrip() == "END": # add here line.rstrip()
break
else:
lego_set = line_to_lego_set(line.strip())
lego_sets.append(lego_set)

我希望它能帮助你。

最新更新