🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### 课前准确: * 在`Windows`系统里安装`python`,参考 [安装python](https://www.kancloud.cn/k12edu/k_12/785427#Windowspython_4) ***** ### 本节课参考书目 * `Teach Your Kids to Code.pdf` 第六章:随机数和游戏 ***** > Go ahead,Take a Chance! ——加油,抓住机会! ### 什么是随机数 随机数和骰子有些类似。在掷骰子之前,我们并不知道掷出的结果是什么,只知道可能的结果是 1~6 之间的某个整数。 随机数的作用非常大。例如银行卡的密码都是用随机数进行加密的,科学实验也大量使用随机数。 ![](https://box.kancloud.cn/0fa9aadf6e6ea776de7c4b1f64163e03_375x236.png) `python` 自带随机数生成器工具`random`,这个工具有很多方法。下面这个例子,描述了如何用`randint`方法生成一个 1~10 之间的随机数。 ``` >>> import random >>> random.randint(1, 10) ``` #### 猜数字 ``` # GuessingGame_6_1.py import random the_number = random.randint(1, 10) guess = int(input("猜一个 1~10 之间的数字: ")) while guess != the_number: if guess > the_number: print(guess, "太大了,再猜猜看。") if guess < the_number: print(guess, "太小了,再猜猜看。") guess = int(input("再猜猜看: ")) print(guess, " ,就是这个数字!你赢了!") ``` #### 从一组数字中随机选择颜色 下面这个例子,描述了如何从一个颜色列表里,用`choice`方法随机选择一种颜色。 ``` >>> colors = ["red", "yellow", "blue", "green", "orange", "purple", "white", "gray"] >>> random.choice(colors) 'orange' >>> random.choice(colors) 'blue' >>> random.choice(colors) 'white' >>> random.choice(colors) 'purple' >>> ``` ### 石头剪刀布 这个游戏和我们平时玩的游戏是一样的,只是这一回和我们游戏的对手不是其他小朋友,而是一部电脑。 这个编程,要完成一些任务: 1. 使用`while`循环控制游戏是继续还是结束 2. 如果你出的不是"石头"、"布"、"剪刀"中的一种,电脑要能识别出来,并提醒你这样是不对的 3. 其他的游戏规则和我们平时用的规则是一样的。例如,石头可以打败剪刀、剪刀可以打败布、布可以打败石头 ``` # RockPaperScissors_6_2.py import random choices = ["石头", "布", "剪刀"] print("石头打败剪刀,剪刀打败布,布包住石头。") player = input("你想是石头、布、 剪刀 (还是退出)? ") while player != "退出": player = player computer = random.choice(choices) print("你选择了 " +player+ ",计算机选择了 " +computer+ "。") if player == computer: print("平局!") elif player == "石头": if computer == "剪刀": print("你赢了!") else: print("计算机赢了!") elif player == "布": if computer == "石头": print("你赢了!") else: print("计算机赢了!") elif player == "剪刀": if computer == "布": print("你赢了!") else: print("计算机赢了!") else: print("我猜这里面出了点问题。。。") print() player = input("你想是石头、布、 剪刀 (还是退出)?") ``` ### 打扑克 一副扑克,除了大小王之外,还有52张牌,它们有四种花色,分别是"梅花"、"方块"、"红桃"、"黑桃",每种花色有13张牌,分别是"二"、"三"、"四"、"五"、"六"、"七"、"八"、"九"、"十"、"J"、"Q"、"K"、"ace"。 如果我们想在计算机里建立一副扑克,一种方法是把所有的牌写到一个列表里,就像下面: ``` cards = ["方块二","方块三","方块五",# 剩下的牌...] ``` 不过这种方法太麻烦了,我们观察一下牌面的特征,一个是花色,一个是面值,所以,我们把花色写到`suits`这个列表里,把面值写到`faces`这个列表里,就像下面: ``` suits = ["梅花", "方块", "红桃", "黑桃"] faces = ["二", "三", "四", "五", "六", "七", "八", "九", "十", "J", "Q", "K", "ace"] ``` 接下来,我们就可以使用`choice`方法随机抽取一张扑克牌。 ``` # chapter6_1.py import random suits = ["梅花", "方块", "红桃", "黑桃"] faces = ["二", "三", "四", "五", "六", "七", "八", "九", "十", "J", "Q", "K", "ace"] my_face = random.choice(faces) my_suit = random.choice(suits) print("我的牌是", my_suit, my_face) ``` 如果我们想比较哪个花色比较厉害,怎么让电脑知道“黑桃”比“梅花”厉害呢? 使用`index`方法就可以做到,`index`就是索引的意思,有点类似字典的页码,因为“黑桃”的索引是3,“梅花”的索引是0,所以电脑就知道“黑桃”比“梅花”厉害了。 ``` >>> suits = ["梅花", "方块", "红桃", "黑桃"] >>> suits.index("梅花") 0 >>> suits.index("黑桃") 3 ``` 下面是和电脑比牌面大小: ``` import random faces = ["二", "三", "四", "五", "六", "七", "八", "九", "十", "J", "Q", "K", "ace"] my_face = random.choice(faces) your_face = random.choice(faces) if faces.index(my_face) > faces.index(your_face): print("我赢了!") elif faces.index(my_face) < faces.index(your_face): print("你赢了!") ``` 如果我们想和电脑有个交互的过程,例如,电脑问我们,还要不要在打牌?然后我们输入一个答案`answer`,电脑根据`answer`的结果,给一个控制变量,这里是`keep_going`,赋予一个值`True`或者`False`,就像下面: ``` answer = input("按 [Enter]继续,或者按其他键退出: ") if answer == "": keep_going = True else: keep_going = False ``` 更简单的写法: ``` answer = input("按 [Enter]继续,或者按其他键退出: ") keep_going = (answer == "") ``` 然后我们把`while`语句给加上,这样电脑循环问要不要继续打牌: ``` keep_going = True while keep_going: answer = input("按 [Enter]继续,或者按其他键退出: ") keep_going = (answer == "") ``` 把上面几段代码加在一起,有好像真的和人一样打牌了: ``` import random suits = ["梅花", "方块", "红桃", "黑桃"] faces = ["二", "三", "四", "五", "六", "七", "八", "九", "十", "J", "Q", "K", "ace"] keep_going = True while keep_going: my_face = random.choice(faces) my_suit = random.choice(suits) your_face = random.choice(faces) your_suit = random.choice(suits) print("我的牌是", my_suit, my_face) print("你的牌是", your_suit, your_face) if faces.index(my_face) > faces.index(your_face): print("我赢了!") elif faces.index(my_face) < faces.index(your_face): print("你赢了!") else: print("平局") answer = input("按 [Enter]继续,或者按其他键退出: ") keep_going = (answer == "") ``` ### 课程小结 这节课,我们学习了`python`自带的随机数`random`,有了这个工具,我们就能做一些简单的仿真游戏。很多科学实验,为了节约成本,也会用随机数的原理,设计成仿真实验。