@Humbert
2018-10-12T15:39:18.000000Z
字数 4443
阅读 1128
Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。
Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
所需环境:python2.7.0
python有两种运行方式。
在一个 .py
程序中写入并保持程序之后,利用 python
+ .py 文件 的方式运行程序,如
如在 example.py中写入并保存:
print('Hello World!')
在终端的当前目录下输入 python example.py
,得到结果:
Hello World!
在命令行模式下敲命令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交互模式。
在交互模式的提示符>>>
下,直接输入代码,按回车,就可以立刻得到代码执行结果,如
>>> 3000+5000
8000
>>> print('Hello World!')
Hello World!
Python交互式环境会把每一行Python代码的结果自动打印出来,因此,可以用来测试代码。
Python的语法比较简单,采用缩进方式,写出来的代码就像下面的样子:
# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。
并且,Python程序是大小写敏感的,a
和A
两个不同的变量。
以下是python中比较常用的数据类型:
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
字符串是以单引号 ' 或双引号 " 括起来的任意文本,比如 'abc',"xyz" 等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有abc这3个字符。
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
变量classmates就是一个list。用len()函数可以获得list元素的个数:
>>> len(classmates)
3
用索引来访问list中每一个位置的元素,记得索引是从0开始的:
>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。
list元素也可以是另一个list,比如:
>>> s = [[1,2,3],[4,5,6],[7,8,9]]
>>> len(s)
3
要注意s只有3个元素,其中s[0],s[1],s[2]都是是一个list,如果拆开写就更容易理解了:
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [7,8,9]
>>> s = [a,b,c]
python2中可以利用input()
函数获取整型输入,即input
获取的是整数。
>>> n = input()
1
>>> n
1
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:
age = 20
# 如果 age大于 20
if age >= 18:
# 输出 adult
print('adult')
# python中分别用 >=, ==, <=, != 表示大于等于,等于,小于等于,不等于。
# >, < 分别表示 大于,小于。
根据Python的缩进规则,如果if语句判断是True,就把缩进的print语句执行了,否则,什么也不做。
也可以给if
添加一个else
语句,意思是,如果if
判断是False
,不要执行if
的内容,去把else
执行了:
age = 3
if age >= 18:
print('adult')
else:
print('teenager')
可以用elif
做更细致的判断,elif
是else if
的缩写,完全可以有多个elif
:
age = 3
# age大于等于18
if age >= 18:
print('adult')
# age小于18,大于等于6
elif age >= 6:
print('teenager')
# 上述都不成立
else:
print('kid')
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else,所以,思考为什么下面的程序打印的是teenager:
age = 20
if age >= 6:
print('teenager')
elif age >= 18:
print('adult')
else:
print('kid')
为了让计算机能计算成千上万次的重复运算,我们需要循环语句。
Python的循环有两种。
一种是for...in循环,依次把list每个元素迭代出来,看例子:
names = ['Michael', 'Bob', 'Tracy']
# name 依次等于names中的每个元素
for name in names:
print(name)
上述程序还有另一种写法:
names = ['Michael', 'Bob', 'Tracy']
# 利用索引访问names中的每个元素
for index in range(len(names)):
print(names[index])
已知,range(n)会生成一个列表:[0,1,2,3,...,n-1]
,如:
>>> range(5)
[0,1,2,3,4]
在循环中,break语句可以提前退出循环。例如,本来要循环相加0~10的数字:
sum = 0
for x in range(11):
if sum >= 12:
break
sum = sum + x
print(sum)
程序最终输出的是 15,因为 0+1+2+3+4+5
等于15,大于等于10。
while循环,只要while后面的条件满足,就不断循环,条件不满足时退出循环。比如我们要计算10以内所有奇数之和,可以用while循环实现:
sum = 0
n = 9
# 每次检查n是否大于0,如果n大于0就继续循环,否则退出循环。
while n > 0:
sum = sum + n
n = n - 2
print(sum)
最后输出25。
Muxier今天去参加木犀团队后端组的机试,第一题要求他读入一个数n,如果这个数是奇数则输出n次Muxi, 如果是偶数则输出n次Studio. 你能帮他解决这个问题吗?
一个数n
如果数是奇数则输出n次Muxi, 如果是偶数则输出n次Studio.
输入:3
输出:
Muxi
Muxi
Muxi
输入:4
输出:
Studio
Studio
Studio
Studio
对于一个整数 n, 我们知道,如果 n对2取余为1,则n为奇数,否则为偶数,用程序表示为:
>>> n = 5
>>> n % 2
1
>>> n = 4
>>> n % 2
0
现有一个整数x,如果它是奇数,那么把 (3x+1) 砍掉一半;如果它是偶数,那么把它砍掉一半。这样一直反复砍下去,最后一定在某一步得到 x=1。现给定的任一不超过 1000 的正整数 x,简单地数一下,需要多少步(砍几下)才能得到 x=1?
每个测试输入包含 1 个测试用例,即给出正整数 x 的值。
输出从 x 计算到 1 需要的步数。
输入:3
输出:5
输入:800
输出:21
本题要求你写个程序打印指定层数的zheng三角形形状。
所谓“正三角形形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1。
*
***
*****
#此为一个倒三角形形状
正整数n作为需要打印的层数。
指定层数的倒三角形形状。
输入:1
输出:
*
输入:2
输出:
*
***
输入: 3
输出:
*
***
*****
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地,0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
示例:
输入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
答案: 16
解释: 它的周长是下面图片中的 16 个黄色的边:
要求写一个程序对应每个输入的二维网格,计算出岛屿周长。代码的一部分已经给出,你只要完成islandPerimeter
函数即可:
# coding: utf-8
# grid 是表示网格的二维list
def islandPerimeter(grid):
res = 0
# 完成周长计算
return res
# res 是岛屿周长,最后返回res
if __name__ == '__main__':
# 你可以修改example来测试你的代码
example = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
perimeter = islandPerimeter(example)
print('peimeter is',perimeter)