【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

python除了用来开发server、web之外,一般还可以用来开发客户端,特别是用来做一些demo原型还是比较合适的。这里找了一份python编写的计算器,供大家参考一下。代码出处在这。

import Tkinter as tkcalc = tk.Tk()
calc.title("CrappyCalc")buttons = [
'7',  '8',  '9',  '*',  'C',
'4',  '5',  '6',  '/',  'Neg',
'1',  '2',  '3',  '-',  '$',
'0',  '.',  '=',  '+',  '@' ]# set up GUI
row = 1
col = 0
for i in buttons:button_style = 'raised'action = lambda x = i: click_event(x)tk.Button(calc, text = i, width = 7, height = 7, relief = button_style, command = action) \.grid(row = row, column = col, sticky = 'nesw', )col += 1if col > 4:col = 0row += 1display = tk.Entry(calc, width = 40, bg = "white")
display.grid(row = 0, column = 0, columnspan = 5)def click_event(key):# = -> calculate resultsif key == '=':# safeguard against integer divisionif '/' in display.get() and '.' not in display.get():display.insert(tk.END, ".0")# attempt to evaluate resultstry:result = eval(display.get())display.insert(tk.END, " = " + str(result))except:display.insert(tk.END, "   Error, use only valid chars")# C -> clear display        elif key == 'C':display.delete(0, tk.END)# $ -> clear display        elif key == '$':display.delete(0, tk.END)display.insert(tk.END, "$$$$C.$R.$E.$A.$M.$$$$")# @ -> clear display     elif key == '@':display.delete(0, tk.END)display.insert(tk.END, "wwwwwwwwwwwwwwwwebsite")        # neg -> negate termelif key == 'neg':if '=' in display.get():display.delete(0, tk.END)try:if display.get()[0] == '-':display.delete(0)else:display.insert(0, '-')except IndexError:pass# clear display and start new input     else:if '=' in display.get():display.delete(0, tk.END)display.insert(tk.END, key)# RUNTIME
calc.mainloop()

大家可以在此基础上做一些改写,比如如果没有eval函数,怎么用状态机来进行设计呢?

2017.1.4 补充:

发现网上有一份python编写的贪吃蛇代码,也不错,大家可以借此多学习学习,原来地址在这。

