我在网上发现了一些练习题,我让他们中的大部分都工作了,但这个让我很难过。它不是功课,所以我没有得分。但是,没有提供解决方案,因此获得答案的唯一方法是通过这样做。
任务要求你写一个问题,为数字1-100播放数字猜谜游戏。但是,这个尝试通过间隔猜测来猜测用户数,例如[1, 100]
,并使用first+last/2
生成下一个问题。
我从网站上运行了一个示例。
考虑1到100(含)之间的数字 回答以下问题,字母y或Y表示是,n或N表示否 间隔:[1,100]。你的电话号码是<= 50? ÿ
间隔:[1,50]。你的电话号码是<= 25? ÿ
间隔:[1,25]。你的电话号码是<= 13? ÿ
间隔:[1,13]。你的号码是&lt; = 7? ñ
间隔:[8,13]。你的号码是&lt; = 10? ñ
间隔:[11,13]。你的号码是&lt; = 12? ÿ
间隔:[11,12]。你的号码是&lt; = 11? ÿ
你的电话号码是:11
到目前为止,这是我的代码,但我甚至不知道从哪里开始,因为while循环不断给我一个无限循环。我知道“中间”数字需要是一个整数,否则它将是一个无限循环,但我似乎无法弄清楚如何做到这一点。
x = input("Is your numbr <=50?")
count = 100
while x=="y" or "Y":
count = count/2
x = input("Is your number <=",count,"?")
print(count)
如果有人有任何提示,我们将不胜感激。
答案 0 :(得分:2)
问题在于:
while x=="y" or "Y":
表达式“Y”将始终评估为true。
你想要
while x == "y" or x == "Y":
即使这样,当用户键入“N”时,这将结束循环。一个工作循环可能是:
finished = False
while not finished:
if x == "y":
upper -= (upper-lower)/2
# prompt for input
elif x == "n":
lower += (upper-lower)/2
# prompt for input
if upper == lower or (upper - 1) == lower:
finished = True
# final output
你应该可以从那里填补空白。
答案 1 :(得分:1)
一个好主意是拥有一个简单的while True:
循环,在其中保持最大猜测和最小猜测。然后,您询问用户他们的号码是否大于两者的平均值。如果是,请将最小猜测更新为平均值。如果没有,您将最大猜测降低到平均值。重复,直到两个猜测相等,此时你已经找到了数字,并且可以突破无限循环。
当然,您必须进行一些简单的奇偶校验,以确保您在每一轮中实际改变您的猜测。你应该真的使用raw_input()
作为字符串,input()
是用于python格式的数据。
答案 2 :(得分:1)
问题的全部概念是保持两个“边界”从1和100开始,每次你提出一个问题“你是数字&lt; = X”你根据答案丢弃了一半的范围,你在你目前的解决方案中没有这样做。
像这样。lower = 1
high = 100
mid = (high + lower)/2 -> at start it will be 50
如果用户回答是,则从当前下限到范围中间的范围,否则继续从中间+ 1到结尾的范围,如下所示:
如果用户回答是:
high = mid
如果用户回答否:
lower = mid +1
这个想法的最后一部分是检测范围低 - 高仅包含2个数字,或者是这样的数字[11,12],你使用用户的最终答案来选择正确答案和程序终止,完整的代码在这里,你可以测试它:
found = False
range_lower_bound = 1
range_high_bound = 100
print "Think of a number between 1 and 100 (inclusive)."
print "Answer the following questions with letters y or Y for yes and n or N for no."
while not found:
range_mid = (range_high_bound + range_lower_bound) / 2
x = raw_input('interval: [%s,%s]. Is your number <= %s? ' % (range_lower_bound, range_high_bound, range_mid))
if x.lower() == 'y':
# Check if this is the last question we need to guess the number
if range_mid == range_lower_bound:
print "Your number is %s" % (range_lower_bound)
found = True
range_high_bound = range_mid
# here i'm defaulting "anything" no N for simplicity
else:
# Check if this is the last question we need to guess the number
if range_mid == range_lower_bound:
print "Your number is %s" % (range_high_bound)
found = True
range_lower_bound = range_mid + 1
希望它有所帮助!