#!/usr/bin/env python
#coding:utf-8
"""
考察点:
a). 死循环while语句;
b). 循环语句和if语句的嵌套;
c). break和continue的差异;
1. cmd = 显示命令行提示符,等待用户输入;
2. 如果命令为空, 跳出本次循环,继续接收用户命令;
3. 如果命令为quit,跳出所有循环,结束程序;
4. 如果有命令,那么打印"run %s" %(cmd)
"""
while True:
cmd = raw_input(">>>:").strip()
if not cmd:
continue
elif cmd == "quit":
break
else:
print "run %s" %(cmd)
"""
C语言中for循环的语法:
for(i=0;i<100,i++):
print i
python中for循环的语法:
for i in 可迭代的对象:
state1....
跳出for循环: break
跳出本次for循环: continue
第一个可迭代的对象: range(start,stop,step)
考察点:
for循环的嵌套
range使用
编写九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
........
1*9=9 ......................... 9*9=81
while 表达式:
state1....
else:
state2....
(死循环不需要else)
while True:
state1
else:
state2
for i in range(10):
state1
else:
state2
i= 1,2,3,4.....9
j = 1,i+1
"""
for i in range(1,10): #i=1 i=2
#
for j in range(1,i+1): #j=1 j=1,2
print "%d*%d=%d " %(j, i, i*j), # 1*1=1 1*2=2 2*2=4
"""
字符串
1. 创建: 单引号, 双引号, 三引号 (转义字符: \', \", \n, \t)
2. 特性:
索引,
切片: s[start:stop:step]
start默认值为0,stop默认值为字符串长度,step默认值为1,步长
s[1:4:2], s[::-1], s[:4], s[1:]
连接操作:
重复操作:
成员操作符: in, not in
3. 字符串是可迭代对象,通过for实现循环;
4. 字符串常用方法:
1). 判断字符串由什么组成? s.isdigit() ...........
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, len, max, min, 枚举enumerate, zip
练习题:
1. 用户输入字符串, 打印该字符串反转后的字符串;
2. 变量名是否合法判断程序;
变量名命名规则: 由字母,下划线或者数字组成,但不能以数字开头;
s = "hello"
请输入变量名:
1). 判断第一个字符是否由字母或下划线组成;
2). 如果第一个字符合法,判断剩余字符是否由字母,数字或下划线组成;
"""
#1. 练习1
#s = raw_input("Str:")
#print s[::-1]
#2. 练习2
while True:
s = raw_input("输入变量名:") #s[0] #s[1:]
if not(s[0].isalpha() or s[0] == "_"):
print "不合法的变量名"
else:
for i in s[1:]: # s[1:]="ello" #i=e,l,l,o
if not (i.isalnum() or i=="_"):
print "变量名不合法"
break
else:
print "变量名合法"
# ## 元组的创建
# - 通过赋值方式创建元组;
# - 通过工厂方法创建元组
# In[7]:
# tuple
# 可以把元组看作一个容器,任何数据类型都可以放在这个容器里面;
t = (1, 1.0, 2j, True, (1,2,3))
print t
# In[11]:
t = (1)
print type(t)
# 定义单个元组,一定要在这个元素后面加逗号
t1 = (1,)
print type(t1)
# In[15]:
# 工厂方法
t = tuple()
print type(t)
# ## 元组的操作
#
# - 索引
# - 切片
# - 连接
# - 重复
# - 成员操作符
# In[23]:
t = ("fentiao", 5, "male")
# 正向索引
print t[0]
# 反向索引
print t[-1]
# 元组嵌套时元素的访问
t1 = ("fentiao", 5, "male", ("play1", "play2", "play3") )
print t1[3][1]
# In[20]:
# 切片
print t[:2]
# 逆转元组元素
print t[::-1]
# In[26]:
# 连接
print t + t1
# In[28]:
# 重复
t*3
# In[31]:
# 成员操作符
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 "无访问权限"
# ## 元组的循环
# In[32]:
# 字符串的循环:
# 可迭代对象
for i in "hello":
print i
# In[34]:
# 元组目前接触的第三个可迭代对象;
allow_ips = ('172.25.254.1', '172.25.254.12', '172.25.254.13')
for ip in allow_ips:
print ip
# ### Demo: 端口扫描器雏形
#
#
#
# In[36]:
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)
# ## 元组可用的内置方法
# In[55]:
print cmp(('a', 1,2,3,4), (1, 2,))
print max((12,34,12,56))
print min((12,34,12,56))
# In[56]:
# 枚举
ips = ('172.25.254.1', '172.25.254.12', '172.25.254.13')
for i,j in enumerate(ips):
print i,j
# In[63]:
# zip:
username = ("user1", "user2", "user3")
password = ("123", "456", "789")
zip(username, password)
# ### 自动售货系统部分代码
# In[60]:
# 枚举的使用
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])
# ## 元组的常用方法
# In[61]:
t = (2, 1, 1, 2)
print t.count(1)
print t.index(1)
s1=raw_input("first str:") # They are students.
s2=raw_input("last str:") # aeiou
# 依次遍历str1, str2;
# 分别对比里面元素是否相等;
# 如果相等, 将该字符替换为空,实现删除的目的;
for i in s1: # T h e y
for j in s2: # a e i o u
if i==j:
s1=s1.replace(i,"")
print s1