文本编辑 Python:

绝对不能用Word和Windows自带的记事本。

(1)Word保存的不是纯文本文件

(2)记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误。

像.exe文件,直接运行  .py文件:

(1)在Windows下不能直接运行。 在MAC、Linux下可直接运行

(2)方法:

step1:在.py文件的第一行加上一个特殊的注释:  #!/usr/bin/env python3

step2:通过命令给hello.py以执行权限:   $ chmod a+x hello.py

#        :    以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。

:冒号:  当语句以冒号:结尾时,缩进的语句视为代码块  。约定俗成:使用4个空格的缩进

Python程序是大小写敏感的,如果写错了大小写,程序会报错

如果字符串内部既包含'又包含" 。则可以用 转义字符\来标识(放置在 ' 或 ”  之前)比如:  'I\'m \"OK\"!'   表示的字符串内容是  I'm "OK"!  。

输入多行内容时,可以 '''...'''的格式表示多行内容。 如在cmd窗口中输入 print('''a 回车  则会出现... 示意继续输入。结束时,以输入''' 结束。

python 是动态语言,变量本身类型不固定,可以反复赋值

在Python中,有两种除法:

(1)一种除法是/  。/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数: 9 / 3 》3.0

(2)一种除法是//,称为地板除,两个整数的除法仍然是整数 :10 / 3 》3

Python 余数运算。 % 。可以得到两个整数相除的余数:10 % 3  》1

字符串与编码

len() :计算str包含多少个字符,可以用len()函数:     len(b'ABC') 》 3

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3     告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

# -*- coding: utf-8 -*-
告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:

(1)%
运算符: 是用来格式化字符串的
(2)常见占位符:

%d    整数    :

            %d 普通的整数输出;

             %2d整数输出,整数的宽度是2位,若不足两位,左边补空格;

             %02d整数输出,整数的宽度是2位,若不足两位,左边补0;

             %.2d 整数输出,整数的有效数字是2位。

>>> '%2d-%02d' % (3, 1)
' 3-01'

  

%f     浮点数
%s   字符串
%x   十六进制整数

(3)字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%: 'growth rate: %d %%' % 7     >>>  'growth rate: 7 %'

函数

for x in ...循环:是把每个元素代入变量x,然后执行缩进块的语句。 for a  in list:

range()函数range(5)生成的序列是从0开始小于5的整数

列表list (有序的集合) 可变

创建数组       classmates = ['Michael', 'Bob', 'Tracy']

len()函数可以获得list元素的个数(如果一个list中一个元素也没有,就是一个空的list,它的长度为0)       >>> len(classmates) 

用索引来访问list中每一个位置的元素,记得索引是从0开始的      >>> classmates[0] 'Michael'

用 -1做索引,直接获取最后一个元素       >>> classmates[-1]

往list中追加元素到末尾   >>> classmates.append('Adam')

把元素插入到指定的位置,比如索引 号为1的位置:   >>> classmates.insert(1, 'Jack')

删除list末尾的元素    >>> classmates.pop()

要删除指定位置的元素,用pop(i)方法,其中i是索引位置    >>> classmates.pop(1)

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:   >>> classmates[1] = 'Sarah'

list元素也可以是另一个list,        >>> s = ['python', 'java', ['asp', 'php'], 'scheme']  。s[2]又是一个list。要拿到'php'可以写p[1]或者s[2][1]

元组tuple  (有序列表)  不可变

tuple一旦初始化就不能修改

用括号()可以表示tuple          >>> classmates = ('Michael', 'Bob', 'Tracy')

如果要定义一个空的tuple     >>> t = ()

如果要定义一个空的tuple     >>> t = (1)        >>> t = (1,)

tuple元素,指向永远不变 。但元素中如果有list, 则该list 的值是可变的。

 

例:打印数组信息

#!/user/bin/env python3
# -*- coding: utf-8 -*- L = [
['Apple', 'Google', 'Microsoft'],
['Java', 'Python', 'Ruby', 'PHP'],
['Adam', 'Bart', 'Lisa']
]
print('输出1:%s, 输出2: %s ,输出3: %s' %(L[0][0],L[1][1],L[2][2]))

  

条件判断

if  条件:
do
else:
do

  

