如果语句在Python 3中无法正常工作

时间:2013-05-03 23:25:40

标签: python python-3.x

这是我要制作的RPG的开始,它会顺利运行,直到我尝试通过声明是或激活if语句的任何其他答案来更改性别。有什么我忘了吗?附:为此表示歉意。我是业余爱好者。

import random
import time
def Intro():
    print('Hit enter to begin.')
    input()
    print('Please choose a name for your character.')
    PlayerName=input()

    def KeepName():
        print('You have chosen "' + PlayerName + '" as your character\'s name.') 
        print('Do you wish to keep this as your name? (yes or no)')
        return input().lower().startswith('n')
    while KeepName():
        print('Please choose a name for your character.')
        PlayerName=input()
    planet = 'Sykahrox VII' #Useless as of this point but I kept it in so I can remember the name of the planet.
    def gender():
        print('Do you want to be Male, or Female?')
        choice = input().lower()
        if choice in ('m', 'male', 'boy', 'guy', 'dude'):
            return 'Male'
        if choice in ('f', 'female', 'girl', 'woman'):
            return 'Female'
    ChangeGen = 'y'
    while ChangeGen in ('y', 'yes', 'yeah', 'yup'):
        genderchoice = gender()
        print ('You have chosen ' + genderchoice + ' as your gender. Do you wish to change this?')
        ChangeGen = input().lower
        if ChangeGen in ('y', 'yes', 'yeah', 'yup'):
            gender()

Intro()

2 个答案:

答案 0 :(得分:2)

if子句的then语句从函数gender()返回。所以你永远不会在性别上达到你的第二份印刷声明。

答案 1 :(得分:1)

我不确定您遇到问题的输入顺序,但至少有两种方法可能出错。

首先,如果您提供的信息既不属于'm', 'male', 'boy', 'guy', 'dude'也不属于'f', 'female', 'girl', 'woman',那么您只是从gender函数的末尾开始,因此返回None,并且然后,您会从TypeError: Can't convert 'NoneType' object to str implicitly调用中获得print,因为您尝试将None添加到字符串'You have chosen '

第二,在这一行:

ChangeGen = input().lower

...您不是正在调用 lower()函数,而是将ChangeGen设置为实际函数本身。由于函数永远不会匹配任何字符串'y', 'yes', 'yeah', 'yup',因此if永远不会成立,while条件也永远不会成立。

然后,如果你解决了这个问题,if语句再次调用gender,并且对结果不做任何操作。因此,它会询问您是想成为男性还是女性,忽略您键入的内容,返回while循环的顶部,然后再次询问。实际上,您根本不需要这个if语句。

解决所有三个问题:

while ChangeGen in ('y', 'yes', 'yeah', 'yup'):
    genderchoice = gender()
    if gender is not None:
        print ('You have chosen ' + genderchoice + ' as your gender. Do you wish to change this?')
        ChangeGen = input().lower()