[关闭]
@Humbert 2018-10-12T15:39:18.000000Z 字数 4443 阅读 1128

python入门

python 简介

Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。
Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

python 基础

运行python程序

所需环境:python2.7.0
python有两种运行方式。

python命令运行

在一个 .py程序中写入并保持程序之后,利用 python + .py 文件 的方式运行程序,如
如在 example.py中写入并保存:

  1. print('Hello World!')

在终端的当前目录下输入 python example.py,得到结果:

  1. Hello World!

Python交互模式运行

在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>

Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

在Python交互模式下输入exit()并回车,就退出了Python交互模式。
在交互模式的提示符>>>下,直接输入代码,按回车,就可以立刻得到代码执行结果,如

  1. >>> 3000+5000
  2. 8000
  3. >>> print('Hello World!')
  4. Hello World!

Python交互式环境会把每一行Python代码的结果自动打印出来,因此,可以用来测试代码。

python 语法

Python的语法比较简单,采用缩进方式,写出来的代码就像下面的样子:

  1. # print absolute value of an integer:
  2. a = 100
  3. if a >= 0:
  4. print(a)
  5. else:
  6. print(-a)

以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。
并且,Python程序是大小写敏感的,aA两个不同的变量。

数据类型

以下是python中比较常用的数据类型:

整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

字符串

字符串是以单引号 ' 或双引号 " 括起来的任意文本,比如 'abc',"xyz" 等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。

list

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:

  1. >>> classmates = ['Michael', 'Bob', 'Tracy']
  2. >>> classmates
  3. ['Michael', 'Bob', 'Tracy']

变量classmates就是一个list。用len()函数可以获得list元素的个数:

  1. >>> len(classmates)
  2. 3

用索引来访问list中每一个位置的元素,记得索引是从0开始的:

  1. >>> classmates[0]
  2. 'Michael'
  3. >>> classmates[1]
  4. 'Bob'
  5. >>> classmates[2]
  6. 'Tracy'
  7. >>> classmates[3]
  8. Traceback (most recent call last):
  9. File "<stdin>", line 1, in <module>
  10. IndexError: list index out of range

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。

list元素也可以是另一个list,比如:

  1. >>> s = [[1,2,3],[4,5,6],[7,8,9]]
  2. >>> len(s)
  3. 3

要注意s只有3个元素,其中s[0],s[1],s[2]都是是一个list,如果拆开写就更容易理解了:

  1. >>> a = [1,2,3]
  2. >>> b = [4,5,6]
  3. >>> c = [7,8,9]
  4. >>> s = [a,b,c]

获取输入

python2中可以利用input()函数获取整型输入,即input获取的是整数。

  1. >>> n = input()
  2. 1
  3. >>> n
  4. 1

条件判断

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:

  1. age = 20
  2. # 如果 age大于 20
  3. if age >= 18:
  4. # 输出 adult
  5. print('adult')
  6. # python中分别用 >=, ==, <=, != 表示大于等于,等于,小于等于,不等于。
  7. # >, < 分别表示 大于,小于。

根据Python的缩进规则,如果if语句判断是True,就把缩进的print语句执行了,否则,什么也不做。
也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:

  1. age = 3
  2. if age >= 18:
  3. print('adult')
  4. else:
  5. print('teenager')

可以用elif做更细致的判断,elifelse if的缩写,完全可以有多个elif

  1. age = 3
  2. # age大于等于18
  3. if age >= 18:
  4. print('adult')
  5. # age小于18,大于等于6
  6. elif age >= 6:
  7. print('teenager')
  8. # 上述都不成立
  9. else:
  10. print('kid')

if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else,所以,思考为什么下面的程序打印的是teenager:

  1. age = 20
  2. if age >= 6:
  3. print('teenager')
  4. elif age >= 18:
  5. print('adult')
  6. else:
  7. print('kid')

循环

为了让计算机能计算成千上万次的重复运算,我们需要循环语句。

Python的循环有两种。

for循环

