让我们假设一个老师想把n个学生加到数据库中。
n = 1000
students = dict(input("enter students name and grade. Example 'Student C: '").split()
for _ in range(n))
print(students)如果我们有1000名学生,这很好,但如果老师想在10名学生之后完成呢?有什么方法可以输入“退出”来中断循环吗?
发布于 2020-12-04 16:12:15
m = {}
while True:
grade = input("enter students name and grade. Example 'Student C: '").split()
if grade[0] == 'quit':
break
else:
m[grade[0]] = grade[1]
print(m)发布于 2020-12-04 16:18:21
不要将生成器表达式嵌入到对dict的单个调用中,而是在输入中处理时构建dict。
n = 1000
students = {}
for _ in range(n):
x = input("enter students name and grade. Example 'Student C: '")
if x == "quit":
break
# You might want to do more error checking here.
student, grade = x.split()
students[student] = grade更高级一点的是,如果输入了iter,您可以使用quit的两个参数形式(参见下文)来终止循环,并使用itertools.islice将循环限制为n条目。
from itertools import islice
n = 1000
students = {}
for x in islice(iter(lambda: input("..."), "quit"), n):
student, grade = x.split()
students[student] = grade正如您可能注意到的,这允许您(在拆分输入行时忽略任何错误检查)回到您对dict调用中生成器的最初想法。
from itertools import islice
n = 1000
students = dict(x.split() for x in islice(iter(lambda: input("..."), "quit"), n))最后,如果您只使用n作为一种避免永远读取输入的方法,您可以省略它,因为用户现在可以随时输入quit:
students = dict(x.split() for x in iter(lambda: input("..."), "quit"))另外,另一种创建可调用为iter的第一个参数的零参数的方法是使用functools.partial。
from functools import partial
students = dict(x.split() for x in iter(partial(input, "..."), "quit"))iter(x, y)是做什么的?
( iter的两个参数形式接受一个函数反复调用,并生成该函数的返回值,直到该函数返回第二个参数为止。iter(lambda: input("..."), n)等价于
def iter(f, stop):
while True:
x = f()
if x == stop:
break
yield x)
islice(x, y)是做什么的?
这将产生一个新的迭代器,如果它的y元素超过y元素,它只返回x的第一个y元素。它大致相当于
def islice(x, y):
while y:
yield next(x)
y -= 1发布于 2020-12-04 16:10:53
是的有办法。如果使用python 3,请使用the ()函数将输入的Stdin文本捕获为字符串。将该字符串与单词“退出”和条件if语句匹配。也就是说,如果字符串==“退出”,那么exit()或类似的东西。
一个更好的方法,我认为应该是问有多少条目是需要在开头不?而不是在while循环中不断地输入。只是我的0.2美分。
https://stackoverflow.com/questions/65146866
复制相似问题