python 入门学习

最近在某学习网站,学习了一下python,记录一下,仅做学习用途,侵权删除。

  1. 认识python

1.Python是一个动态的解释性语言。什么意思呢,就是说在运行之前不会对代码做翻译工作,计算机会直接在它运行时一边理解,一边执行,一边判断是否有语法错误。

2.Python 是不需要说明类型的:变量,参数,函数等等都无需说明类型。

3.Python分为两个版本:2和3 ,我们主要学习2, 版本3目前还不稳定。

  • 程序1

:认识基本操作:变量赋值,输出变量

a=6
print a
b="hello world"
print b
a=b
print a,b

输出:
6
hello world
hello world hello world
既然能够直接赋值(=被重载)那么+ * - / 也被重载了吗?

a = 'a'
b = 'b'  
print a+b
print a*3+b 

输出ab 和 aaab ,但是/ 和 - 无法通过编译 ,所以我们可以发现 * 和+ 是被重载过,但是- 和 / 并没有被重载。

关于 len和str

a = 'China'
a_len=len(a) 
print 'length of a is ' + str(a_len)

输出: length of a is 5 可以发现str(int)其实是将一个int 类型的数字转换为了一个字符串的形式,而len 可以看成简化了语法的strlen

  • 程序2

: 询问输入,并将输入值付给name,括号内是提示内容(会打印出来)

name=raw_input('What is your name:')  
print 'Your name is '+name
  • 程序3

:默认的(向下)取整除法(被除数、除数都是整数,结果也是整数) ,精确除(被除数、除数有一个是小数,结果也是小数)

print 3/2
print 3/2.0
print 2./2

输出: 1、 1.5、 1.0

我们当然也可以全部都使用精确的除法,从版本3里面导入包,这样进行的全部除法都是精确除, 如果我们仍想使用取整除可以用//运算符。

from __future__ import division
print 3 / 2
print 3.0 / 2.0
print 2. / 2.
print 3//2

输出: 1.5 、 1.5 、 1.0 、 1

小测验

a = '10'
b = 10
c = str(len(a) + b)
a = len(a * b)
b = b + a

很简单 可以知道 :最终 a=20 b=30 c=’12’

据说一个很标准的程序
if….定义了一个一个很标准的程序执行入口

def main():
    print 'Hello World'

if __name__ == '__main__':
    main()

那么函数又如何使用呢

def max_pow(a, b): 
    if a > b:
        pow_ab = a ** b
        return pow_ab
    pow_ba = b ** a
    return pow_ba

从上面函数得到的知识:
1.每一行的语句开头空格数一致,称行缩进,相同缩进的行被认为在同一个层次。也就是说 if a>b: 后面隐藏{} ,而这里面的东西必须拥有相同的行缩进咯?同理,max_pow(a, b): 也是一样咯?
对逻辑相同的语句进行组织时应使用4个空格。
同时极为反对使用tab 进行缩进,因为在不同的编译器上有不同的处理方式。

2.关键字 def :定义函数的名称
3. ** 是什么东西呢,我们不妨写个东西验证一下

def main():
    print 2 ** 3
    print 2 ** 4
    print 3**4
if __name__ == '__main__':
    main()

输出 8 、 16、 81 所以我们可以大胆猜想 ** 相当于 指数(2^4=2*2*2*2)

如果我们遇到我们不会的函数,或者关键字,是可以在程序里查看如何运用的。

import sys 
help(len)
print dir(sys)

help (sys.exit)
help('china'.split)
print dir(list)

我们可以去看len函数、 和list下所有被定义的函数方法列表??(大概就是help (sys.exit) 和 help(‘china’.split)这两句话咯?)

split函数使用:

s ="www.google.com"   
print s.split('.')               
print s.split('.',1)    
print s.split('.',-1)   

print s.split('.')[1]      
print s.split('.',1)[-1]   

s1,s2,s3=s.split('.',2)       
print s1
print s2
print s3

输出:
[‘www’, ‘google’, ‘com’] 使用. 分割最多次
[‘www’, ‘google.com’] 使用. 分割1次
[‘www’, ‘google’, ‘com’] 使用. 分割最多次
google 使用. 分割最多次 之后的第1部分
google.com 分割1次之后的倒数第一部分,同理如果-2则是倒数第二部分
www
google
com

经典样例:

s="hello world!<[www.google.com]>byebye"   
print s.split('[')[1].split(']')[0]   
print s.split('[')[1].split(']')[0].split('.')  

输出:
www.google.com
[‘www’, ‘google’, ‘com’]

小测验
a+b+c

s=raw_input()
a,b,c=s.split(' ')
print int(a)+int(b)+int(c)

或者

a,b,c=(int(x) for x in raw_input().split(' ') )
print a+b+c

