Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让用户通过文本输入打破循环?_Python_List_Loops - Fatal编程技术网

Python 如何让用户通过文本输入打破循环?

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个学生

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名学生的相同问题。所以你应该在回答中包括这是一种不同的方法