if  else的判断是很粗略的,完全可以用elif做更细致的判断。

elifelse if的缩写,完全可以有多个elif,所以if语句的完整形式就是:

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>

  

if语句执行有个特点,它是从上往下判断,如果在某个判断上是True把该判断对应的语句执行后,就忽略掉剩下的elifelse。即若第一个条件判断成功,就不会判断剩下的条件。

if判断条件还可以简写,比如写:

if x:
print('True')  

只要x是非零数值、非空字符串、非空list等,就判断为True,输出print。  否则为False

循环(for .in .  \  while)

for x in ...循环:把每个元素代入变量x,然后执行缩进块的语句

while循环:只要条件满足,就不断循环,条件不满足时退出循环。

break  :作用是在循环过程中直接退出循环。 提前结束循环。

continue: 在循环过程中,也可以通过continue语句,跳过本轮循环,直接开始下一次循环。

ps:如果程序陷入“死循环”,可以Ctrl+C退出程序,或者强制结束Python进程。

字典 dict (全称:dictionary/map)

把数据放入dict的方法:

(1)初始化时指定: ex: d={'aa': 11, 'bb': 22, 'cb': 33}

(2)通过key放入: d['dd']=44

要避免key不存在的错误:

(1)通过in判断key是否存在:'dd' in d >>存在则输出true ,否则false

(2)通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value

d.get('ddddd') #key不存在,则不输出结果 。key存在,则输出value值。
d.get('dddd',-1) # 同上

一个key只能对应一个value.多次对一个key放入value,后面的值会把前面的值冲掉

删除key:用pop(key)方法删除key,对应的value也会从dict中删除 d.pop('dd')

key必须是不可变对象。因为dict根据key来计算value的存储位置。这种算法称为哈希算法(Hash)。

set集合
set 是一组key的集合,但不存储value。(set的key不能重复。)

s=set([1,2,3]) 创建set(提供list作为输入集合)

s.add(dd) 可以添加元素

s.remove(dd) 可以删除元素

set中重复的元素会被自动过滤。

set可以看成数学意义上的无序和无重复元素的集合,两个set可以做数交集(s1 & s2)、并集(s1 | s2)等操作

set和dict的唯一区别仅在于没有存储对应的value

函数

定义函数:  使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type') #如果传入错误的参数类型,函数就可以抛出一个错误:bad operand type
if x >= 0:
return x
else:
return -x

位置参数

对于power(x,n)函数,参数x、n都是位置参数。调用函数时,传入的两个值按照位置顺序依次赋给参数x和n
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s

(2)默认参数

默认参数可以简化函数的调用。降低调用函数的难度:

a.必选参数在前,默认参数在后,否则Python的解释器会报错
b.函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数 (注:当值与默认参数不符时,再进行指定)
c.默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!

(3)可变参数 *args

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

定义可变参数有2种方案:

方案一:    将参数作为一个list 或者 tuple传进来 。定义如下,与普通函数无差别,但是调用的时候,需要组装lst

def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

方案二:    在参数前面加了一个*号。则调用时,可以传入任意个参数。 ex: calc(1, 2) >>> 5

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

(4)关键字参数 **kw

关键字参数允许你传入0个或任意个含参数名的参数,这些参数在函数内部自动组装为一个dict。 可以扩展函数的功能。

定义:
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
调用:
>>> person('Michael', 30) #只传必选参数
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing') #传入1个关键字参数
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer') #传入2个关键字参数
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

(5)命名关键字参数

限制调用者可以传入的参数名,同时可以提供默认值。

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数  (若没有* ,则定义的是位置参数)

def person(name, age, *, city, job):
print(name, age, city, job)

(99)参数组合

参数组合使用时,参数的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

递归函数

所有的递归函数都可以写成循环的方式。但循环的逻辑不如递归清晰。

递归函数  fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n

# fact(n)用递归的方式写出来
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
汉诺塔 的移动也可以看做是递归函数。

思路:
对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为: 
- 如果a只有一个圆盘,可以直接移动到c; 
- 如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。
#编写一个函数,给定输入 n, a, b, c,打印出移动的步骤
def move(n, a, b, c):
if n ==1:
print a, '-->', c
else:
move(n-1, a, c, b)
move(1, a, b, c) # 或 print a, '-->', c
move(n-1, b, a, c)
# 调用时,输入如 move(2,'A','B','C')。可参看结果

