一 字符串
1. 创建: 单引号, 双引号, 三引号 (转义字符: \', \", \n, \t)
2. 特性:
索引;
切片: s[start:stop:step]
start默认值为0,stop默认值为字符串长度,step默认值为1,步长
例如:s[1:4:2], s[::-1], s[:4], s[1:]
连接操作: +a+b
重复操作:*2*"a" ------- aa
成员操作符(某成员在不在字符串中): in, not in
3. 字符串是可迭代对象,通过for实现循环;
4. 字符串常用方法:
1). 判断字符串由什么组成? s.istitle判断是否是一个标题 s.isalnum判断是否为数字或字母组成 s.isalpha判断是否为字母 s.isdigit判断是否为数字 s.islower判断是否为小写字母 s.isspace判断是否为空格 s.istitle判断首字母是否为大写 s.isupper判断是否是大写字母
2). 判断是否以什么开头,什么结尾?
s.startswith("http://")
s.endswith(".png")
3). 去除字符串的左右的空格:(主要应用在有用户输入数据的地方)
s.strip(),s.lstrip(),s.rstrip(),s.replace(" ", "")
重点: s.replace方法也可以间接实现删除某个字符;
4). 字符串对齐格式化:左对齐, 右对齐, 中间对齐
s.center(40, "*")居中
s.ljust(40,"*")居左
s.rjust(40,"*")居右
5). 按照指定分隔符分离字符串:(默认分隔符为空格)
ip = "172.25.254.250"
ip.split(".") # ['172', '25', '254', '250']
6). 指定分隔符连接信息
a = info.split()
"+".join(a) # 'westos+10+company'
5. 内置方法(BIF-built-in function)
cmp(比较ACSLL码的大小), len(字符串长度), max, min, 枚举enumerate, zip(s1,s2)把s1和s2对应起来
C语言中for循环的语法:
for(i=0;i<100,i++):
print i
python中for循环的语法:
for i in 可迭代的对象:
state1....
跳出for循环: break
跳出本次for循环: continue
第一个可迭代的对象: range(start,stop,step)
二 元组(带了紧箍咒的列表)tuple
概念:可以把元组看作一个容器,任何数据类型都可以放在这个容器里面;
元组的创建
通过赋值方式创建元组:t = (1, 1.0, 2j, True, (1,2,3))
通过工厂方法创建元组:t = tuple()定义单个元组,一定要在这个元素后面加逗号
t1 = (1,)
元组的操作
1)索引:
# 正向索引
print t[0]
# 反向索引
print t[-1]
2)切片:t[:2]
print t[:2]
逆转元组元素
print t[::-1]
3)连接:+;t1+t2
4)重复*,t*4
5)成员操作符:in ,not in
allow_ips = ('172.25.254.1', '172.25.254.12', '172.25.254.13')
if "172.25.254.1" in allow_ips:
print "有访问权限"
else:
print "无访问权限"
元组的循环
字符串的循环:
可迭代对象
for i in "hello":
print i
元组目前接触的第三个可迭代对象;
allow_ips = ('172.25.254.1', '172.25.254.12', '172.25.254.13')
for ip in allow_ips:
print ip
Demo: 端口扫描器雏形
ips = ('172.25.254.1', '172.25.254.12', '172.25.254.13')
ports = (80, 8080, 21, 22)
依次读取需要扫描的ip;
for ip in ips:
# 依次读取要扫描的端口
for port in ports:
print "[+] Scaning %s:%d" %(ip, port)
元组可用的内置方法
print cmp(('a', 1,2,3,4), (1, 2,))
print max((12,34,12,56))
print min((12,34,12,56))
枚举
ips = ('172.25.254.1', '172.25.254.12', '172.25.254.13')
for i,j in enumerate(ips):
print i,j
zip:
username = ("user1", "user2", "user3")
password = ("123", "456", "789")
zip(username, password)
自动售货系统部分代码
枚举的使用
goods = (
("Apple", 2),
("Ipad", 4000),
("iWatch", 3500)
)
print "商品编号\t商品名称\t商品价格"
for index, value in enumerate(goods):
print "%.3d\t%s\t%.2f" %(index, value[0], value[1])
元组的常用方法
t = (2, 1, 1, 2)
print t.count(1)
print t.index(1)
练习题:
1. 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
2. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
第一种:
第一种比较麻烦,电脑计算量太大,计算较慢
第二种:
套用了math sqrt( )函数 ----- 返回x的平方根
3. # (2017-小米-句子反转)
- 题目描述:
> 给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”
- 输入描述:
> 输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)
- 输出描述:
> 对于每个测试示例,要求输出句子中单词反转后形成的句子
- 示例1:
```
- 输入
hello xiao mi
- 输出
mi xiao hello
4. # (2017-好未来-笔试编程题)--练习
- 题目描述:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
- 输入描述:
每个测试输入包含2个字符串
- 输出描述:
输出删除后的字符串
- 示例1:
```
输入
They are students.
aeiou
输出
Thy r stdnts.
第一种:
```
第二种:
方法一,字符串strip() lstrip() rstrip() 去掉字符串两端字符
方法二,删除单个位置的字符,可以使用切片 + 拼接的方式
方法三,字符串的replace()方法或者正则表达式re.sub删除任意位置字符
方法四,字符串translate方法,可以同时删除多种不同的字符
5.
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母。
- 输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
- 输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
```
输入
AAA
输出
Dislikes