`

之前讲解了从scratch到python,基于python turtle库的实现,讲解了用scratch和python turtle绘图的实现,以及让小猫动起来和当角色被单击的例子。

本节课讲继续探索从scratch到python的道路,以猜数游戏为进行讲解。

概述

猜数游戏是一个很经典的例子,要开发一个完整的猜数游戏,需要用到编程中的变量、循环、分支,获取用户输入等基本知识,还要对逻辑运算有一定的了解。

本文将会带领大家实现这样一个小游戏,游戏开始后,让用户猜数字,如果数字大于或者小于目标数字将会给出提示,如果猜对了就让用户选择是否继续玩儿下去,如果选择继续,开始新一轮游戏;否则游戏结束;同时用户每猜对一次得5分。

当然还可以更加复杂比如加入时间限制,因为复杂度高一些就不用了。

分解

其实各国在中小学引入编程教育,更多的是让孩子们从以计算机的方式来考虑问题,培养逻辑思维能力和编程思维,并非是要把所有人都培养成程序员。

编程思维是一个非常重要的概念,含义是将以大的问题分解问小的问题,然后逐步解决每个小问题,最后解决整个问题。

在谷歌教育的公开课中有关于编程思维的详细论述,感兴趣的老师可以去看一下,当然我自己也只是看了个开头,毕竟推荐读书的人有时候未必然是读书的人嘛,但是我知道这是个好东西。

那么我们就把这个任务分解为以下步骤:

  1. 用一个变量了保存用户的积分
  2. 生成目标数,在猜数游戏中目标应该是随机的,同时保存在变量中
  3. 提示用户猜测数字,获取用户输入,并保存在变量中
  4. 判断用户输入,给出适当的反馈
  5. 如果用户猜对了,加5分,询问是否继续
  6. 如果用户选择继续,重复1-5步;否则游戏结束

下面我们按照这个思路来实现这个程序

具体实现

积分变量

首先我们要新建一个变量,保存分数,并且初始化为0分

从现在开始我们就要感受到python的简洁之美了,在scratch我们新建积分变量并设定为0,需要好几步操作,而在python中只需要一句命令就好了

score = 0

这也是高级语言的特点,Python作为高级语言,代码量可以说是Java的十分之一,c语言的百分之一;当然对于初学者来说还是是诚然比较容易理解

声明积分变量之后,我们就要生成要猜测的目标数字了.

生成目标数字

目标数字是个随机数,是一定范围之内的随机数,所以我们先来看Scratch和Python都是怎么生成随机数的

这次Python就需要费点脑筋了,Python有许多别人写好的完成特定功能的代码,成为代码库,生成随机数的代码库叫做random,换句话说我们要用生成随机数的功能,就需要引入random库,然后库中有函数,调用对应的函数就可以完成相应的功能

我们要用到的是randomint()函数,比如生成1-10的随机整数就是randomint(1, 10)

好,背景交代完毕,下面我们就上手来实现生成随机数

接下来,我们看Python是如何实现的

import random

score = 0
target = random.randint(1, 10)
print(score, target)

现在,积分变量也有了,也生成要猜测的数字了,接下来就要提示用户猜数字了,用户不输入数字也就没得玩了,不过似乎可以写一个猜数的机器人,用随机数来猜测,这又是另外一个程序了

获取用户输入

我们还是以Scratch为例进行讲解,在Scratch获取用户输入要用到侦测代码分类中共的两个代码块



当然我们需要新建一个变量,并把用户的回到放到这个变量里

而Python中则要用到input()函数,但是有一点要注意的是,input()函数读入的数据的类型是字符串类型,需要转换成整数,而将字符串转换为整数要用到int()函数,当然一个严格程序这里还需要对输入进行验证的,这个等你熟悉了Python之后可以自行完成.

import random

score = 0
target = random.randint(1, 10)
print(score, target) guess_number = int(input('请输入你要猜的数字:'))

判断用户输入对错

在这里我们就要用到分支结构了,所谓分支结构简单的来说就是满足某个条件的时候做某个事情,比如你高考分数大于700,只要你运气不是特别被,长得不是特别丑,也不作死基本就能去北大清华了;而如果天气预报说明天下雨的话,十有八九你是会选择带伞出门的,毕竟有的人喜欢淋雨不是.

这里我们就要进行判断,如果用户输入的大于目标数,就提示大了,否则提示小了,这里要用到控制模块中的分支模块



同时还会用到数字和逻辑运算分类中的比大小

这里涉及了逻辑运算和分支结构两个知识点,大家还记得吗?

这样,用户第一次输入的时候,会判断用户输入的数也就是猜的数跟目标数字孰大孰小,如果大了就会提示'大了',如果相等就恭喜,如果小了,就提示'你猜的数太小了',问题是实际猜测中很难一次就猜中的,所以我们需要反复不停的猜测,如果猜错了就要重新获取用户的输入,一直到猜对



不能往下讲了,再往下就要用到循环了,循环猜测的过程,我们先不讲,回过头来讲python如何实现这一步

首先Python的语法呢,比较有意思,没有万恶的大括号,但是有固定的缩写,虽然tab党和空格党有一场世纪之战,但是作为空格的拥泵,大家跟我一样用空格就好了.Python中if语句的格式是

if expr:
pass
else:
pass

注意到了吗,expr和else后面的语句是有四个空格的,同时:冒号是必不可少的,expr代表的是逻辑表达式,关于逻辑表达式呢,随便找一本关于编程的书都能够讲个五六七八页,简单的说就是大小相等的判断,这里呢就是判断我们猜的数和目标数的大小

import random

score = 0
target = random.randint(1, 10)
print(score, target) guess_number = int(input('请输入你要猜的数字:')) if guess_number > target:
print('too big')
elif guess_number = target:
print('right')
else:
print('too small')
guess_number = int(input('请输入你要猜的数字:'))



细心的同学们可能注意到了,我用到的判断和上面说的不一样啊,虽然不一样,也差不多啊,想想有什么不一样,有什么一样呢?写了这么多怪累的,就不详细说了.

这个时候已经可以猜数了,但是只有一次机会,一次之后即便你读取了用户猜的数字,你也没有反馈的机会了,这样的游戏肯定是不完整的,杂么办呢?

循环

日常生活中,我们会说把课文抄10遍,我们就知道需要重复执行抄课文10次,那么在Scratch是有循环的结构的



当然如果你想限制猜测的次数可以用这个,如果在规定的次数内没有猜到,就扣分,这也很可以,然而这里我想做的是让用户不停的猜测直到猜对为止.

比如隔壁村的王二狗跟俺们村的李翠花约定,在湖边见面,不见不散,那么王二狗只能一个人孤零零的在湖边等着,直到俺们村的李翠花到了湖边,也就是说只有满足了某个条件,才会执行,在这里,就是重复执行,直到猜对了,或者说在没有猜对的情况下,会让玩家一直猜猜猜.



好,接下来我们继续完善我们的程序



看看上面的程序,我们做了改动,用户第一次猜测之后,就会判断guess_numbertarget是否相等,如果不相等,就会进入里面的判断,判断结束后引导用户再猜,直到猜对为止.

我对程序做了一些修改,改动了哪里?为什么?这个程序是否可以继续优化呢?


这里是分割线,思考上述问题5分钟.

然后我们来看Python要怎么做:

这里用到了while循环,只要条件成立,就一直做

while expr:
pass

下面是代码

import random

score = 0
target = random.randint(1, 10)
print(score, target) guess_number = int(input('请输入你要猜的数字:')) while guess_number != target:
if guess_number > target:
print('too big')
elif guess_number == target:
print('right')
else:
print('too small') guess_number = int(input('请输入你要猜的数字:'))
print('恭喜你蒙对了')

判断用户是否继续玩

这里就要再次询问用户,到这里呢,其实基本的功能已经完成了,后面完善成为完整的猜数游戏呢,还是要用到循环,重复执行某些步骤,然后就是给得分变量赋值,你能猜到怎么做吗?

欢迎大家投稿,过几天我公布答案.

从scratch到python——猜数游戏的更多相关文章

  1. Python 猜数游戏

    import random//引用随机数rand=random.randint(0,99)t=0while 1: //用t来记录使用次数 t+=1 //自行输入一个随机数 aNumber=int(in ...

  2. (一)Python之猜数游戏

    猜数游戏由简如深的编码学习过程: 3次机会: print('------------------我爱鱼C工作室------------------')count=0while count < 3 ...

  3. python 课后习题 猜数游戏

    4.1 猜数游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜数字,如果大于预设的数,显示“遗憾,太大了”:如果小于预设的数,显示“遗憾,太小了”:如此循环,直至猜到该数,显示“预测N次, ...

  4. Python基础之猜数游戏

    例题一:猜数游戏.在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”:小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中该数,显示“预测N次,你猜 ...

  5. Python入门习题6.猜数游戏和其异常处理

    例6:在程序中预设一个0~9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”:小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中数,显示”预测N次,猜中了”,其中N是 ...

  6. python猜数字游戏快速求解解决方案

    #coding=utf-8 def init_set(): r10=range(10) return [(i, j, k, l) for i in r10 for j in r10 for k in ...

  7. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  8. usaco 猜数游戏

    Description 为了提高智商,锻炼思维能力,奶牛设计了一个猜数游戏.游戏开始前,贝西会在牛棚后面摆上N个数字.所有数字排成一条直线,按次序从1到N编号.每个数字在1到10^9之间,没有两个数字 ...

  9. 猜数游戏-flag的运用

    package my;import java.util.Scanner;public class MyJava {        public static void main(String[] ar ...

随机推荐

  1. iOS 控制台po不出值

    本人这几天开发项目时在控制台用po命令打印时,发现总是打印不出来,这里将我的解决方案推荐给大家 方法一:(本人就是用该方法解决了问题的) 在控制台选择All Output 方法二: 按图中指示选择de ...

  2. JavaScript 的if语句和==的判断

    一. if(xx)的判断 JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值.系统内部会自动调用Boolean函数. 1.当if括号里面的表达 ...

  3. Anaconda spyder 设置tab键为2个空格

    tool -> Preference->

  4. 下载caffe慢

    国内在github上下载软件慢,应在gitee下载git clone https://gitee.com/cuibixuan/caffe.git

  5. git之push

    git push :将本地的哪个分支推送到哪个远程主机上的哪个分支.因此明确主机.本地分支名.远程分支名这三个要素. git push命令用于将本地分支的更新,推送到远程主机.它的格式与git pul ...

  6. [macOS] git忽略所有的.DS_Store文件

    最彻底的方法如下: vi ~/.gitignore_global 输入以下内容 # OS generated files # ###################### .DS_Store .DS_ ...

  7. synchronized锁级别的一个坑

    在实现一次对限流接口访问时,我错误的使用了单例+synchronized修饰方法的形式实现,这样在限流方规则为不同接口不同限制,单独限制时,同一个实例中的所有被synchronized修饰的方法竞争同 ...

  8. 跟我一起学python(2)

    学习总结: 1.数据类型 a.数据:表示一种状态 b.python不存在字符类型 c.可变与不可变 d.x = 10  既 x = int(10) 2.字符编码 3.文件处理 详细: 数据类型: is ...

  9. IP通信基础学习第四周(下)

    选择子网掩码时,不总是使用整个八位作为屏蔽位. 在每个子网中,子网掩码是相同的. 在划分子网的情况下,判断两台主机是不是在同一子网中,需看它们的网络号与子网地址是不是相同的. 变长子网掩码VLSM,无 ...

  10. MySQL 压缩文件安装遇到的问题及解决方案

    第一步:从官网下载压缩文件(链接). 第二步:解压该文件,放置到想放到的位置.我的目录是在 C:\mysql\mysql-8.0.12-winx64 下. 第三步:在C:\mysql\mysql-8. ...