函数在第二次调用后不返回值

时间:2016-07-25 12:02:43

标签: python function

我试图完成一个python Hangman miniproject来帮助我学习编码。

我已经创建了一个函数,希望能够向玩家询问一封信,检查信件只有一个字母,并确保它不是一个数字。

这是我到目前为止的代码:

def getLetter():
    letter = raw_input('Please enter a letter...')

    if letter.isdigit() == True:
        print('That is a number!')
        getLetter()

    if len(str(letter)) >1:
        print("Sorry, you have to enter exactly ONE letter")
        getLetter()

    else:
        return letter

当第一个输入正确时,这可以正常工作,即。一个字母。但是,当输入不正确时,例如' ddddd',程序要求输入另一个字母,但要么返回初始输入(' ddddd')而不是新输入,或者什么也不返回。

如何让它返回新输入?我需要清除raw_input吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:4)

您没有返回递归调用的结果;无论您何时致电 #include <iostream> #include <string> #include <fstream> using namespace std; class trucks { private: int ID; string Type; double feeder_pt; double axle_pt; public: void getID (int); void getType (string); void getfeeder (double); void getaxle (double); }; void trucks::getID(int ID) {} void trucks::getType (string Type) {} void trucks::getfeeder (double feeder_pt) {} void trucks::getaxle (double axle_pt) {} int main () { ifstream myfile("sequence.txt"); int i=0; int ID; string Type; double feeder_pt; double axle_pt; for(int i=0; i<5; i++) { trucks truck[i]; truck[i].getID(ID); truck[i].getType(Type); truck[i].getfeeder(feeder_pt); truck[i].getaxle(axle_pt); myfile>>ID>>feeder_pt>>axle_pt; } // to test only cout<< ID << endl; cout<< axle_pt << endl; cout<< Type << endl; cout<< axle_pt << endl; } 都会删除返回值。

在调用之前添加getLetter()以将结果传递给调用链:

return

但是,您不应该使用递归 ;改为使用循环:

return getLetter()

每个递归调用都会添加到调用堆栈中,调用堆栈的大小不是无限制的;最终用户总是输入数字会破坏你的程序!有关详细信息,请参阅Asking the user for input until they give a valid response

答案 1 :(得分:0)

def get_valid_letter():    
    while True:

        letter = raw_input('Please enter a letter...')
        if letter.isdigit() == True:
            print('That is a number!')

        elif len(str(letter)) >1:
            print("Sorry, you have to enter exactly ONE letter")

        else:
            return letter