我正在编写一个具有已定义函数的猜谜游戏程序。它要求用户考虑1到1000之间的数字,然后程序尝试在不到15次尝试中猜测该数字。使用我的函数,要在每个函数中返回多个值,我将它们作为列表返回。但是有一个NoneType错误 - 这是错误信息。
while opAns.lower() != "no":
FBTrcTri = guessReturn(tries, upper, lower)
feedback = FBTrcTri[0]
errorBound = FBTrcTri[1]
errorTrick = FBTrcTri[2]
tries = FBTrcTri[3]
这是我的代码:
def guessReturn(tries, upper, lower):
while tries < 15:
errorInput = "yes"
while errorInput == "yes":
feedbackGuessVal = guesser(upper, lower)
feedback = feedbackGuessVal[0]
guessVal = feedbackGuessVal[1]
LUITri = processData(feedback, tries, upper, lower, guessVal)
lower = LUITri[0]
upper = LUITri[1]
errorInput = LUITri[2]
tries = LUITri[3]
errorBound = boundChecker(upper, lower)
errorTrick = trickChecker(upper, lower)
if errorBound == "yes":
return
elif errorTrick == "yes":
return
elif feedback == "0":
tries += 1
return
tries += 1
return [feedback, errorInput, errorBound, errorTrick, tries]
这里定义了函数:
public class ActorDisparo extends Actor {
private TextureRegion textureDisparo = new TextureRegion();
private World world;
public static Body body;
//private Fixture fixture;
private FixtureDef fdef;
private String userData;
private float anchoDisparo, altoDisparo;
private float positionX,positionY;
private static float porcentajeDeancho = 0,anchoMediano = 0, anchoPequeno = 0, anchoDiminuto = 0;
private TextureRegion arponRegion = new TextureRegion();
public ActorDisparo(World world, TextureRegion disparo, Vector2 position, float anchoDisparo, float altoDisparo, float fuerzaX, float fuerzaY, String userData){
this.textureDisparo = disparo;
this.world = world;
this.anchoDisparo = anchoDisparo;
this.altoDisparo = altoDisparo;
this.userData = userData;
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(position);
bodyDef.type = BodyDef.BodyType.DynamicBody;
body = world.createBody(bodyDef);
PolygonShape shapeDisparo = new PolygonShape();
shapeDisparo.setAsBox((anchoDisparo/2)/2,altoDisparo/2);
fdef = new FixtureDef();
fdef.shape = shapeDisparo;
//fdef.restitution = 0.70f;
fdef.filter.categoryBits = BolasGame.DISPARO_BIT;
fdef.filter.maskBits = BolasGame.BOLAROJA_BIT |
BolasGame.TECHO_BIT;
body.createFixture(fdef).setUserData(userData);
shapeDisparo.dispose();
body.setGravityScale(0f);
body.applyLinearImpulse(fuerzaX,fuerzaY,position.x,position.y,true);
setSize( anchoDisparo *BolasGame.MetrosAPixels ,altoDisparo*BolasGame.MetrosAPixels);
//setBounds(0, 0, getWidth(), getHeight());
}
public float getPositionX() {
return getPositionX();
}
public float getPositionY() {
return getPositionY();
}
@Override
public void act(float delta) {
super.act(delta);
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
setPosition( (body.getPosition().x * BolasGame.MetrosAPixels) - getWidth()/2, (body.getPosition().y * BolasGame.MetrosAPixels) - getHeight()/2);
batch.draw(textureDisparo,getX(),getY(),getWidth(),getHeight());
}
public void detach(){
world.destroyBody(body);
remove();
}
}
答案 0 :(得分:2)
if errorBound == "yes":
return
elif errorTrick == "yes":
return
elif feedback == "0":
tries += 1
return
没有任何值的return
语句将返回None
,您将尝试将其视为列表
答案 1 :(得分:2)
该错误告诉您正在尝试对类型为[...]
的对象(即NoneType
单例对象)使用预订语法(None
)。
您的guessReturn()
函数会在多个位置返回None
:
if errorBound == "yes":
return
elif errorTrick == "yes":
return
elif feedback == "0":
tries += 1
return
没有显式返回值的 return
会返回None
。
您正试图通过以下方式订阅该结果:
feedback = FBTrcTri[0]
您必须显式测试FBTrcTri
是None
(或使用异常处理来捕获TypeError
),还是在列表或元组中返回至少4个值< em>总是,来自你职能的所有出口点。