自学语言,比较艰难,希望能坚持下去。
字符串处理函数
len(x) 返回x的长度
str(x) 与eval函数相反 在两侧加引号
chr(u) 通过Unicode编码u返回对应的字符
ord(x) 返回字符x对应的Unicode编码
字符串处理方法
str.lower()/str.upper() 将全部字符小写/大写
str.split(sep=None) 返回一个列表,由str根据sep被分割的部分组成,默认为所有的空字符,包括空格、换行(
)、制表符( )等
str.count(sub) 返回子串sub在str中出现次数
str.replace(old,new) 将str中所有old字串替换为new
str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar作为填充字符
str.join(iter) 在iter变量除最后元素外每个元素后加一个str
",".join("12345") 结果为 "1,2,3,4,5" 主要用于字符串分割
字符串格式化
需要注意的是,如果要输出的位数超过了规定的宽度,则以实际输出位数为准
需要重点理解的是,format的槽机制,槽中可以嵌套槽,用来表示宽度、填充等含义。比如这道题
n = eval(input())
for i in range(1, n+1, 2):
print("{0:^{1}}".format('*'*i, n))
这里就是槽中又嵌套了一个槽,很灵活
循环的高级用法
for ...:
...
break
else:
...
else可以跟在for/while后面用,表示如果没有在循环中执行break,那么执行else中的语句
随机数函数
random() 生成[0,1)随机小数
seed(x) 以x为种子
randint(a,b) 生成[a,b]随机整数
randrange(m,n[,k]) 生成[m,n)以k为步长的随机整数
uniform(a,b) 生成[a,b]随机小数(16位)
choice(seq) 从序列seq中随机选择一个元素
shuffle(seq) 将序列seq中元素随机排列
以字符串形式调用函数的方法
print(eval("calc({})".format(input())))
很巧妙,{}完全被输入的内容替代,再用eval去掉引号,相当于实现了print(calc(input()))
或 print(calc(eval(input())))
但是为什么不能像上述这样实现呢
比如输入是1,2,3,4
,那么input()返回的实际上是“1,2,3,4”
这一整个字符串,不能被正常传参传进calc里,又或者eval之后这个输入的1,2,3,4
自动变成了元组(1,2,3,4)
,也是无法传参的
因此这个以字符串形式调用函数的方法十分巧妙,即先用引号括住,这样就保证了输入的内容可以无损粘贴到calc()的括号中去