KPL青少年电脑编程语言--一步一步学KPL【5】:如何随机产生26个英文字母?

[KPL学习指南]一步一步学KPL【5】:如何随机产生26个英文字母?
kpl 发布于 2007-7-28 17:33:00


 如何随机产生26个英文字母?


 回忆一下我们平时是怎么掷骰子的:假如我们有分别写有26个字母的骰子,从a到z,按顺序装在一个筒里,晃动,然后,我们会发现,出来的顺序跟进去的时候不一样。

 掷骰子的步骤中有两点很重要:

 【1】你得有分别写有26个字母的骰子;

 【2】你得晃动,没有晃动,就不能打乱原先骰子的顺序;


 电脑中的随机产生数和字母的原理,跟上面是完全一样的:

 【1】你得要选取的东西存放或标识在某个变量或数组里面;

 【2】使用系统提供的随机函数,产生随机数。这个随机函数,就相当于现实中的“晃动”。


 所以,如何随机产生26个英文字母的方法就很容易了:

 【1】把26个英文自己放置在一个数组里;

 【2】使用KPL的随机函数生成器,在1和26间产生随机数;

 这里有几个问题需要大家推敲和考虑:

 【1】可以分别命名26个变量,然后,保存26个字母吗?

 在这里是最糟糕的选择,一是因为分别命名,非常麻烦,二是要检索26个字母是第几个字母非常麻烦。

 而数组是这样一个好东西:它存放相同数据类型的数据,而且可以通过下标来定位变量的值。比如说如果我们按顺序存放,我们就知道num[1]里面放的是a,num[26]里面是z。数组括号内的数字就是下标。相当于我们说的索引值。跟我们住的楼房的单元房间编号一个道理:你只需要记住301和302,而不去想到底里面住的是张三还是李四。

 用数组保存字母,还有一个重要的原因,是因为KPL的随机数产生函数Random,只能提供在数之间的随机生成。既然如此,那么也就是说,可以随机产生的其实是数组的下标。

 所以,用数组是最优的方式,也是唯一的一种选择。


 我们说太多了,还是来从代码来看看吧:

Program Demo

 Method Main()

  // Enter your program code here
  Var CharArray As String[]={"a","b","c"}
  
  Var num As Int
  
  For num=1 To ArrayLength(CharArray)
   Trace(CharArray[num])
  Next
 End Method

End Program

 我们定义了一个数组CharArray,是字符类型的,然后,我们直接给它赋值。(为了简化,我们只给了3个字母,编码的时候,也可以简化,先验证思路,思路通了,可以很容易修改的。)

 数组赋值有很多方法,下面这种是最老实的一种:

 var CharArray as String[26] 

 CharArray[1]="a"
 CharArray[2]="b"
 CharArray[3]="c"

 上面的几句等同于: Var CharArray As String[]={"a","b","c"}

 显然,哪个更简单方便,是明摆着的。

 字符的赋值还有一种方法,效果是一样的:
 
 Var EnglishCharStr As String="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
 Var CharArray As String[]=Split(EnglishCharStr,",")
 
 上面的Split方法是非常好用的。它的用途就是根据分割符“,”,把每个分割开的元素,一个一个地放入到相应的数组位置中。简直太方便了!

 通过上述三种方法的任意一种,我们都可以把26个英文字母放在一个数组中了。你可以注释掉第一句,分别用其中一句替换,在KPL环境中试试看,是否是跟我们说的一样?

 接下来就是做随机抽取的问题了。

 我们先在Main外定义一个全局的变量:

 //最大字母数
 Var MaxCharNum As Int

 然后在上述的代码后面,给出以下代码:

  MaxCharNum=ArrayLength(CharArray)
  
  //保存随机字母顺序的数组
  Var CurIndexArray As Int[MaxCharNum]
  
  
  Var CurNum As Int
  Var CurIndex As Int
  
  For CurNum=1 To MaxCharNum
   //获得随机位置
   CurIndex=Random(1,MaxCharNum)
   
   CurIndexArray[CurNum]=CurIndex
      
   Trace("CurIndexArray["+CurNum+"]:"+CurindexArray[curNum]+"-"+CharArray[CurIndex])
  Next
   

 我们简单整理一下:我们定义了一个用于保存随机抽取字母顺序的数组CurIndexArray。然后,我们在循环的内部,使用Random,随机产生顺序值,把该值保留下来。我们用了Trace语句来观看随机抽取的效果。

 如图所示。


 我们发现了一个问题,虽然是随机抽取了字母,但没有排除重复抽取的情况。

 那么我们该如何做,才能使26个字母抽取完全前,做到不重复抽取呢?

 这就是我们下一次的练习:如何随机产生不重复的26个英文字母? 


 本节完整的代码如下:

