【问题标题】:Guessing a number, true or false? Python猜一个数字,是真是假? Python
【发布时间】:2011-04-02 18:16:56
【问题描述】:

我想给某个东西赋值,然后尝试让某人猜测该值。我已经尝试了一些类似的东西,但我似乎无法让它工作......:

   foo = 1
   guessfoo = input('Guess my number: ')
   if foo == guessfoo:
       print('Well done, You guessed it!')
   if foo != guessfoo:
       print('haha, fail.')

为什么这不起作用?我应该怎么做?我是这方面的初学者,请帮助!

【问题讨论】:

  • 定义“不起作用”,仅此一项就是信息。还有,Python 2.x 还是 2.x?
  • @delnan - print 用作函数,所以它是 3.x。
  • 在所有情况下,您都应该使用else
  • @derekerdmann:天啊!是的,当然。

标签: python numbers boolean


【解决方案1】:

使用 python 版本 3

input() 返回一个“str”(字符串)对象。字符串与整数比较返回 False :

1 == '1'
False

你必须像这样输入你的输入:

guessfoo = int(input('Guess my number: '))

不要忘记尝试...除非输入的结果无法转换为 int。

完整示例代码:

try:
    foo = 1
    guessfoo = int(input('Guess my number: '))
    if foo == guessfoo:
        print('Well done, You guessed it!')
    else:
        print('haha, fail.')
except ValueError:
    # cannot cast your input
    pass

编辑:

使用 python 版本 2

感谢您的评论:

在以前的版本中,输入会评估字符串,所以如果用户输入 1,输入会返回一个 int。

输出或您的原始代码:

$ python2 test.py 
Guess my number: 1
Well done, You guessed it!

【讨论】:

  • 这仅在 Python 3 中是正确的 - 这就是我询问版本的原因。
  • 什么只适用于 python 2?
  • @RestRisiko:在 Python 3 中(错字,同时编辑),input 总是返回一个字符串(这使得这个答案正确)。在以前的版本中,inputeval 字符串,所以如果用户输入 1input 返回一个 int。
  • 我按照你说的做了,但它总是会出现'哈哈,失败'无论我输入什么数字。这行有什么问题:if foo = guessfoo: ??
  • @pythonnoobface:编辑问题以包含示例输入/输出。并发布您的 Python 版本。
【解决方案2】:

目前你没有条件停止循环。你只是在打印东西。在您猜到数字后输入break,或将loop 设置为不同于1 的值。

【讨论】:

    【解决方案3】:

    因为整数 (foo) 不是字符串(input() 的结果)。 如果你认为 Python 的行为类似于 PHP 或 Perl,那你就错了

    1 与“1”完全不同。

    您必须使用 int(..) 将字符串转换为 int 或检查 'foo' 作为一个字符串。

    【讨论】:

      【解决方案4】:

      看起来第一个问题将是一个无限循环,因为您检查每次迭代的条件对于上述代码将始终为真。当你循环时,你需要确保你改变了一些东西,使循环更接近那个条件。首先,您的代码应如下所示:

      loop = 1
      while loop == 1:
         foo = 1
         guessfoo = input('Guess my number: ')
         if foo == guessfoo:
             print('Well done, You guessed it!')
             loop = 0
         if foo != guessfoo:
             print('Oh no, try again')
      

      如果确实猜到了数字,这将导致循环完成。

      下一个问题是input返回一个String,所以检查输入的数字是否等于预期的数字总是会失败。在 python 中,使用int() 函数将字符串转换为数字,因此该行如下所示:

      guessfoo = int(input('Guess my number: '))
      

      此时,您应该有一个正常工作的循环。但是,您可以做一些事情来简化您的代码。这里有一些建议,从最简单的调整开始,然后转向更简洁的代码。

      第一步可以使用if...else 来确保只执行一个条件,并且您只需检查一次foo 的值。如果条件为真,则执行第一个分支;如果失败,则继续执行else 块。

      loop = 1
      while loop == 1:
         foo = 1
         guessfoo = int(input('Guess my number: '))
         if foo == guessfoo:
             print('Well done, You guessed it!')
             loop = 0
         else:
             print('Oh no, try again') 
      

      这可行,但我们也可以在循环条件下移动检查以确保正确结果。这样,程序只会循环直到显示数字:

      foo = 1
      guessfoo = 0
      
      while foo != guessfoo:
          guessfoo = int( input( 'Guess my number: ' )
      
          if guessfoo != foo:
              print( 'Oh no, try again' )
      
      print( 'Well done, You guessed it!' )
      

      现在只有foo == guessfoo时才会显示成功消息。这个循环更清晰、更简单。

      作为初学者,您选择了一个寻求帮助的好地方!欢迎使用 StackOverflow!

      【讨论】:

        【解决方案5】:

        另外,你应该使用两个不同的 if 吗? 它不应该更像

        if foo == guessfoo:
           print('Well done, you guessed it!')
        else:
           print('haha, fail.')
        

        【讨论】:

          【解决方案6】:
          import random
          
          try:
              inp = raw_input   # Python 2.x
          except NameError:
              inp = input       # Python 3.x
          
          foo = random.randint(1,10)
          while True:
              guess = int(inp('Guess my number: '))
              if guess < foo:
                  print('Too low!')
              elif guess > foo:
                  print('Too high!')
              else:
                  print('You got it!')
                  break
          

          【讨论】:

          • "我该如何修理我坏掉的螺丝刀?" - “来,做这个练习。”
          猜你喜欢
          • 1970-01-01
          • 2013-06-11
          • 2021-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-02
          • 2019-01-21
          • 1970-01-01
          相关资源
          最近更新 更多