【问题标题】:If statement not working correctly in Python 3如果语句在 Python 3 中无法正常工作
【发布时间】:2013-05-04 08:15:55
【问题描述】:

这是我将要制作的 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()

【问题讨论】:

  • @Duniyadnd,对此感到抱歉,我不知道为什么我输入了 14,我已经编辑了帖子作为回应。很抱歉给您带来不便。
  • 如果你在第一个提示符下输入malegender() 将成功地返回Male 给它的调用者……但是由于你忽略了返回值,那将永远不可见。打印任何内容的唯一方法是第一次输入无效的内容,在这种情况下gender 将递归调用gender(),然后打印出内部调用返回的任何内容。 (然后,在这种情况下,它不会返回任何东西。)那么……你实际上是在 试图 在这里做什么?
  • @abarnert 我正在努力做到这一点,以便它继续让你有机会改变主意,直到你用 y、yes、yes 或 yup 以外的东西做出回应。
  • 好的,我想我明白了。但我很好奇:你的KeepName 函数和循环工作正常,那么为什么不为gender 再次做同样的事情,而不是尝试提出结构不同的代码来做同样的事情呢?跨度>
  • 附带说明:“if 语句无法正常工作”之类的标题听起来有点像您在说“Python 坏了”而不是“我的代码坏了”,这可能会导致一些人忽略您的问题或投反对票而不是回答您。 (我不知道这是否是这次有人对你投了反对票的原因,因为这样做的人都懒得解释自己。)

标签: python python-3.x


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    首先,如果你给出的性别既不在'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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-14
      • 2017-09-21
      • 2012-08-21
      • 2021-05-17
      • 2016-03-05
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多