首先我们可以知道raw_input是输入的时候呢是一个字符串型的输入,我们需要将其转换为数字来计算。然后我们可以通过第二种方法来学习下for的用法

字符串
我们引用字符串的时候用单引号或者双引号都是可以的,但如果在字符串中存在引号,那么双引号包裹的字符串可以直接引用单引号,反之依然,否则需要使用转义字符 : \’ \”
一个字符串可以分成多行写,但需要在末尾加上\

a = 'This is a string\
that is so good to \
let you to understand'

概念: 一个字符串被创建之后不可以被做出任何改变
因此,我们在字符串的计算过程中实际上是在不断地创建新的字符串。
比如a=’b’+’c’ 即创建了一个新的字符串’bc’然后a指向他。
访问某个字符和c++一样,都是用[] 索引都是从0开始

在一个字符串前+r有什么效果?以及lower() upper()函数

a = 'In\na line'
b = r'In\na line'
print a
print b
print a.lower()
print b.upper()

输出:
In
a line
In\na line 所以+r可以让换行失效?准确的说是让转义字符失效
in
a line
IN\NA LINE 而显然 lower和upper函数是将字符串转换为大小写

几个函数:是否全部为字母、数字、空格(isspace)、是否以…开头 、是否以…结尾。

s = 'HelloabcdWorld'
print s.isalpha()
print s.isdigit()
print s.startswith('Hello')
print s.endswith('World')

输出 True 、False 、True、True

[]内快速使用位置索引

tower = 'abcdefg'
print tower[1:4]
print tower[3:]
print tower[:-2]

输出:
bcd 说明这个区间是[ l,r )
defg
abcde

replace 函数: 两个参数,将原字符串中所有含有第一个参数的子字符串都替换为第二个参数:

weather = 'rainy day'
bag = 'nothing in the bag'
if weather.find('rain')!=-1:
    bag=bag.replace('nothing','umbrella')
print bag

输出:umbrella in the bag

不同类型的变量对应的输出方式: 整数 –%d 小数—%g 字符串–%s

name = 'Wangmu Niangniang'
age = 9000
height = 1.73
print name + ' is a ' + str(age) + '-year-old woman with height ' + str(height)
print '%s is a %d-year-old woman with height %g' %(name,age,height)

小测验:
把一个字符串里面的所有的空格换成%20

from __future__ import print_function
s = raw_input()
l = len(s)
p = 0
while (p < l):
    if (s[p]==' '):
        print('%20', end='')
    else:
        print(s[p], end='' )
    p = p + 1

用print函数之前,一定要使用 from future import print_function 定义print的函数。

Python的结构
1列表的定义与访问

list=[100,23,45]
print list[0]
print list[1]
print list[2]
print len(list)

2.list 的添加与连接 自行感受理解:append 与 extend函数,insert函数 与index函数

hello = ['hi', 'hello']
world = ['earth', 'field', 'universe']
hello.append('nihao')
print hello
hello.extend(world)
print hello

hello2 = ['hi', 'hello']
hello2.insert(0,'nihao')
print hello2
print hello2.index('hi')

输出:
[‘hi’, ‘hello’, ‘nihao’]
[‘hi’, ‘hello’, ‘nihao’, ‘earth’, ‘field’, ‘universe’]
[‘nihao’, ‘hi’, ‘hello’]
1

3.删除: 比较remove和pop函数

hello = ['nihao', 'hi', 'hello', 'a', 'b', 'c']
hello.remove('nihao')
print hello
hello.pop(0)
print hello
hello.pop(1)
print hello

输出:
[‘hi’, ‘hello’, ‘a’, ‘b’, ‘c’]
[‘hello’, ‘a’, ‘b’, ‘c’]
[‘hello’, ‘b’, ‘c’]
我们通过其他的尝试可以发现:pop参数只能为索引位置,且这个参数必须在索引范围内, 同理 如果remove 的参数在list中找不到,也会报错。
有一个很尴尬的地方: print hello.pop(0) 输出是:列表内的第一个元素,而不是pop完之后的整个列表。。。

4.另一种连接方式 join函数 : 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
manager = 'tuotatianwang,taibaijinxing,juanliandajiang'
manager_list=manager.split(',')
print manager_list
new_manager =' '.join(manager_list)
print new_manager

输出:
[‘tuotatianwang’, ‘taibaijinxing’, ‘juanliandajiang’]
tuotatianwang taibaijinxing juanliandajiang

5.sort的使用

numbers = [1, 4, 2, 3, 8, 3, 0]
print sorted(numbers)
print sorted(numbers,reverse=True)

numbers.sort()
print numbers
x=numbers.sort()
print x

输出:

