大多数具有 CS(计算机科学)背景的极客都会想到他们在学习编程语言后的第一个项目。在这里,您将在本文中获得您的第一个项目和基本项目。
任务: 步骤如下:
分析:
解释 1:如果用户输入范围,假设从 1 到 100。编译器随机选择 42 作为整数。现在猜谜游戏开始了,所以用户输入了50作为他/她的第一个猜测。编译器显示“再试一次!你猜得太高了”。这意味着随机数(即 42)不在 50 到 100 的范围内。这就是猜测一半范围的重要性。再次,用户猜测了 50 的一半(你能告诉我为什么吗?)。所以 50 的一半是 25。用户输入 25 作为他/她的第二个猜测。这次编译器将显示“再试一次!你猜得太小了”。这意味着小于 25(从 1 到 25)的整数是无法猜测的。现在用户猜测的范围更短了,即从 25 到 50。聪明!用户猜测了该范围的一半,因此,用户猜测37作为他/她的第三次猜测。这次编译器再次显示输出:“再试一次!你猜得太小了”。对于用户来说,每次猜测,猜测范围都会变小。现在,用户的猜测范围是从37到50,用户猜测43作为他/她的第四个猜测。这次编译器将显示输出“Try Again! 你猜得太高了”。因此,用户的新猜测范围将从 37 到 43,用户再次猜测该范围的一半,即 40 作为他/她的第五个猜测。这次编译器显示输出:“再试一次!你猜得太小了”。让猜测更小,从 41 到 43。现在用户猜测 41 作为他/她的第六个猜测。这是错误的并显示输出“再试一次!你猜得太小了”。最后,用户猜出了正确的数字,即 42,作为他/她的第七次猜测。
猜测总数 = 7
解释 2:如果用户输入范围,假设从 1 到 50。编译器随机选择 42 作为整数。现在猜谜游戏开始了。所以 50 的一半是 25。用户输入 25 作为他/她的第一个猜测。这次编译器将显示“再试一次!你猜得太小了”。这意味着小于 25(从 1 到 25)的整数是无法猜测的。现在用户猜测的范围更短了,即从 25 到 50。聪明!用户猜测了该范围的一半,因此,用户猜测 37 作为他/她的第二次猜测。这次编译器再次显示输出:“再试一次!你猜得太小了”。对于用户来说,每次猜测,猜测范围都会变小。现在,用户的猜测范围是从 37 到 50,其中用户猜测 43 作为他/她的第三个猜测。这次编译器将显示输出“Try Again! 你猜得太高了”。因此,用户的新猜测范围将从37到43,用户再次猜测该范围的一半,即40作为他/她的第四个猜测。这次编译器显示输出:“再试一次!你猜得太小了”。让猜测更小,从 41 到 43。现在用户猜测 41 作为他/她的第五个猜测。这是错误的并显示输出“再试一次!你猜得太小了”。最后,用户猜出了正确的数字,即 42,作为他/她的第六次猜测。
猜测总数 = 6
因此,最小猜测次数取决于范围。并且编译器必须根据范围自行计算最小猜测次数。为此,我们有一个公式:-
Minimum number of guessing = log2(Upper bound – lower bound + 1)
下面是该算法的实现:
import random
import math
# Taking Inputs
lower = int(input("Enter Lower bound:- "))
# Taking Inputs
upper = int(input("Enter Upper bound:- "))
# generating random number between
# the lower and upper
x = random.randint(lower, upper)
print("\n\tYou've only ",
round(math.log(upper - lower + 1, 2)),
" chances to guess the integer!\n")
# Initializing the number of guesses.
count = 0
# for calculation of minimum number of
# guesses depends upon range
while count < math.log(upper - lower + 1, 2):
count += 1
# taking guessing number as input
guess = int(input("Guess a number:- "))
# Condition testing
if x == guess:
print("Congratulations you did it in ",
count, " try")
# Once guessed, loop will break
break
elif x > guess:
print("You guessed too small!")
elif x < guess:
print("You Guessed too high!")
# If Guessing is more than required guesses,
# shows this output.
if count >= math.log(upper - lower + 1, 2):
print("\nThe number is %d" % x)
print("\tBetter Luck Next time!")
# Better to use This source Code on pycharm!
输出:*以下是上述程序的输出*
猜谜游戏的输出
时间复杂度: 此代码的时间复杂度为O(n),因为循环的迭代次数不固定,取决于用户为获得正确答案而进行的猜测次数。
空间复杂度: 此代码的空间复杂度为O(1),因为此代码中使用的所有变量都具有相同的大小,并且不需要额外的空间来存储值。
原文链接:codingdict.net