Python27:检查用户输入是否正确。选择是时,正确返回名称。如果选择否,则返回“无”'

时间:2016-01-30 05:01:26

标签: python-2.7

我正在编写一个小程序来自动填写表单。我希望在此过程中进行检查以确保用户输入正确并且如果拼写错误,则有机会进行更正。输出转到名为SN.dbf的文件。

ETA:SN代表序列号。我为文件生成一个SN,数字本身就在文件名中。

我的代码:

def Name(SN):
    verify = False
    fname = raw_input('What is your first name? ')
    lname = raw_input('What is your last name? ')
    name = fname+' '+lname
    print name
    check = raw_input('Is this correct?  yes/no')
    if check.upper() not in {'YES','Y'}:
        verify = True
    else:
        return name

    while verify:
        verify = False
        Name(SN)
name = Name(SN)
with open(SN+'.dbf','w') as mfile:
    mfile.write('Name: '+str(name)+'\n')

当我浏览它并选择yes时,它会将名称写入文件。但是当我选择“否”并再次通过它时,它会返回“无”#39;我只需要知道我做错了什么。对python来说还是个新手......

1 个答案:

答案 0 :(得分:0)

如果用户首先回答“否”,则输入while verify循环并以递归方式再次呼叫Name。您继续这样递归,直到用户回复yes。然后,对Name的最内部调用返回,依此类推。

问题是,当你递归调用Name时,你不会捕获它的返回值。替换这个:

while verify:
    verify = False
    Name(SN)

使用:

while verify:
    verify = False
    return Name(SN)

添加“return”语句。

更好的是,更传统地构建代码:

def Name(SN):
    while True:
        fname = raw_input('What is your first name? ')
        lname = raw_input('What is your last name? ')
        name = fname+' '+lname
        print name
        check = raw_input('Is this correct?  yes/no')
        if check.upper() in {'YES','Y'}:
            return name