欢迎光临散文网 会员登陆 & 注册

S4E07 你可以几次可以猜到答案

2022-02-28 14:42 作者:学用数学  | 我要投稿

可能你玩过这样的一个小游戏:某人在1-100之间想一个数,另外一群人来猜数字,每次只告知猜大还是猜小,直到猜到目标。那么一个人是否就没有办法玩这个游戏了呢?不存在的!今天我们就自己使用Kesci平台利用Python编辑这样的一个小游戏。

今天这节课,你将收获:

1. 使用Python产生随机数

2. 使用Python产生一个输入框

3. 理解循环语句while……

4. 理解条件语句if……else……

有没有觉得场景似曾相识?既然要猜数字,那么就得先有一个“随机”产生的数字;第二个就是输入数字,最后匹配,看是否一致,并给出判断。对,我们在GGB里面也有过类似的操作,今天我们看一下Python里面的语言吧?

01 猜骰子所掷出的数字

A. 用random产生一个随机数

Python里面有很多的指令,我们可以直接调用出来使用。使用import来调用random,然后来产生一个随机数。指令如下:

import random

a = random.randint(最小数,最大数) 【命名a 为随机数的名字】

你可以使用指令掷一个骰子吗?【答案见①】

B. 使用input来让游戏者输入数字

产生一个输入框,可以使用input指令。

a=input() 

外部输入的对象为 a

你可以完成下面的指令吗?答案见②

import random

ans = random.randint(1,6)

guess = ???("Guess a number between 1 and 6: ")

print("Answer {}. Guesss: {}".format(ans,guess))

C. 让游戏者反复猜测,直到猜中才停止

我们看到上面的效果图中,使用者只能猜测一次就结束了,我们想让游戏者一直猜测,直到猜对位置。这时候,我们可以使用循环语句。当游戏者猜测的数字不等于结果时,让使用者继续猜测。

while(条件):

    执行的程序……(注意,需要缩进)

我们可以在让游戏者输入猜测的数字之后,判断输入的数字和产生的随机数的关系,然后再做出相应。请填写下面的???处,提示,不等于用“!=”来表示。

import random

ans = random.randint(1,6)

guess = int(input("Guess a number between 1 and 6: "))

while(???):

    guess = int(input("Wrong! Guess again! "))

print("Bingo!!! The Answer is {}.".format(ans))

D.累计猜测的次数

我们可以在执行一次while这个循环一次,就增加游戏者猜测的次数。我们可以像在GGB中一样,命名一个次数,首先初始值是1,执行一次while就次数+1。

我们可以在while执行前定义次数为1,执行一次次数+1。

你可以完成下面的指令吗?答案见④

import random

ans = random.randint(1,6)

guess = int(input("Guess a number between 1 and 6: "))

guessTime = 1

while(guess != ans):

    guess = int(input("Wrong! Guess again! "))

???

print("Bingo!!! The Answer is {}. You used {}time(s).".format(ans,guessTime))

02 猜测1-31的一个数字,并显示猜测大还是小

A.修改参数,设置猜测范围为1-31,你可以修改上面的程序吗?答案见⑤

B.判断太大或者太小

当猜测数字小于正确答案时,显示猜测小了,再试一次;当猜测数字大于正确答案时,显示猜测大了,再试一次;并且猜测次数+1。

我们可以在while判断猜测数字和结果不一致时,在判断大小。可以使用if……else……条件语句

if(条件1):

    执行指令1

else:

    执行指令2

注意:一定要有“:”

你可以完成下面的程序吗?答案见⑤

import random

ans = random.randint(1,31)

guess = int(input("Guess a number between 1 and 31: "))

guessTime = 1

while(guess != ans):

  if ???:

        guess = int(input("Too Small! Guess again! "))

  else:

        guess = int(input("Too Large! Guess again! "))

    guessTime += 1

print("Bingo!!! The Answer is {}. You used {} time(s).".format(ans,guessTime)


C.给出错误猜测结果后的继续猜测的范围

当我们判断猜测数小了之后,那么新猜测的数字就成为了猜测范围的最低值。我们可以把最低值赋给新猜测的数,给出游戏者新的猜测范围,便于游戏者继续进行猜测。

你可以完成下面的指令吗?答案见⑥

import random

lower = 1

upper = 31

ans = random.randint(lower, upper)

guess = int(input("Guess a number between {} and {}: ".format(lower,upper)))

guessTime = 1

while(guess != ans):

  if guess < ans:

              lower = ???

        guess = int(input("Too small! Guess a number between {} and {}: ".format(lower,upper)))

  else:

                upper = ???

                guess = int(input("Too Large! Guess a number between {} and {}: ".format(lower,upper)))

    guessTime += 1

print("Bingo!!! The Answer is {}. You used {} time(s).".format(ans,guessTime))

    D. 答案修正

当游戏者如果输入的答案不在范围内,系统也会给出一个答案,所以我们在执行第一个if判断之前,先需要做一个初步的判断,如果不在此范围内,则告知出错。

你可以完成下面的指令吗?答案见⑦

import random

lower = 1

upper = 31

ans = int(random.randint(lower, upper))

guess = int(input("Guess a number between {} and {}: ".format(lower,upper)))

guessTime = 1

while(guess != ans):

 if????

    if guess < ans:

                 lower = guess + 1

             guess = int(input("Too small! Guess a number between {} and {}: ".format(lower,upper)))

    else:

                 upper = guess - 1

                 guess = int(input("Too Large! Guess a number between {} and {}: ".format(lower,upper)))

   guessTime += 1

  else:

       guess = int(input("Error! Guess a number between {} and {}: ".format(lower,upper)))

print("Bingo!!! The Answer is {}. You used {} time(s).".format(ans,guessTime))

03 动态调整答案

皮一下,如何让游戏者用最多的次数猜到正确答案。

如果我们通过游戏者的猜测过程动态调整正确答案,那么游戏者就需要猜测更多的次数来找到结果。你觉得可以怎么修改呢?动手试一试吧?答案见视频


答案区

import random

ans = random.randint(1,6)

print(ans)

input

guess != ans

guessTime += 1或者guessTime =guessTime +1

guess<ans

lower = guess + 1

upper=guess-1

lower <= guess and  guess <= upper

参考资料

【Bili】https://www.bilibili.com/video/av75790756

【Kesci】https://www.kesci.com/home/project/5dcdf573413f87002cc44642
【Kesci】https://www.kesci.com/home/project/5dcd4891413f87002cc42b7d



S4E07 你可以几次可以猜到答案的评论 (共 条)

分享到微博请遵守国家法律