Python 如何让用户通过文本输入打破循环?
假设一名教师想要向数据库中添加n个学生Python 如何让用户通过文本输入打破循环?,python,list,loops,Python,List,Loops,假设一名教师想要向数据库中添加n个学生 n=1000 students=dict(输入(“输入学生姓名和年级。示例“学生C:”)).split() 对于uu在范围内(n)) 印刷品(学生) 如果我们有1000名学生,这很好,但是如果老师想在10名学生之后完成呢?有没有办法输入“退出”来打破循环?是的,有办法。如果您使用的是python 3,请使用input()函数,该函数将把输入的Stdin文本捕获为字符串。将该字符串与单词“quit”和条件if语句匹配。i、 e.如果string==“qui
n=1000
students=dict(输入(“输入学生姓名和年级。示例“学生C:”)).split()
对于uu在范围内(n))
印刷品(学生)
如果我们有1000名学生,这很好,但是如果老师想在10名学生之后完成呢?有没有办法输入“退出”来打破循环?是的,有办法。如果您使用的是python 3,请使用input()函数,该函数将把输入的Stdin文本捕获为字符串。将该字符串与单词“quit”和条件if语句匹配。i、 e.如果string==“quit”,则退出()或类似的操作
我认为一个更好的方法是问在开始时需要多少个条目?而不是在while循环中不断输入输入。只需我的0.2美分。将用户输入存储到变量中,并检查值是否为quit,是否为use break语句退出循环或将输入添加到字典。与其在对
dict
的单个调用中嵌入生成器表达式,不如在处理输入时构建dict
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)
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
更高级一点,如果输入了
quit
,您可以使用iter
(见下文)的两参数形式终止循环,并使用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
def islice(x, y):
while y:
yield next(x)
y -= 1
)
islice(x,y)
做什么?
这将生成一个新的迭代器,该迭代器仅返回x
的第一个y
元素(如果其包含的元素多于y
)。这大致相当于
def iter(f, stop):
while True:
x = f()
if x == stop:
break
yield x
def islice(x, y):
while y:
yield next(x)
y -= 1
将
输入(“”
保存到一个变量中,并检查它,如果它等于“退出”或其他,则使用中断
无法中断列表理解,请改用循环。然后您可以检查输入并使用break
。欢迎使用堆栈溢出!StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅并使用:)exit()
将杀死整个脚本,它们应该只是跳出循环。'。无论如何,答案很多。不,不是这样,他的目的是在键入“退出”之前创建一本包含所有输入名称的词典.这并不能解决提问者的问题problem@YeshwinVermaTheProgrammer怎么会这样?他希望用户继续输入数据,当数据退出时退出循环。@YeshwinVermaTheProgrammer这是一种不同的方法来解决没有1000名学生的相同问题。所以你应该在回答中包括这是一种不同的方法