【问题标题】:learning python--couldn't figure out random.randint学习python——搞不懂random.randint
【发布时间】:2011-05-13 11:00:49
【问题描述】:

我正在学习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 number==pick 吗?

网站上给出的解决方案与我写的完全不同。我怎么能做得更好?

谢谢!

【问题讨论】:

  • 您的代码的缩进似乎被破坏了。请检查您的原始代码。

标签: python-3.x


【解决方案1】:

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

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')

我做的不同:

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

主要区别在于这段代码在某种程度上可以智能地猜测数字。 (尽管有 7 次猜测它仍然可能失败。)更智能的算法是每次猜测中点而不是随机猜测。

【讨论】:

  • 澄清——第 14 到 17 行('如果猜测:');这些有什么作用?谢谢!
  • 嘿,抱歉,这是在处理我的一个小问题。复数挑战的程序......它所做的是如果猜测非零(除了第一次通过循环外,它一直在),它将'es'分配给字符串复数,所以输出是'Yay!我猜到了 3 次。在第一次通过循环时,它会输出“耶!我猜到了。”
【解决方案2】:

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

答案?将&lt;= 更改为简单的&lt;,同样让&gt;= 变为&gt;。这样测试只针对less-thangreater-than

【讨论】:

    相关资源