Program Demo
 //最大字母数
 Var MaxCharNum As Int
 
 Method Main()

  // 初始化26个英文字母
  //Var CharArray As String[]={"a","b","c"}
  Var EnglishCharStr As String="a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
  Var CharArray As String[]=Split(EnglishCharStr,",")
  
  Var num As Int
  
  For num=1 To ArrayLength(CharArray)
   Trace(CharArray[num])
  Next
  
  MaxCharNum=ArrayLength(CharArray)
  
  //保存随机字母顺序的数组
  Var CurIndexArray As Int[MaxCharNum]
  
  
  Var CurNum As Int
  Var CurIndex As Int
  
  For CurNum=1 To MaxCharNum
   //获得随机位置
   CurIndex=Random(1,MaxCharNum)
   
   CurIndexArray[CurNum]=CurIndex
      
   Trace("CurIndexArray["+CurNum+"]:"+CurindexArray[curNum]+"-"+CharArray[CurIndex])
  Next
  
 End Method

End Program

转发到新浪微博

 

网上书店:当当图书  卓越亚马逊  新华书店  中国图书网  蔚蓝书店

  |  KPL QQ 群:39562753 
 




KPL QQ 群:39562753 

  验证申请请输入:KPL

  公告

敏捷培训视频培训教程,版权所有,未经授权,禁止转载

     现在国内无法访问KPL官方网站,喷嚏网(www.dapenti.com)提供的KPL资料为国内首份公开的KPL汉化资料。

该资料转载并注明作者和译者出处。如:来源:喷嚏网-www.dapenti.com

欢迎从事中小学信息技术的教师转载和引用,论坛或媒体须经书面许可

欢迎媒体合作!


邮箱:dapenti2006@gmail.com


  我的分类(专题)
  最近日志
程序员怎样学数学:半路出家也能让编程
汉语编程-汉芯之后的中国软件界大骗局
一步一步学KPL【9】:如何对按键进
一步一步学KPL【8】:如何让字母精
一步一步学KPL【7】:如何在屏幕上
一步一步学KPL【6】:如何随机产生
一步一步学KPL【5】:如何随机产生
一步一步学KPL【4】:如何编写一个
KPL开发环境中的一个bug
一步一步学KPL【3】:如何调试KP
一步一步学KPL[2]:编码的习惯和
structure有什么用?
为什么编程要用英文?
如何用任意的图形来画线?
一步一步学KPL[1]:初学者入门
吴文虎:别让“程序设计”成第二门“英
如何使用系统函数?
版权和转载申明
孩子什么时候学编程比较合适?
《KPL游戏示例代码讲解》电子书在线

  最新评论

  留言板
 

  链接

  Blog AD
 



|站点首页 | 联系我们 | 博客登陆
蜀ICP备11003155号 公安部备案号:51019002000333

特别声明:本站不提供任何视听上传服务,所有视频内容均来自视频分享站点所提供的公开引用资源

Powered by oBlog 2.52 © Copyright 2004. All rights reserved.