Python 3 和 C 中的猜数字游戏


大多数具有 CS(计算机科学)背景的极客都会想到他们在学习编程语言后的第一个项目。在这里,您将在本文中获得您的第一个项目和基本项目。

任务: 步骤如下:

  • 构建一个猜数字游戏,用户在其中选择一个范围。
  • 假设用户选择了一个范围,即从AB,其中AB属于 Integer。
  • 系统将选择一些随机整数,用户必须在最小猜测次数内猜测该整数

分析:

解释 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)

算法:以下是步骤:

  • 用户输入范围的下限上限。
  • 编译器生成该范围之间的随机整数并将其存储在变量中以供将来参考。
  • 对于重复猜测,将初始化一个 while 循环。
  • 如果用户猜测的数字大于随机选择的数字,用户会得到一个输出“再试一次!” 你猜得太高了
  • 否则,如果用户猜测的数字小于随机选择的数字,则用户会得到输出“再试一次!” 你猜得太小了”
  • 如果用户猜中了最少的猜测次数,则用户会得到“恭喜!“ 输出。
  • 否则,如果用户没有在最小猜测次数中猜出整数,他/她将得到“下次好运!” “ 输出。

下面是该算法的实现:

  • Python3
  • C
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!

输出:*以下是上述程序的输出*

img

猜谜游戏的输出

时间复杂度: 此代码的时间复杂度为O(n),因为循环的迭代次数不固定,取决于用户为获得正确答案而进行的猜测次数。

空间复杂度: 此代码的空间复杂度为O(1),因为此代码中使用的所有变量都具有相同的大小,并且不需要额外的空间来存储值。


原文链接:codingdict.net