【问题标题】:User input boolean in pythonpython中的用户输入布尔值
【发布时间】:2018-07-26 19:30:59
【问题描述】:

我正在尝试让用户输入他们是否喜欢辛辣食物,并且输出应该是布尔值,但我的代码似乎没有得到以下输出:

def likes_spicyfood():
    spicyfood = bool(input("Do you like spicy food? True or False?"))
    if spicyfood == ("True"):
        print("True")
    if spicyfood == ("False"):
        print("False")
        return(likes_spicyfood)

【问题讨论】:

  • 提示:使用空输入进行测试。
  • 好吧:1. 任何非空字符串输入都会评估真值;和 2. 都不布尔值等于字符串"True" 或"False"。该平等评估中的括号也是多余的。你可以跳过bool; "True" == "True".
  • 为什么要将用户输入转换为布尔值,然后将其与字符串进行比较?只是不要转换它。
  • 在输入应该可以正常工作之前删除 bool 语句
  • 另外,如果你想返回布尔值,你为什么要打印字符串('True')。而是使用 Return True

标签: python python-3.x input boolean


【解决方案1】:

尝试将您的输入转换为bool 不会这样。 Python 考虑任何非空字符串True。所以做bool(input())和做input() != ''基本一样。即使输入不是"True",两者都返回true。只需将直接给出的输入与字符串"True 和"False" 进行比较:

def likes_spicyfood():
    spicyfood = input("Do you like spicy food? True or False?")
    if spicyfood == "True":
        return True
    if spicyfood == "False":
        return False

请注意,如果输入不是"True 或"False",上述代码将失败(通过返回None 而不是布尔值)。如果原始输入无效(即不是"True 或"False"),请考虑返回默认值或re-asking the user for input。

【讨论】:

  • 是的,但你为什么要使用两个 if 语句而不是 elif?
  • 嗯,主要是为了与 OP 的代码保持一致@Anton。
  • 老实说,为什么 OP 决定编写这样一个奇怪的程序非常令人困惑,我猜他们只是在练习。
  • 不用担心@user5556453。我们都必须从某个地方开始 :-) 但是,在发布您的下一篇文章之前,我建议您使用 tour 并访问 help-center 以熟悉 Stack Overflow 的工作原理。
  • 不,不是@user5556453。该函数名为likes_spicyfood,所以我认为它应该返回一个布尔值,表示用户是否喜欢辛辣食物。如果您想打印用户的答案,只需执行print(likes_spicyfood())。
【解决方案2】:

在您的使用中,将string 转换为bool 将不是一个可行的解决方案。在 Python 中,如果将字符串转换为布尔值,例如:bool("False"),布尔值将是True,这是因为如果将非空字符串转换为布尔值,它将始终转换为True,但如果你尝试将空字符串转换为布尔值,你会得到False。

要解决您的问题,必须进行一些更改。 首先,您的代码示例甚至没有调用您询问用户是否喜欢辛辣食物的函数,因此请在代码的最底部调用它。 likes_spicyfood()

您必须更改的第二件事是,您必须像在代码中那样简单地输入用户类型 True 或 False,而不是将值从 string 转换为 @987654332 @,只需将string 与'True' 或'False' 进行比较,以下是完整代码:

def likes_spicyfood():
    spicyfood = input("Do you like spicy food? True or False?")
    if spicyfood == "True":
        print("The user likes spicy food!")
    if spicyfood == "False":
        print("The user hates spicy food!")
    return likes_spicyfood

likes_spicyfood()

您还会看到我返回了一些多余的括号:将输入值与'True' 或'False' 进行比较以及返回likes_spicyfood 时。 这里有更多关于converting a string to a bool

