学习python - 无法弄清楚random.randint

时间:2011-05-13 11:00:50

标签: python-3.x

我正在学习python atm,并且正在从这个site -

进行练习
  
    

指示用户从1到100中选择一个任意数字,并在七次尝试中继续正确猜测。在每次猜测之后,用户必须判断他们的数字是否高于,低于或等于您的猜测。

  

我写的代码,但与解决方案不符的是 -

import random
pick = int(input('number? '))
count = 0

while count <= 7:
    number = random.randint(1, 10)
    count += 1
    print('is the number ', number, '?')

if number <= pick:
    print('press enter if higher')
    higher = input()
elif number >= pick:
    print('press enter if lower')
    lower = input()
elif number == pick:
    print('good?')
    yes = input()
    break

print('end')

我无法理解这一点。当number == pick时,循环没有结束。是因为random.randint正在破坏elif数= =选择?

该网站提供的解决方案与我写的解决方案有所不同。我怎么能做得更好呢?

谢谢!

2 个答案:

答案 0 :(得分:2)

此处的错误在于您使用<=>=。这些分别表示less-than-or-equal-togreater-than-or-equal-to。因此,您的代码永远不会到达elif number == pick:行,因为前两个语句中的一个始终为真。很明显,如果number == pick,则第一个语句将为真,程序将提示用户press enter if higher

答案是什么?将<=更改为<,同样让>=成为>。这样,该测试仅适用于less-thangreater-than

答案 1 :(得分:2)

这里是我根据您发布的问题文本进行的快速重写:

import random
input("Think of a number from 1 to 10, then press enter.  Don't tell me, I'll guess it.")
low = 1
high = 10
done = False

for guesses in range(7):
    number = random.randint(low, high)
    print("I'm guessing", number)
    happy = False
    while not happy:
        resp = input('Enter H if your number is higher, L if lower or E for equal: ')[0].upper()
        if resp == 'E':
            if guesses:
                plural = 'es'
            else:
                plural = ''
            print('Yay!  I got it in {} guess{}.'.format(guesses+1, plural))
            happy = True
            done = True
            break
        elif resp == 'H':
            happy = True
            low = number + 1
        elif resp == 'L':
            happy = True
            high = number -1
        else:
            print("That wasn't a valid response.")
    if done:
        break

print('end')

我做了不同的事情:

  • 该程序不会将您的号码作为输入(它毕竟是在猜测它)。
  • 我设置低和&amp;高到初始范围并设置完成标志,因为我需要在成功时突破两个循环级别
  • 接下来我猜是基于低 - 高范围。
  • 要求H,L或E表明我的猜测落在哪里
  • 根据用户告诉我的内容修改范围

主要区别在于此代码有点智能地猜测数字。 (虽然有7个猜测它仍然可能失败。)一个更智能的算法是每次猜测中点而不是随机。