python中的一个简单IF语句

python中的一个简单IF语句,python,Python,我很难让Else语句起作用 到目前为止,我的代码如下所示: roomNumber = (input("Enter the room number: ")) def find_details(id2find): rb_text = open('roombookings2.txt', 'r') for line in rb_text: s = {} (s['Date'], s['Room'], s['Course'], s['Stage']) = l

我很难让Else语句起作用

到目前为止,我的代码如下所示:

roomNumber = (input("Enter the room number: "))

def find_details(id2find):
    rb_text = open('roombookings2.txt', 'r')
    for line in rb_text:
        s = {}
        (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(",")
        if id2find == (s['Room']):
            yield(s)
        rb_text.close()


for room in find_details(roomNumber):
    print("Date: " + room['Date'])
    print("Room: " + room['Room'])
    print("Course: " + room['Course'])
    print("Stage: " + room['Stage'])
因此,当我进行肯定搜索并在文本文件中获得多个匹配项时,我会得到组织良好的结果

但是,我试图让它告诉我是否输入了无效的输入数据,并重新询问房间号,直到输入正确的数据

我试着用一个关于收益率的Else语句,但它不接受。
有什么想法吗?

你可以这样做:

def find_details(id2find):
    found = False
    with open('roombookings2.txt', 'r') as rb_text:
        for line in rb_text:
            s = {}
            (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(",")
            if id2find == s['Room']:
                found = True
                yield(s)
    if not found:
        raise ValueError("No such room number!")

while True:
    roomNumber = (input("Enter the room number: "))
    try:
        for room in find_details(roomNumber):
            print("Date: " + room['Date'])
            print("Room: " + room['Room'])
            print("Course: " + room['Course'])
            print("Stage: " + room['Stage'])
        break
    except ValueError as e:
        print str(e)

Python块由缩进描述,因此else:note小写并带有冒号以指示块的开头应该与if语句处于相同的缩进级别

def find_details(id2find):
    rb_text = open('roombookings2.txt', 'r')
    for line in rb_text:
        s = {}
        (s['Date'], s['Room'], s['Course'], s['Stage']) = line.split(",")
        if id2find == (s['Room']):
            yield(s)
        else:
            print "this print will execute if d2find != (s['Room'])"
        # ... also see DrTyrsa's comment on you question.
但我怀疑你真的不想使用else子句,你会从那里得到什么?这看起来非常像一个作业,所以我不打算发布一个精确的解决方案。

我想你们需要其他的解决方案。你真的想在循环的第一次迭代后关闭该文件吗?否则:应该与..处于相同的级别:-除了上面的代码之外,也许你可以发布不适合你的代码。