繁体   English   中英

猜数字是对还是错? 蟒蛇

[英]Guessing a number, true or false? Python

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

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

为什么不起作用? 我应该怎么做呢? 我是初学者,请帮忙!

使用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。

Ouput或您的原始代码:

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

当前,您没有条件可以停止循环。 您只是在打印东西。 猜出数字后稍作break ,或将loop设置为不同于1的值。

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

1与“ 1”完全不同。

您必须将使用int(..)的字符串转换为int或将“ foo”作为字符串进行检查。

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

看起来第一个问题将是一个无限循环,因为使用以上代码,您要检查每个迭代的条件将始终为真。 循环时,需要确保您进行了一些更改,使循环更接近该条件。 首先,您的代码应如下所示:

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!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM