输入/输出
1. input和raw_input的区别
raw_input
:将所有输入作为字符串看待,不管用户输入什么类型的都会转变成字符串。raw的含义就是生的;未加工的。
当希望通过raw_input
获取一个整型或者浮点数时,必须在生成后对其使用int
或float
进行转换。
input()
:当输入一个字符串的时候必须使用引号将其括起来,否则他将会引发一个SyntaxError
的问题。从上述说明中,可以发现其实input()的实现是调用raw_input()函数的,然后再进行了一次eval()
。
def input(prompt):
return (eval(raw_input(prompt))) #input()相当eval(raw_input())
在Python3.x之后已经用input()替代raw_input了,用法功能却跟Python2.x中的raw_input()一样。
2.eval()
在python中的实现如下:eval(str[,globals[,locals]])
函数将字符串str当成有效Python表达式来求值,并返回计算结果。
3.多变量输入
a,b,c=map(int,input(‘a,b,c’.split(‘’)))
map()函数
map()
会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map(function, iterable, ...)
def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
4. sys.stdout/sys.stdin
在python中调用print时,事实上调用了sys.stdout.write(obj+'\n')
print 将需要的内容打印到控制台,然后追加一个换行符,以下两行代码等价:
sys.stdout.write('hello' + '\n')
print('hello')
sys.stdin.readline( )
会将标准输入全部获取,包括末尾的'\n'
,因此用len计算长度时是把换行符'\n'
算进去了的,但是input( )
获取输入时返回的结果是不包含末尾的换行符'\n'
的。
因此如果在平时使用sys.stdin.readline( )
获取输入的话,不要忘了去掉末尾的换行符,可以用strip( )
函数(sys.stdin.readline( ).strip('\n'))
或sys.stdin.readline( )[:-1]
这两种方法去掉换行。
说明:原始的sys.stdout
指向控制台,如果把文件的对象引用赋给sys.stdout
,那么print
调用的就是文件对象的write
方法。
end=’’
作用:传递一个空字符串,print函数不会在字符串末尾添加换行符,而是添加空字符串
三种字符串格式化方法
1.Tuple形式:Print ‘hello %s and %s’ % (‘df’ , ’another df’)
2.Dict形式:Print ‘hello %(first)s and %(second)s’ % {‘first’: ‘df’ , ‘second’: ’another df’}
方便和json格式互相转换,例如配置文件中
3..format()
:Print ‘hello {first} and {second}’.format(first=‘df’ , second= ’ano df’)
数据截断
1.round()
round(x, n)
对浮点数近似取值,n表示保留的小数点位数。由于机器中的浮点数精度问题,机器在做二进制截断处理的时候可能会造成四舍五入的结果不对,所以round
函数只适用于精度要求不高的场合;
round()
当不传入第二个参数时默认取整,具体就是按照四舍五入来。但值得一提的是这里对小数末尾为5的处理方法:当末尾的5的前一位为奇数:向绝对值更大的方向取整(比如-1.5、1.5处理结果);当末尾的5的前一位为偶数:去尾取整(比如-2.5,-0.5,0.5和2.5的处理结果)。
参考
2.近似计算其他的选择:
a. 使用math模块中的一些函数,例如math.ceil
(天花板除法);math.ceil()
严格遵循向上取整,所有小数都是向着数值更大(不是绝对值更大)的方向取整,不论正负数都如此
b. int()
函数是“向0取整”,取整方向总是让结果比小数的绝对值更小
c. 向下取整//
,math.floor
;
d. 字符串格式化做截断,例如 "%.2f" % value
(保留两位小数并变成字符串……如果还想用浮点数请披上float()的外衣)。
e. 最后,对浮点数要求很高的话,可使用decimal
模块。
判断字符串的构成
string.isspace()
—空格
string.isdigit()
—数字
string.isalpha()
—字母
字符串翻转
1.字符串切片:
result=s[::-1]
2.reversed方法:
result=’’.join(reversed(s))
3.reduce方法:
result=reduce(lambda x,y:y+x,s)
4.递归函数:
def func(s):
if len(s)<1:
return s
return func(s[1:])+s[0]
result = func(s)
5.使用栈:
def func(s):
l=list(s)#模拟全部入栈
result=''
while len(l)>0:
result +=1.pop()#模拟出栈
return result
result = func(s)
6.for循环:
def func(s):
result =''
max_index=len(s)-1
for index,value n enumerate(s):
result +=s[max_index-index]
return result
result = func(s)
reverse()
和reversed()
(1) reverse()
:列表的内置方法,用于列表中数据的翻转;s.reverse()
这一操作的返回值是一个None 。改变了原有的序列表
(2) reversed()
:python自带的一个类,返回一个序列值经过翻转之后的迭代器,需要通过遍历、list()
、或者next()
等 方法获取作用后的值;不改变原有的序列表
a) 列表反转:
list = [1,3,5,7]
print(list(reversed(list)))
b) 元组的反转:
tuple = (1,2,3)
Print(tuple(reversed(tuple)))
c) 字符串的反转:
s=”’1234’
Print(‘’.join(reversed(s)))
sort()
和sorted()
a.sort()
:改变了原有的序列值,返回值为None;
b=sorted(a)
:没有改变原有的序列表,返回一个新列表.
s.join()
将一个包含多个字符串的可迭代对象,转为用分隔符s连接的字符串:
a) 可迭代对象为列表:(如果列表中不是字符串,可以用str(n) for n in list
转换过来
tt=[“12”,”345”,”67”]
cc=''.join(tt)
ee='?'.join(tt)
print(cc)#1234567
print(ee)#12?345?67
b) 可迭代对象是元组:
ss=(“12”,”345”,”67”)
dd=''.join(ss)
gg='&'.join(ss)
print(cc)#1234567
print(ee)#12&345&67
reduce()
函数:
reduce(function,iterable[,initializer])
function
函数,有两个参数
iterable
可迭代对象(元组、列表、字典、字符串等)
initializer
可选,初始参数
示例:
def add(x+y):
return x+y
reduce(add,[1,2,3,4,5])
or
reduce(lambda x,y:x+y,[1,2,3,4,5])