大多数具有 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