0%

文件和异常

实际开发中需要对数据进行持久化操作,而数据的持久化最简单直接的方式就是将数据保存到文件中。python中实现文件的读写操作非常简单,通过内置的open函数,可以指定文件名、操作模式、编码信息等。

操作方式 具体含义
‘r’ 读取
‘w’ 写入覆盖
‘x’ 写入,文件已经存在则产生异常
‘a’ 追加,不覆盖
‘b’ 二进制模式
‘t’ 文本模式
‘+’ 更新可读可写
## 读写文本文件
读取文本文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为’r’(如果不指定,默认值也是’r’),然后通过encoding参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码)
阅读全文 »

图形用户界面和游戏开发

基于tkinter模块的GUI

GUI图形用户界面的缩写(Graphical User Interface),python
默认的GUI开发模块是tkinter(python3以前叫做Tkinter),它是基于
TK的,TK是一个工具包,提供了跨平台的GUI控件。python不擅长GUI应用的开发,
tkinter也不是最好的选择,wxPyhton,PyQt,等也都不错
基本上用tkinter开发GUI应用需要5个步骤:

阅读全文 »

面向对象进阶

@property装饰器

之前所讨论过的Python中属性和方法访问权限的问题,虽然不建议将属性设置为私有,但是如果直接将属性暴露给外部也肯定会有问题的,比如没有办法检查赋值给属性的值是否有效。python008中建议将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外部直接访问。我们还可以用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便。

阅读全文 »

面向对象编程基础

把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过集成(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派
通俗理解
程序是指令的集合,我们在程序中书写的语句在执行时会变成一条或多条指令然后由CPU去执行。但是编程的乐趣应该是以人的思维模式去编程,而不是为了迎合计算机,应该是计算机给人提供便捷。为了简化程序的设计,避免代码重复写的冗余,引入函数的概念,如果函数过于复杂,还可以切分为子函数编写,降低系统的复杂性。但是当系统极其复杂的时候呢?我们引入了面向对象编程的概念,把数据和操作数据的函数看做是一个逻辑上的整体,称之为“对象”,解决问题就是创建出需要的对象并向对象发出信息,多个对象协同工作构造出复杂的系统解决实际问题。这就像现实社会
中的公司一样(对象),公司中有很多员工,这些员工分成几个小组(方法),每个小组中每个人为了同一个工程,有各自的分工(多态),共同完成一件事情。

阅读全文 »

字符串和常用数据结构

使用字符串

第二次世界大战促使了现代计算机的诞生,计算机最初的目的
是为了计算导弹的运动轨道的,计算的是数值型的信息,但是随着时间
的推移,我们处理的数据以文本方式居多,所以计算机要处理的信息就
要包括文本形式,处理文本形式的信息,就要了解字符串和它的相关知识。
目前处理的图片信息,越来越大规模的音频信息,视频信息,都有
相关的处理对象和处理方法。
所谓的字符串,就是由零个或多个字符组成的有限序列

阅读全文 »

函数模块的使用

我们是站在巨人的肩膀上的,很多事情前任已经做过,我们就可以理解吸收
拿来直接用就行。或者我们自己编程时,有时候会用到某一个功能很多次,
这时候我们就可以将它封装在一个模块中,随时取用,减少代码的重复。
代码有很多种坏味道,重复是最坏的一种

引例

x1 + x2 + x3 + x4 = 8这道方程有多少组正整数解?
可以将它想象为8个苹果放进四个箱子中,每个箱子中至少有一个的放法
那么可以用排列组合公式来展示

那么程序代码可以写成下面这样:

阅读全文 »

构造程序逻辑

无论程序如何,都是有顺序、分支、循环结构构成的。所以练习吧。
寻找水仙花数

import math
for i in range(100,1000):
    ge = i % 100
    shi = i / 10 % 10
    bai = i / 100
    if ge**3 + shi**3 + bai**3 == i:
        print(i,end='   ')
阅读全文 »

循环结构

应用场景

  • 持续打印某一相同的话
  • LED屏上持续滚动的字

for-in循环

明确知道循环次数或者对一个容器进行迭代

'''
1--100求和
'''
sum = 0
for i in range(101):
    sum += i
print(sum)

'''
1--100之间的偶数和
'''
sum = 0
for i in range(2,101,2):
    sum += i
print(sum)
阅读全文 »

分支结构

应用场景

  • 玩游戏,根据得分是否进入下一关,天天爱消除
  • 周末出入玩还是宅在家
  • 比赛根据得分对阵不同等级的人

if的使用

if elif else 作为关键字很显然不能用作变量
Python中利用缩进来判断是否属于统一代码块,而不是大括号

例子

分段求函数值

'''
        3x - 5 (x>1)
f(x) =  x + 2 (-1 <= x <= 1)
        5x + 3 (x < -1)
'''
x = float(input("please input a number:"))
if x > 1:
    y = 3 * x - 5
elif x >= -1:
    y = x + 2
else:
    y = 5 * x + 3
print("f(%.2f) = %.2f" % (x,y))
阅读全文 »

语言元素

指令和程序

计算机硬件系统:运算器、控制器、存储器、输入设备和输出设备
冯·诺依曼结构两大关键点

  1. 存储设备与中央处理器分开
  2. 二进制编码

变量类型

类型

Python中定义变量不想C语言中用特定的int或者float,而是直接给变量赋值

  • 整型 0b100(二进制) 0o100(八进制) 100(十进制) 0x100(十六进制)
  • 浮点型 123.456 1.23456e2
  • 字符串型 ‘hello’ “hello”
  • 布尔型 True Flase
  • 复数型 3+5j
阅读全文 »