# -*- coding:utf-8 -*-from turtle import Vec2D
import Tkinter as tk, random, itertoolskGridWidth, kGridHeight, kGridPixels = 15, 15, 20  # 网格尺寸、网格像素数
kCanvasWidth, kCanvasHeight = kGridWidth * kGridPixels, kGridHeight * kGridPixels  # 画布尺寸
kDirs = {'Up': Vec2D(0, -1), 'Left': Vec2D(-1, 0), 'Down': Vec2D(0, 1), 'Right': Vec2D(1, 0)}  # 方向
kSceneStart, kScenePlay, kSceneOver = 0, 1, 2  # 场景
kUpdateDelay = 500  # 更新间隔(ms)class SnakeGame:def __init__(self):self.root = tk.Tk()self.canvas = tk.Canvas(self.root, width=kCanvasWidth, height=kCanvasHeight, bg='gray')self.canvas.pack()self.root.bind('<KeyPress>', self.update)self.valid_pos = set(map(lambda t: Vec2D(*t), itertools.product(range(kGridWidth), range(kGridHeight))))  # 有效网格坐标集合self.rand_pos = lambda w, h: Vec2D(random.randint(0, w - 1), random.randint(0, h - 1))  # 生成随机网格坐标self.food = (None, self.canvas.create_oval(0, 0, 0, 0, fill='green'))  # 食物:(网格坐标, 图形对象)self.snake_dir = None  # 蛇头方向:Vec2D(x, y)self.snake_bodys = []  # 蛇身:[(网格坐标,图形对象), ...]self.scene = kSceneStart  # 场景编号self.score = 0  # 分数self.update_funcs = [self.update_gamestart, self.update_gameplay, self.update_gameover]  # 场景更新函数self.next_update = self.root.after(kUpdateDelay, self.update)  # 延迟执行下一次更新def next_food(self):  # 生成下一个食物while True:pos = self.rand_pos(kGridWidth, kGridHeight)if pos not in map(lambda b: b[0], self.snake_bodys):  # 判定是否与蛇身冲突self.canvas.coords(self.food[1], (pos[0] * kGridPixels + 2, pos[1] * kGridPixels + 2,pos[0] * kGridPixels + kGridPixels, pos[1] * kGridPixels + kGridPixels))self.food = (pos, self.food[1])returndef move(self):  # 移动蛇头new_pos = self.snake_bodys[0][0] + self.snake_dirif new_pos not in self.valid_pos or new_pos in map(lambda b: b[0], self.snake_bodys[:-1]):  # 测试新的蛇头位置是否有效return Falseif new_pos == self.food[0]:  # 吃到食物时self.snake_bodys.insert(0, (new_pos, self.canvas.create_oval(new_pos[0] * kGridPixels + 2, new_pos[1] * kGridPixels + 2,new_pos[0] * kGridPixels + kGridPixels, new_pos[1] * kGridPixels + kGridPixels,fill='red', tags='SnakeBodys')))self.next_food()self.score += 1else:self.canvas.coords(self.snake_bodys[-1][1], (new_pos[0] * kGridPixels + 2, new_pos[1] * kGridPixels + 2,new_pos[0] * kGridPixels + kGridPixels, new_pos[1] * kGridPixels + kGridPixels))self.snake_bodys.insert(0, (new_pos, self.snake_bodys.pop()[1]))  # 直接将蛇尾移动至新蛇头return Truedef update(self, event=None):self.update_funcs[self.scene](event)  # 执行当前场景的更新函数def update_gamestart(self, event):  # 游戏开始场景if event and event.keysym == 'Return':  # 按下回车self.canvas.delete('GameStartString')self.snake_dir = random.choice(kDirs.values())head = self.rand_pos(kGridWidth, kGridHeight)self.snake_bodys = [(head, self.canvas.create_oval(head[0] * kGridPixels + 2, head[1] * kGridPixels + 2,head[0] * kGridPixels + kGridPixels, head[1] * kGridPixels + kGridPixels,fill='red', tags='SnakeBodys'))]self.next_food()self.scene = kScenePlayself.next_update = self.root.after(kUpdateDelay, self.update)elif not self.canvas.find_withtag('GameStartString'):  # 画面初始化self.canvas.create_text((kCanvasWidth / 2, kCanvasHeight / 6 * 2), text='Welcome to the simple snake game.', tags='GameStartString')self.canvas.create_text((kCanvasWidth / 2, kCanvasHeight / 6 * 3), text='Move the snake with <Up, Left, Down, Right>.', tags='GameStartString')self.canvas.create_text((kCanvasWidth / 2, kCanvasHeight / 6 * 4), text='Please press <Enter> to start.', tags='GameStartString')def update_gameplay(self, event):  # 游戏进行场景try:if event and event.keysym in kDirs and kDirs[event.keysym] + self.snake_dir != Vec2D(0, 0):  # 按下方向键且与当前方向不相反时self.root.after_cancel(self.next_update)self.snake_dir = kDirs[event.keysym]if not self.move():raise  # 懒elif not event:  # 自动更新时if not self.move():raiseelse:  # 忽略其他按键returnexcept:  # 死亡self.canvas.delete('SnakeBodys')self.canvas.coords(self.food[1], (0, 0, 0, 0))self.scene = kSceneOverself.next_update = self.root.after(kUpdateDelay, self.update)  # 延迟执行下一次更新def update_gameover(self, event):  # 游戏结束场景if event and event.keysym == 'Escape':  # 按下Escself.canvas.delete('GameOverString')self.scene = kSceneStartself.next_update = self.root.after(kUpdateDelay, self.update)elif not self.canvas.find_withtag('GameOverString'):  # 画面初始化self.canvas.create_text((kCanvasWidth / 2, kCanvasHeight / 5 * 2), text='Your score is: %d' % self.score, tags='GameOverString')self.canvas.create_text((kCanvasWidth / 2, kCanvasHeight / 5 * 3), text='Please press <Esc> to restart.', tags='GameOverString')if __name__ == '__main__':SnakeGame().root.mainloop()

