让计算机猜测一个用户选择的数字,该数字在1到1000之间,且不超过10个猜测。此分配使用一种称为二进制搜索的算法。每次猜测之后,该算法会将可能的答案数量减少一半。完整的伪代码
程序如下:您的任务是将其转换为可用的python程序。
该程序应首先在屏幕上打印说明,说明用户
应该选择一个介于1到1000之间的数字,并且计算机会猜测它
10次尝试。然后,它开始进行猜测,并且在每次猜测之后都要求用户提供反馈。
如果需要降低猜测值,则应指示用户输入-1,如果正确则猜测为0,
如果需要更高的猜测,则返回1。如果用户输入的响应无效,则应重复说明,并允许用户重试。
伪码
- Print instructions to the user
-Start with high = 1000, low = 1, and tries = 1
- While high is greater than low
- Guess the average of high and low
- Ask the user to respond to the guess
- Handle the four possible outcomes:
- If the guess was right, print a message that tries guesses were required and quit the program
- If the guess was too high, set high to one less than the guess that was displayed to the user and increment tries
- If the guess was too low, set low to one more than the guess that was displayed to the user and increment tries
- If the user entered an incorrect value, print out the instructions again
- high and low must be equal, so print out the answer and the value of tries
我需要一些认真的帮助!我完全不了解这些东西!
这就是我所拥有的
def main(x, nums, low, high):
input("Enter -1 if the guess needs to be lower, 0 if the guess was right, or 1 if the guess needs to be higher: ")
for i in range (1, 1001):
main()
我什至不知道这是对的!
请您参考如下方法:
在考虑如何以python(或任何语言)实现此功能之前,让我们看一下伪代码,这看起来是解决问题的不错的计划。
我猜想您可能会遇到的一件事是伪代码引用变量的方式,例如high和low。理解变量的方法是考虑变量可以存储值的位置。在任何给定时间,变量都有一些值,例如数字5或对打开文件的引用。可以随时使用其名称来召唤该值,也可以通过为其赋值来为其赋予新值,并且旧值将被新值代替而被遗忘。
伪代码引用三个变量high,low和tries。它还告诉您它们的初始值应该是什么。在第二行执行之后,这些值分别设置为1000、1和1,但是随着程序的进行,它们将采用新值。
伪代码的另一个功能是条件循环和用户输入的案例分析。您对伪代码循环的翻译不正确。在您的情况下,您已经创建了一个新变量i,并指示程序以1到1000之间的每个i值运行循环主体。显然,这与伪代码没有太大关系。
相反,您要做的是永远循环,直到某些条件(在循环主体中发生变化)变为假。在python中,while语句执行此操作。如果您熟悉if语句,则while看起来相同,但是在执行主体之后,将重新评估条件,并在仍然为真时再次执行主体。
最后,循环主体中的案例分析需要将某些内容与期望值进行比较。尽管其他一些语言有多种表达方式,但是在python中,我们只有if-elif-else子句。
除了将伪代码转换为工作代码之外,了解程序实际上在做什么可能很有用。关键在第四行,程序在此猜测两个值的平均值。之后,程序将根据猜测的结果进行操作。
在循环的第一次运行中,high包含1000,而low包含1,平均值为500(实际上,平均值为500.5,但是由于我们是对整数求平均值,因此python猜测我们想要的结果为除法也是整数)。显然,这种猜测是正确的只有0.1%的机会,但是如果错了,用户应该告诉我们它是太高还是太低。无论哪种方式,该答案都完全消除了50%的可能猜测。
例如,如果用户想到的数字太小,则当程序猜出500时,用户将告诉程序500太高,然后程序就不必再猜测数字在500中了。范围从501到1000。可以节省计算机大量的工作。
为了使用该信息,该程序会跟踪目标编号可能的值范围。当猜测的数字太高时,程序将其上限向下调整,正好低于该猜测;如果猜测的数字太低,则程序会将其下限向上调整至该猜测的正上方。
当程序再次猜测时,猜测就在可能范围的中间,将范围再次减半。可能的猜测数量从最初的1000次增加到一次猜测的500次,再到两次猜测的250次。如果程序运气不好,并且无法获得两次(实际上很有可能),那么到第三次,它只剩下125个数字需要担心。在第四个猜测之后,仅剩下62个数字。这继续进行,经过八次猜测,仅剩下3个数字,并且程序在第九次猜测中尝试使用中间数字。如果发现这是错误的,则只剩下一个数字,程序就会猜出来!
将范围分成两半然后继续到更近的一半的技术称为二分法,出现在计算机科学感兴趣的广泛主题中。
CODE呢!因为我不想剥夺您的学习经验,所以我只给您一些片段,可能会对您有所帮助。 python是一种旨在进行交互式探索的语言,因此请启动您的解释器并进行尝试。我将发布带有显示提示的示例,但不要实际键入。
这是使用while子句的示例:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
从用户获取控制台输入应通过
raw_input()功能完成。它只是返回用户键入的任何内容。这有点难以显示。为简化起见,在每行需要输入的python行之后,我将键入“ Hello World!”。 (无引号)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
结合一些概念呢?
>>> myvar = ''
>>> while myvar != 'exit':
... myvar = raw_input()
... if myvar == 'apples':
... print "I like apples"
... elif myvar == 'bananas':
... print "I don't like bananas"
... else:
... print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>>
哎呀。那里有一点bug。看看是否可以解决!