【讨论】:

    【解决方案3】:

    如果你确定输入是正确的,你可以这样做:

    def likes_spicyfood():
        spicyfood = input("Do you like spicy food? True or False?")
        return spicyfood.title() == "True"
    

    【讨论】:

    • 何不更进一步,直接写return input("Do you like spicy food? True or False?") == "True"
    • @A.Smoliak 可读性第一。但是是的,编程有很多选择。
    • 是的@A.Smoliak,安东说得对。 From the Python zen:“可读性很重要。” ;-) 当然,这不是硬性规定。在某些情况下,您必须将性能置于可读性之上,但这些在 Python 中非常罕见。
    【解决方案4】:

    不要将输入转换为布尔值。稍后创建一个条件来检查它是 True 还是 False

    类似这样的:)

    def likes_spicyfood():
    spicyfood = input("Do you like spicy food? True or False?")
    while spicyfood!= "True" or "False":
        spicyfood=input("Do you like spicy food? True or False?")
    if spicyfood == ("True"):
        print("True")
    if spicyfood == ("False"):
        print("False")
        return(likes_spicyfood)
    

    【讨论】:

    • 我该怎么做?
    【解决方案5】:

    试试这个。在 0 和 1 中询问答案,然后将其转换为布尔值。就像我在下面的示例中所做的那样

    isTrue = True
    while isTrue:
      isTrue = bool(int(input("Continue? 1 for yes, 0 for no: ")))
    

    【讨论】:

      【解决方案6】:

      首先我们需要在用户阅读问题后阅读他们的输入:

      hungry = input("Are you hungry? True or False \n")
      

      现在我们在变量hungry 中得到了他们的响应,我们可以在一些语句中使用它:

      if hungry.lower() == "true":
      

      注意.lower() 的使用,它将获取他们的字符串,无论字母是否大写,并将其全部转换为小写。这意味着无论他们输入"True"、"tRue" 还是"TRUE",如果与小写对应的"true" 相比,它们都将评估为True。

      执行此操作时重要的是,您的比较字符串也始终为小写。因为如果您尝试根据"True" 评估"true",它将返回False。

      利用这些知识,我们能够将所有内容放在一起并打印出我们想要的内容:

      hungry = input("Are you hungry? True or false \n")
      
      if hungry.lower() == "true":
          print("Feed me!")
      else:
          print("I'm not hungry.")
      

      【讨论】:

      • 使用它使它们成为布尔值,以后可以用作布尔值
      • 希望它能解决问题,但请添加对代码的解释,以便用户完全理解他/她真正想要的。
      • 如果您编辑您的问题以提供有关此代码如何回答问题的上下文和解释,将会很有帮助。
      • 我是一个新的贡献者,所以感谢您的反馈,我一定会调查这个
      【解决方案7】:

      正如 Christian Dean 所指出的, bool(input()) 将为任何非空输入返回 True。如果你真的需要使用 bool,你可以这样强制:

      def likes_spicyfood():
          spicyfood = input("Do you like spicy food? True or False?")
          if(spicyfood=="True"):
              spicyfood_Bool = True
          elif(spicyfood=="False"):
              spicyfood_Bool = False
          if(spicyfood_Bool):
              print("True")
          elif(!spicyfood_Bool):
              print("False")
      
          return(likes_spicyfood)
      

      这是一种解决方法,将输入字符串“翻译”为布尔值 (spicyfood_Bool)。不用说这个解决方案过于复杂,但如果你真的需要一个布尔值,它就可以了。

      【讨论】:

        【解决方案8】:

        你可以简单地使用它

        inp=input('Do you like spicy food? True or False?')
        spicyfood = True if inp== 'True' else  False if inp=='False'
        

        【讨论】:

          【解决方案9】:
          spicyfood = bool(input("Do you like spicy food? t/f?")=='t')
          

          【讨论】:

          • 这被认为是纯代码答案。请添加解释以帮助消除 StackOverflow 是免费编程服务的误解。另外,对于未来的贡献,请采取tour并查看stackoverflow.com/editing-help
          【解决方案10】:

          您还可以将模块“ast”与“literal_eval”-方法一起使用。像这样:

          import ast
          
          bool = ast.literal_eval(input("True or False?"))
          

          【讨论】:

          • 它将在以下输入上失败:ast.literal_eval("false")
          【解决方案11】:

          任何非空字符串输入都会评估真值; 2. 两个布尔值都不等于字符串“True”或“False”。该平等评估中的括号也是多余的。你可以跳过布尔; “真”==“真”。 – jonrsharpe。

          另一种代码是在“while 循环”中设置问题并在列表中传递选项;

          name = input("What is your name?")
          while True:
              spicyfood = input("Do you like spicy food? yes or no?")
              if spicyfood not in ["yes","no"]:
                  print("Please type yes or no")
                  continue
              else:
                  break
          if spicyfood == ("yes"):
              print(name+" "+ "likes spicy food")
          else:
              print(name+" "+ "hates spicy food")
          

          【讨论】:

            【解决方案12】:

            这是我的(新手) 有一点类似的问题 最后决定不让它成为布尔值

            propworth = input("how much is your prop worth?")
            finalcost=0.1*int(propworth)
            finalcost2=0.2*int(propworth)
            def funx():
                while True:
                    creditevaluation= input("is the debt credit good or bad?")
                    if creditevaluation.lower() =="good":
                        print(f'10% downpayment is needed')
                        print(f'as said 10% x {propworth}')
                        print(f'downpayment: {finalcost}$')
                    if creditevaluation.lower() =="bad":
                        print (f'20% down payment is needed')
                        print(f'as said 20% x {propworth}')
                        print (f'downpayment: {int(finalcost2)}$')
                    else :
                        creditevaluation.lower() != "good","bad"
                        print("Please type good or bad")
                        return funx()
                    break 
            funx()
            print ("""debt will be sent to your account !!!
            thx for choosing our service""")```
            
            come for some rep lol
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-10-01
              • 2022-07-06
              • 1970-01-01
              • 1970-01-01
              • 2021-12-27
              • 2015-04-07
              • 1970-01-01
              相关资源
              最近更新 更多