以下是自己犯的小错误:
0.一个数的平方是 x**2 或者 x*x,但千万别写成 x**x
1.如果 case-insensitive ,也就是说不区分大小写,都变成小写就好了.
char = char.lower()
2.计算一个字符串中有多少个 x ,可以这么写
char.count('x')
3. join() 作为拼接字符串的方法,所接受的参数必须是字符串.不能是整形
4.range 函数返回一个迭代器,它产生一个均匀分布的整数序列.
range 的三个参数是(起点,终点,步长)
In [124]: list(range(0, 20, 2))
Out[124]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
In [125]: list(range(5, 0, -1))
Out[125]: [5, 4, 3, 2, 1]
range 和切片一样, 不包括终点.
range 函数可以从负数开始遍历.
5.sum() 的参数只有一个.
6.对于字符串切片,其实也是理所应当的.
s = 'help'
s[0:0]
''
s[3:]
'p'
7.判断一个变量是不是数字, isinstance
可以用类型元组,检查对象的类型是否在元组中
isinstance(1,(int,long,float))
True
isinstance('a',(int,long,float))
False
8.判断一个字符串的内容是否表示数字
foo = '123.456'
# replace 的第三个参数是可选参数,表示最多替换的次数
foo.replace('.','',1).isdigit()
True
9.python被认为是强类型化语言,也就是说 python 不会自动转换数据类型
5 + '5'
在某些语言中,例如Visual Basic,字符串‘5’可能被默许转换(或投射)为整数,因此会产生10。但在其它语言中,例如JavaScript,整数5 会被投射成字符串,结果是联结字符串 ‘55’ 。
意味着每个对象都有明确的类型,默认转换只会发生在特定的情况下.
In [16]: '5' + 5---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 '5' + 5
TypeError: must be str, not int
In [17]: a = 4.5
In [18]: b = 2
# String formatting, to be visited later
In [19]: print('a is {0}, b is {1}'.format(type(a), type(b)))
a is , b is
In [20]: a / bOut[20]: 2.25
10.鸭子类型
经常的,你可能并不关心对象的类型,只关心对象是否有某些方法或者用途.这通常被称为'鸭子类型':走起来像鸭子,叫起来像鸭子,那么它就是鸭子.
例如,你可以通过验证一个对象是否遵循迭代协议,判断它是可迭代的。对于许多对象,这意味着它有一个 __iter__
魔术方法,其它更好的判断方法是使用 iter
函数。
def isiterable(obj):
try:
iter(obj)
return True
except TypeError: # not iterable
return False
这个函数会返回字符串以及大多数Python集合类型为True。
In [29]: isiterable('a string')
Out[29]: True
In [30]: isiterable([1, 2, 3])
Out[30]: True
In [31]: isiterable(5)
Out[31]: False
用这个功能编写可以接受多种输入类型的函数。
常见的例子是编写一个函数可以接受任意类型的序列(list、tuple、ndarray)或是迭代器。你可先检验对象是否是列表(或是NUmPy数组),如果不是的话,将其转变成列表
if not isinstance(x, list) and isiterable(x):
x = list(x)
11.引入
在Python中,模块就是一个有 .py
扩展名、包含Python代码的文件。假设有以下模块:
# some_module.py
PI = 3.14159
def f(x):
return x + 2
def g(a, b):
return a + b
如果想从同目录下的另一个文件访问 some_module.py
中定义的变量和函数,可以:有点像类的属性和方法
import some_module
result = some_module.f(5)
pi = some_module.PI
或者:
from some_module import f, g, PI
result = g(5, PI)
使用as
关键词,你可以给引入起不同的变量名:
import some_module as sm
from some_module import PI as pi, g as gf
r1 = sm.f(pi)
r2 = gf(6, pi)
12.要判断两个引用是否指向同一个对象,可以使用 is 方法(不难想象, is not 是什么作用.)
In [35]: a = [1, 2, 3]
In [36]: b = a
In [37]: c = list(a)
In [38]: a is b
Out[38]: True
In [39]: a is not c
Out[39]: True
ps : list 总是创建一个新的python列表!
13. is 比较 和 == 运算符不同
In [40]: a == c
Out[40]: True
is 比较的是对象的引用,而 == 比较的是对象的值
14.可变与不可变对象
可变 : 列表,字典,numpy数组,用户自定义的类型
不可变: 字符串,元组
15.字符串.对于有换行符的字符串,可以使用三引号,'''或"""都行
c = """
This is a longer string that
spans multiple lines
"""
In [55]: c.count('\n')
Out[55]: 3
16.如果字符串中包含许多反斜杠,但没有特殊字符,这样做就很麻烦。幸好,可以在字符串前面加一个r,表明字符就是它自身. r 表示 raw
In [69]: s = r'this\has\no\special\characters'
In [70]: s
Out[70]: 'this\\has\\no\\special\\characters'
17.类型转换
str、bool、int 和 float 也是函数,可以用来转换类型
18.None
None是Python的空值类型。如果一个函数没有明确的返回值,就会默认返回None
19.三元表达式
下面两个语句是相同的效果!
value = true-expr if condition else false-expr
if condition:
value = true-expr
else:
value = false-expr
虽然使用三元表达式可以压缩代码,但是会降低代码的可读性。
20.控制流
(1) 在 python 中,不管是 if,还是 while,for 都有 else 语句。都是前面的 if while for 正常运行之后,才会运行else后面的语句
(2) 用break跳出循环,但是 break 语句只会跳出最内层的循环
(3) pass 是Python 中的非操作语句
如何判断一个字符串中大写字母还是小写字母多呢 ?
def solve(s):
return s.lower() if sum(1 for i in s if i in "abcdefghijklmnopqrstuvwxyz") *2 >=len(s) else s.lower()
def solve(s):
return s.upper() if sum(map(str.isupper,s)) * 2 > len(s) else s.lower()
如何在一个字符串中找到特定的单词(或者出现符合预期的单词的个数) ?
import re
def sum_of_beach(string):
return len(re.findall('Sand|Water|Fish|Sun',string,re.IGNORECASE))
note : findall () 返回的是一个列表 !
将罗马数字转换成十进制数字
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
In [7]: def solution(roman):
...: """complete the solution by transforming the roman numeral into an int
...: eger
我的思路 : 罗马数字 左减右加 .依次判断右边的罗马数字是不是比左边的大,
若左<右.说明这两个数字是一个组合,左边取负值,右边取正值 !!
"""
...: roman_numeral = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
...: sum = 0
...: for i,s in enumerate(roman):
...: if i == len(roman)-1:
...: sum = sum + roman_numeral[s]
...: return sum
...: if roman_numeral[s] >= roman_numeral[roman[i+1]]:
...: sum = sum + roman_numeral[s]
...: else :
...: sum = sum - roman_numeral[s]
...: return sum