2011-05-13 83 views
0

我学习蟒蛇大气压,并从该site做一个练习 -学习蟒蛇 - couldn't弄清楚random.randint

指导用户从1挑一个任意号码100并在七次尝试中继续猜测它。在每次猜测之后,用户必须知道他们的数字是高于,低于还是等于您的猜测。

我写的,但并没有解决匹配代码为this--

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

我不能得到这个权利。当数字==选择,循环没有结束。是不是因为随机选择了elif number ==选择?

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

谢谢!

+1

代码的缩进似乎被破坏了。请检查您的原始代码。 – 2011-05-13 11:03:16

回答

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

我没有什么不同:

  • 该计划没有得到你的电话号码作为输入(这是试图猜测它)。
  • 我设置低&高初始范围,并建立一个完成标志,因为我需要退出循环的两个层面上的成功
  • 下一个我猜基础上由低到高的范围。
  • 要求H,L或E来指示我的猜测下降
  • 修改基于什么用户范围告诉我

的主要区别是,这个代码有点智能猜测的数目。 (尽管有7次猜测,它仍然可能失败。)更智能的算法是每次猜中点而不是随机猜测。

+0

澄清 - 第14至17行('if guesses:');这些做什么?谢谢! – 2011-05-13 19:10:52

+0

嘿,对不起,这是处理我的宠物peeve。复数的程序受到挑战......如果猜测不是零(这是除了第一次通过循环以外的所有情况),它将字符串复数赋值为'es',所以输出结果是'Yay!我猜中了3次。'而在第一次通过循环时,它会输出“耶!我猜得到它。” – 2011-05-13 19:34:07

2

这里的错误是在您的使用<=>=。这些分别意味着less-than-or-equal-togreater-than-or-equal-to。因此,您的代码永远不会到达elif number == pick:系列,因为前两个陈述中的一个将始终为真。很明显看到,如果number == pick那么第一个语句将是正确的,程序将提示用户press enter if higher

答案?将<=改为<,同样让>=变为>。这种方式的测试仅适用于less-thangreater-than