[0, 1, 2, 3, 3, 4, 8]
[8, 4, 3, 3, 2, 1, 0]
[0, 1, 2, 3, 3, 4, 8]
None // 所以这个地方值得注意下,list.sort()这个语句是没有返回值的. BBBBBBUT!!! sorted(list)返回排序完成后的list

sort的自定义关键字使用:

def china_first(item):
    if item == 'China':
        return 0
    else:
        return len(item)
country = ['jp', 'China', 'USA', 'Thai']
print sorted(country)
print sorted(country,key=len)
print sorted(country,key=china_first)

输出:
[‘China’, ‘Thai’, ‘USA’, ‘jp’]
[‘jp’, ‘USA’, ‘Thai’, ‘China’]
[‘China’, ‘jp’, ‘USA’, ‘Thai’]

元组的使用:有一点类似struct 结构提,他可以包含多个数据,但是在python里面:用法和list 又有某些相同。

tuple = (1, 2, 'hi')
print len(tuple)
print tuple[2]
#tuple[2]='bye' 
tuple=(1,2,'bye')
print tuple

tuple[2]=’bye’ 在元组里面这种语句是不可以直接使用的,我们想要修改某个值就只能重新去创建一个新的元组。
输出:
3
hi
(1, 2, ‘bye’)

小测验
输入一行 k 个用空格分隔开的整数,依次为 n1, n2 … nk。请将所有下标不能被 3 但可以被 2 整除的数在这些数字原有的位置上进行升序排列,此外,将余下下标能被 3 整除的数在这些数字原有的位置上进行降序排列。
输出包括一行,与输入相对应的若干个整数,为排序后的结果,整数之间用空格分隔。
样例输入
1 5 4 3 10 7 19
样例输出
1 3 7 5 10 4 19
说实话,我这代码写得有点丑的啊。。。bytheway,元组的排序是默认顺序,和pair一样

from __future__ import print_function
a = raw_input().split(' ')
a.insert(0,-1)
ans=a
for x in ans:
    p=ans.index(x)
    ans[p]=int(ans[p])
s1=[]
s2=[]
for i in a:
    p=a.index(i)
    if(p>0):
        if(p%3==0):
            s1.append([int(a[p]), p])
        else:
            if(p%2==0):
                s2.append([int(a[p]), p])
s1.sort(reverse=True)
s2.sort()
p=1
for x in s1:
    ans[p*3]=x[0]
    p+=1
p=1
for x in s2:
    while((p*2)%3==0):
        p+=1;
    ans[p*2]=x[0]
    p+=1;
for i in ans:
    p=ans.index(i)
    if(p>0):
        if(p!=len(ans)-1):
            print (ans[p],end=' ')
        else:
            print (ans[p],end='')

python 里面的map(pair) —— 键值: 可以

bat = {} 
bat['b'] = 'baidu' 
bat['a'] = 'alibaba' 
bat['t'] = 'tencent'
print bat
print bat['a']
bat['a']='amazing'
print bat['a']
print 'b' in bat
print 'x' in bat
print 'baidu' in bat
print bat.keys()
print bat.values()
print bat.items()

输出:
{‘a’: ‘alibaba’, ‘b’: ‘baidu’, ‘t’: ‘tencent’}
alibaba
amazing
True
False
False
[‘a’, ‘b’, ‘t’]
[‘amazing’, ‘baidu’, ‘tencent’]
[(‘a’, ‘amazing’), (‘b’, ‘baidu’), (‘t’, ‘tencent’)]

字典的遍历

bat = {'a': 'alibaba', 'b': 'baidu', 't': 'tencent'}
for value in bat.values():
    print value
for key in bat:
    print key
for k,v in bat.items():
    print k,'>',v

字典另外的输出方式

boss = {}
boss['name'] = 'robin'
boss['age'] = 45
boss['height'] = 1.78
print 'The boss named %(name)s is %(age)d-year-old and %(height)g tall.'%boss

输出:
The boss named robin is 45-year-old and 1.78 tall.

字典的删除操作,list的删除操作,

num = 6
list = ['a', 'b', 'c', 'd']
dict = {'a': 1, 'b': 2, 'c': 3}
del list[0]
del list[-2:]
print list
del dict['b']
print dict
del num
print num

输出:
[‘b’]
Traceback (most recent call last):
{‘a’: 1, ‘c’: 3}
print num
NameError: name ‘num’ is not defined

文件的使用

fd=open(‘1.txt’,’r’) 表示从某个文件中读取并且放入fd
fd.close() 用完之后关闭
fd=open(‘1.txt’,’rw’) rw表示既有读入的操作,也有写入操作

按行输出整个文件
f = open(‘filename’, ‘rU’)
for line in f: # 访问文件每一行
print line, # 打印每一行,加逗号可以不被额外添加换行

fd.write(‘sadafas’) 将某个字符串写入文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值