我试图完成一个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吗?如果是这样,怎么样?
答案 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