Python 编辑注意点的更多相关文章

  1. 使用sublime text3搭建Python编辑环境

    最近在工作遇到一个难题. 我所在的测试组有一套PC软件前端自动化工程,在进行自动化测试时,需要在一台古老的xp机器上运行,但这台古老的xp机器带给我诸多烦恼,特别是使用Pycharm编辑器时,我遇到了 ...

  2. 使用python编辑和读取word文档

    python调用word接口主要用到的模板为python-docx,基本操作官方文档有说明. python-docx官方文档地址 使用python新建一个word文档,操作就像文档里介绍的那样: fr ...

  3. python 编辑文件时路径问题解决方法:文件或者目录不存在、文件编辑后无法保存等(以编辑xml文件为例)

    1.获取工程所在根路径:根路径=os.path.dirname(os.path.abspath('__file__')) 2.将获取的根路径和相对路径组合:组合路径=os.path.join(根路径, ...

  4. Lubuntu下小巧好用的Python编辑工具Geany

    在Lubuntu系统上有很多的Python编辑器,如eclipse,PyCharm等,功能繁多,市场占有率高,但动辄几百M的体积有些巨大,博主今天推荐一款精简且易用的Python开发工具--Geany ...

  5. python编辑选课系统

    一.需求分析 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包含,周期,价格,通过学校创建课 ...

  6. python编辑已存在的excel坑: BadZipFile: File is not a zip file

    背景-原代码如下,期望能自动创建excel,并且可以反复调用编辑: import xlwt,osfrom openpyxl.styles import Font, colors class Write ...

  7. python 编辑xml中namespace问题中出现很多ns0

    原始文件:

  8. python编辑excel

    转: http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html

  9. python编辑修改haproxy配置文件--文件基础操作

    一.需求分析 有查询,删除,添加的功能 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息 删除功能:查询到要删除内容则删除,打印信息. 添加功能:同上. 二.流程图 三.代码实现 本程序主要 ...

随机推荐

  1. 逆战:微信小程序开发(二)

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import { req ...

  2. 阿里云K8S下玩.NET CORE 3.1

    1. 创建阿里云K8S集群,本文以标准托管集群为例 1.1 创建一个 2台 centos 2core 4G的 k8s 集群 1.2 创建成功的模样 2. 创建 asp.net core webapi项 ...

  3. 使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证

    说到验证,那就需要做三件事: 定义验证规则 按验证规则进行检查 报告验证的错误.在把错误报告给API消费者的时候,报告里并不包含到底是服务端还是API消费者引起的错误,这是状态码的工作.而通常响应的B ...

  4. 【Asp.net】 七大内置对象

    本文主要分析Asp.net的7大内置对象. 利用提供的内置对象可以实现页面之间的数据传递和一些特定的功能,如数据输出,页面重定向等.5个核心常用内置对象分别是Application,Session, ...

  5. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  6. cf1276B

    题意简述:给出无向图,会有重边,然后给你两个点a,b,让你计算有多少点对(x,y)满足从x到y的所有路径都经过a和b 题解:先从a,b两点出发进行dfs,dfs的过程中不能经过a,b两点(除了开始) ...

  7. Beego 输出数据格式JSON、XML、JSONP

    JSON.XML.JSONP beego 当初设计的时候就考虑了 API 功能的设计,而我们在设计 API 的时候经常是输出 JSON 或者 XML 数据,那么 beego 提供了这样的方式直接输出: ...

  8. 【论文翻译】An overiview of gradient descent optimization algorithms

    这篇论文最早是一篇2016年1月16日发表在Sebastian Ruder的博客.本文主要工作是对这篇论文与李宏毅课程相关的核心部分进行翻译. 论文全文翻译: An overview of gradi ...

  9. 09、const与extern在一起跨文件引用

    const与extern都属于属性一类. 两者加一起用需要注意的一点是,在多文件编译中,加入我们共用一个全局常量.一般的定义会是这样: A.cpp文件 const int gg_int = 100; ...

  10. MyBatis的延迟加载和缓存机制

    延迟加载: 什么是延迟加载: MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. MyBatis根据对 ...