我正在学习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数= =选择?
该网站提供的解决方案与我写的解决方案有所不同。我怎么能做得更好呢?
谢谢!
答案 0 :(得分:2)
此处的错误在于您使用<=
和>=
。这些分别表示less-than-or-equal-to
和greater-than-or-equal-to
。因此,您的代码永远不会到达elif number == pick:
行,因为前两个语句中的一个始终为真。很明显,如果number == pick
,则第一个语句将为真,程序将提示用户press enter if higher
。
答案是什么?将<=
更改为<
,同样让>=
成为>
。这样,该测试仅适用于less-than
和greater-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')
我做了不同的事情:
主要区别在于此代码有点智能地猜测数字。 (虽然有7个猜测它仍然可能失败。)一个更智能的算法是每次猜测中点而不是随机。