一种是for...in循环,依次把list每个元素迭代出来,看例子:

  1. names = ['Michael', 'Bob', 'Tracy']
  2. # name 依次等于names中的每个元素
  3. for name in names:
  4. print(name)

上述程序还有另一种写法:

  1. names = ['Michael', 'Bob', 'Tracy']
  2. # 利用索引访问names中的每个元素
  3. for index in range(len(names)):
  4. print(names[index])

已知,range(n)会生成一个列表:[0,1,2,3,...,n-1],如:

  1. >>> range(5)
  2. [0,1,2,3,4]

在循环中,break语句可以提前退出循环。例如,本来要循环相加0~10的数字:

  1. sum = 0
  2. for x in range(11):
  3. if sum >= 12:
  4. break
  5. sum = sum + x
  6. print(sum)

程序最终输出的是 15,因为 0+1+2+3+4+5等于15,大于等于10。

while循环

while循环,只要while后面的条件满足,就不断循环,条件不满足时退出循环。比如我们要计算10以内所有奇数之和,可以用while循环实现:

  1. sum = 0
  2. n = 9
  3. # 每次检查n是否大于0,如果n大于0就继续循环,否则退出循环。
  4. while n > 0:
  5. sum = sum + n
  6. n = n - 2
  7. print(sum)

最后输出25。

problems

problem1 输出Muxi Studio

Muxier今天去参加木犀团队后端组的机试,第一题要求他读入一个数n,如果这个数是奇数则输出n次Muxi, 如果是偶数则输出n次Studio. 你能帮他解决这个问题吗?

输入

一个数n

输出

如果数是奇数则输出n次Muxi, 如果是偶数则输出n次Studio.

样例

输入:3
输出:
Muxi
Muxi
Muxi

输入:4
输出:
Studio
Studio
Studio
Studio

tips: 判断奇偶

对于一个整数 n, 我们知道,如果 n对2取余为1,则n为奇数,否则为偶数,用程序表示为:

  1. >>> n = 5
  2. >>> n % 2
  3. 1
  4. >>> n = 4
  5. >>> n % 2
  6. 0

problem2 (3n+1)猜想

现有一个整数x,如果它是奇数,那么把 (3x+1) 砍掉一半;如果它是偶数,那么把它砍掉一半。这样一直反复砍下去,最后一定在某一步得到 x=1。现给定的任一不超过 1000 的正整数 x,简单地数一下,需要多少步(砍几下)才能得到 x=1?

输入:

每个测试输入包含 1 个测试用例,即给出正整数 x 的值。

输出:

输出从 x 计算到 1 需要的步数。

测试样例

输入:3
输出:5

输入:800
输出:21

problem3 打印倒三角形

本题要求你写个程序打印指定层数的zheng三角形形状。
所谓“正三角形形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1。

  1. *
  2. ***
  3. *****
  4. #此为一个倒三角形形状

输入

正整数n作为需要打印的层数。

输出

指定层数的倒三角形形状。

样例

输入:1
输出:

  1. *

输入:2
输出:

  1. *
  2. ***

输入: 3
输出:

  1. *
  2. ***
  3. *****

problem4 求岛屿的周长

给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地,0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
示例:

  1. 输入:
  2. [[0,1,0,0],
  3. [1,1,1,0],
  4. [0,1,0,0],
  5. [1,1,0,0]]
  6. 答案: 16

解释: 它的周长是下面图片中的 16 个黄色的边:

要求写一个程序对应每个输入的二维网格,计算出岛屿周长。代码的一部分已经给出,你只要完成islandPerimeter函数即可:

  1. # coding: utf-8
  2. # grid 是表示网格的二维list
  3. def islandPerimeter(grid):
  4. res = 0
  5. # 完成周长计算
  6. return res
  7. # res 是岛屿周长,最后返回res
  8. if __name__ == '__main__':
  9. # 你可以修改example来测试你的代码
  10. example = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
  11. perimeter = islandPerimeter(example)
  12. print('peimeter is',perimeter)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注