此问题源于Ptyhon核心编程上的一道题:

Random Numbers. Design a “rock, paper, scissors” game,sometimes called “Rochambeau,” a game you may have played as a kid. Here are the rules. At the same time, using specified hand motions, both you and your opponent have to pick from one of the following: rock, paper, or scissors. The winner is determined by these rules, which form some-what of a fun paradox:
(a) the paper covers the rock,
(b) the rock breaks the scissors,

(c) the scissors cut the paper. In your computerized version,
the user enters his/her guess, the computer randomly chooses, and your program should indicate a winner or draw/tie. Note: The most algorithmic solutions use the fewest number of  if statements.

最后一句提到,最好的算法要尽可能的少使用if语句。

所以在求解这个问题的时候,我在思索如何归纳三个选项之间的关系。user有三个选项,computer有三个选项,相互比较的话,应该是比较9次。然而,计算机无法识别三个选项到底那个能胜出。所以必须将石头剪刀布转化成计算机能识别的符号,再加以高效的算法,这个问题就解决了。

(1)函数应该有两个参数,分别是user和computer的选择。

(2)将选项分别与数字映射,让计算机通过比较数字的大小来判定结果。

(3)通过两个选项所对应数字的绝对值进行判定,再配合min(),max()就可以很简单的实现。

Ptyhon代码:

# -*- coding: utf-8 -*-
import random
def Rochambeau(num1, num2):num1 = int(num1)dic = {1:'stone', 2:'shears', 3:'cloth'}re = {num1:'user', num2:'computer'}if num1 == num2:return 'the same choose:' + dic[num1]elif abs(num1 - num2) == 1:return 'your choice is: ' + dic[num1] + '\n' \+ 'computer\'s choice is:' + dic[num2] + '\n' \'the winner is ' + re[min(num1, num2)]else:return 'your choice is: ' + dic[num1] + '\n' \+ 'computer//s choice is:' + dic[num2] + '\n' \'the winner is ' + re[max(num1, num2)]print Rochambeau(raw_input(
"""
Enter the number of choice:1 -> stone2 -> shears3 -> cloth
"""
), random.randint(1, 3))

注意:dic和re两个字典都有各自的用处。用于本人的英语不太好,所以元素命名有些随意,阅读代码时还望谅解,日后逐步提高。

随机数之石头剪刀布游戏相关推荐

  1. Python编程基础:第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game

    第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game 前言 实践 前言 我们这一节的内容主要是对前边学习内容的一个综合应用,以石头,剪刀,布游戏为例讲解列表.随机数.用户输入 ...

  2. 利用Java模拟石头剪刀布游戏

    模拟石头剪刀布游戏 import java.util.Scanner;public class Sjb {public static void main(String[] args) {Scanner ...

  3. 3.9 编写程序,模拟石头剪刀布游戏。程序随机产生一个数,这个数为2、1或0,分别表示石头剪刀和布。

    1. 题目要求编写程序,模拟石头剪刀布游戏.程序随机产生一个数,这个数为2.1或0,分别表示石头剪刀和布.提示用户输入值2.1或0.然后显示一条消息,表明用户和计算机谁赢了游戏.下面是运行示例:你出什 ...

  4. java石头剪刀布界面_利用Java模拟石头剪刀布游戏

    模拟石头剪刀布游戏 import java.util.Scanner; public class Sjb { public static void main(String[] args) { Scan ...

  5. VBScript终极破产版石头剪刀布游戏(VBS语言实现)

    前两天拜读失泽久雄先生所著写的<计算机是怎样跑起来的>,当时看书中的代码用VBS语言写的一个石头剪刀布游戏特别好玩,于是手敲了一遍,并做了些改进--石头剪刀布小游戏.结果后来给一个朋友看, ...

  6. 《计算机是怎样跑起来的》优化使用VBScript语言编写的石头剪刀布游戏

    今天在看失泽久雄先生著写的<计算机是怎样跑起来的>时,其中有一段使用VBScript编写的石头剪刀布游戏.由于自己是个小白,从来没听说过这种不是特别热门的脚本语言,一看用windows系统 ...

  7. 课设——石头剪刀布游戏

    存个代码 问题: 样式图: 代码: package Main; import java.awt.*; //导入抽象窗口工具类包: import java.awt.event.*; //导入事件处理工具 ...

  8. javaWeb实现石头剪刀布游戏。jsp

    目录 一.题目要求 二.使用步骤 1.game.jsp 2.gameResult.jsp 三.结果展示 一.题目要求 实现石头剪刀布游戏.页面的输出有"平局","你赢了! ...

  9. 石头剪刀布游戏高级版(Java编写)

    石头剪刀布 1.问题描述 [问题描述] 用 JAVA 语言设计如下界面的石头剪刀布游戏.游戏的一方点击界面上石头.剪刀.布按钮,游戏的 另一方计算机随机选择,然后给出游戏结果. [基本要求] 按照下面 ...

最新文章

  1. 如何将分表汇总到总表_轻松实现多表汇总数据(多表汇总成单表)
  2. Java8 ConcurrentHashMap详解
  3. 面向连接和无连接的套接字到底有什么区别?
  4. java严格模式_“use strict” 严格模式使用(前端基础系列)
  5. Spring / Hibernate应用程序的性能调优
  6. 22岁大学生获谷歌天价offer,击败6000人年薪百万
  7. 《Effective Debugging:软件和系统调试的66个有效方法》一第2条:在网上确切地查询你所遇到的问题,以寻求解决问题的灵感...
  8. [已解决] org.hibernate.AnnotationException:未为实体类指定标识符
  9. Android学习笔记(18):编辑框EditText
  10. php中的数据库操作和字符串操作session与cookie操作,PHP的cookie与session原理及用法详解...
  11. 关于重装系统后,电脑出现提示许可证过期的解决方案
  12. web前端开发视频教程完整54讲下载
  13. python写出租车计费系统_出租车自动计费器设计(课程设计报告模板)
  14. 各种手机处理器排行榜_手机处理器性能排行榜和代表机型介绍
  15. 嵌入式linux dlna,DLNA 编译
  16. 如何在Chrome中自定义新标签页
  17. HDR:Recovering High Dynamic Range Radiance Maps from Photographs
  18. PMS进化论:回顾过去才能更好地看向未来!
  19. 音乐推荐系统搭建试验
  20. socket编程之read()/write()

热门文章

  1. Efficient Belief Propagation for Early Vision 论文翻译 对于早期视觉问题的高效信念传播
  2. U盘重装Win10方法以及常用必备软件安装
  3. 第一部linux手机,Linux从菜鸟到大师之天龙八部 第一部文件管理.doc
  4. 使用Sklearn库学习数据预处理和特征工程
  5. 如何申请成为中国支付清算协会会员
  6. Frp 内网穿透配置文件
  7. OSI模型的传输层、会话层、表示层和应用层
  8. AI芯片设计与开发概览
  9. 毕业生必备:学会这个小技能,比别人多收 3 份 Offer !
  10. Linux常用PDF阅读软件