随想录(python编写的计算器和贪吃蛇游戏)相关推荐

  1. 利用python实现简易版的贪吃蛇游戏(面向python小白)

    前言 这篇文章主要给大家介绍了关于如何利用python实现简易版的贪吃蛇游戏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学 ...

  2. python贪吃蛇最简单代码_利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  3. 贪吃蛇python小白_面向 python 小白的贪吃蛇游戏

    代码和教程详见微信公众号:Python高效编程 效果图 图片 代码和教程详见微信公众号:Python高效编程 文字部分: 引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程 ...

  4. python程序源码百行_百行python代码,轻松完成贪吃蛇小游戏

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  5. 面向 python 小白的贪吃蛇游戏

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  6. python趣味编程-贪吃蛇游戏

    在上一期我们用Python实现了一个扫雷游戏的游戏,这一期我们继续使用Python实现一个简单的游戏,让我们开始今天的旅程吧~ 在Python中使用Turtle的贪吃蛇游戏免费源代码 介绍 这 在py ...

  7. jquery实现上下左右键盘监听_python 使用pygame工具包实现贪吃蛇游戏(多彩版)

    今天我们用python和python的工具包pygame来编写一个贪吃蛇的小游戏 贪吃蛇游戏功能介绍 贪吃蛇的游戏规则如下: 通过上下左右键或者WASD键来移动蛇来,让它吃到食物,每吃到食物,蛇的长度 ...

  8. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

  9. 初入Python(一) Pygame贪吃蛇游戏的编写与改进

    贪吃蛇游戏是一款简单耐玩的休闲益智类游戏,利用pygame可以实现轻松编写,不需要辅佐图片等等元素,可以直接利用涂色方块表示,吃果子变长的原理也很容易实现,将body分为一块一块,每块有自己的位置属性 ...

最新文章

  1. c++ 虚函数,纯虚函数的本质区别
  2. 双11特刊 | 云数据库RDS如何顺滑应对流量洪峰
  3. 操作系统(15)-Linux的用户权限
  4. 小程序——列表,详情页(模板)
  5. 2021年PMP考试模拟题3(含答案)
  6. python单位根检验看结果_求助!!!关于单位根检验!!!!我检验了,但看不懂结果,哪位高手帮帮忙...
  7. 图片base64编码解码
  8. C#做的一个简易图片浏览器
  9. 数据结构和算法 第一章 综述(1)
  10. CocosCreator实现不规则的点击区域监听
  11. HarmonyOS使用ArkUI绘制圣诞树
  12. 传统语音识别介绍【五】—— 单音素和三音素
  13. 超神,chatexcel快速制作任意excel表格,给出指令即可
  14. java中float、double和BigDecimal的精度问题(fastjson、Jackson以及实例化的方式)
  15. Linux企业运维篇——git+gitlab+jenkins+docker构成持续集成环境
  16. 【毕业设计_课程设计】基于Python的南京二手房数据采集及可视化分析
  17. R语言 PDF文件损坏或打不开
  18. Django电商项目(八)短信验证码的前后端实现
  19. CSS如何设置html table表格边框样式
  20. 一键安装Lnmp教程

热门文章

  1. ALL-TAG推出RFID墨水防损标签
  2. 费尔德曼的百吉饼实验:人类的诚实程度其实超出你的想象!
  3. 调用系统时间进行操作
  4. 查看当前Linux系统的发行版本命令详解
  5. 不懂函数式?用mobx来写react应用吧
  6. linux 审计工具auditd日志audit.log时间戳转换查看
  7. Fedora进入超级用户的方法
  8. 华为笔试题 简答错误记录(字符串处理,好题!!!)
  9. 【★】路由环路大总结!
  10. debian+apache+acme_tiny+lets-encrypt配置笔记