列表的引入:数组只能存储同一种数据类型
元组和列表区别:元组不可变数据类型,不可修改,而列表可变数据类型,可修改
列表的定义:l=[1,2,[3,6,9]]
索引:l[1] ,l[-1], l[-1][2]
切片:l[:1], l[::-1]
重复: l*2
连接:l+l2
成员操作符: in
增:
(1)末尾追加:l.append(5),
(2)迭代增加:l.extend(‘hello’) —依次增加每一个字母,也可以是,元组,列表…
(3)指定位置添加:l.insert(2,’hi’) —索引前追加
改:l[0]=10 —索引直接修改
查:
(1)统计出现次数:l.count()
(2)索引查看:l.index(‘hello’) —查看索引
删:
(1)删除匹配的第一个:l.remove(‘hello’)
(2)索引删除: del l[1], del l ,del l[1:4]
(3)默认删除末尾元素并返回该元素:l.pop() —也可以指定索引删除,并返回该元素
逆序:l.reverse()
排序:l.sort() —求一个字符的ASCII码: ord(“h”)
列表构建栈和队列:
栈:后入先出
#/usr/bin/env python
#encoding=utf-8
stack=[]
info="""
(1).入栈
(2).出栈
(3).栈长度
(4).查看
(5).退出
请输入您的选择:
"""
while True:
choice = raw_input(info).strip()
if choice == '1':
value = raw_input("请输入入栈元素:")
stack.append(value)
elif choice == '2':
if not stack :
print("空栈")
else:
print(stack.pop())
elif choice == '3' :
print(len (stack))
elif choice == '4' :
for i in stack:
print i
elif choice == '5' :
exit()
else :
print('请输入正确的选择:')
队列:先进先出
#/usr/bin/env python
#encoding=utf-8
queue=[]
info = """
(1).入队
(2).出队
(3).查看队列
(4).退出
请输入您的选择:
"""
while True:
choice = raw_input(info).strip()
if choice == '1':
value = raw_input('请输入入队元素:')
queue.append(value)
elif choice == '2':
if not queue:
print("空队列")
break
else:
queue=queue[::-1]
print(queue.pop())
elif choice == '3':
for i in queue:
print i
elif choice =='4':
exit()
else:
print("请输入正确的选择")
字典(dict):
创建:
(1)赋值:d = {“key”:”value”} ,d = {“key”:[“value1”,”value2”]}
(2)工厂函数: dict(user1=’123’,user2=’123’)
{‘user1’:’123’,’user2’:’123’}
(3)利用函数fromkeys:{}.fromkeys([‘user1’,’user2’],’123’) —默认value为none
{‘user1’:’123’,’user2’:’123’}
字典是无序的数据类型,因此无索引,切片,重复,连接;成员操作符通过判断key值d的存在
增改:
(1)d[key]=value: d[http] = [80,8080]
(2)d.update(d1) || d.update(ssh=22,ftp=80) —覆盖存在的,不存在的直接填加
(3)d.setdefault(‘ftp’ ,22) —添加,不覆盖
查看:
d.keys() || d.viewkeys() || d.iterkeys() —看键
d.values() || d.viewvalues() —看值
d.items() —看键值对
for i,j in d.items():
print i,j
d1 = {v:k for k,v in d.items()} —键值互换
print(d1)
d.has_keys(‘ftp’) —查看键是否存在
d.get(‘ftp’) —查看指定key对应的value,并返回,不存在key也不报错
删除:
d.pop(‘ftp’)
del d[‘ftp’]
d.popitem() —随机删
d.clear() —直接清空整个字典
习题:
1.字符串最后一个单词的长度
题目描述:计算字符串最后一个单词的长度,单词以空格隔开。
输入描述: 一行字符串,非空,长度小于5000。
输出描述: 整数N,最后一个单词的长度。
示例1:
输入:hello world
输出:5
#!/usr/bin/python
#encoding=utf-8
print(len(list(raw_input('请输入字符串:').split(' ')[-1]))) #先切片,再找出最后一个单词,写入列表,计算长度
- 计算字符个数
题目描述: 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符。
输出描述:输出输入字符串中含有该字符的个数。
示例1:
输入:ABCDEF A
输出:1
#!/usr/bin/env python
#encoding=utf-8
l = list(raw_input(('请输入字符串:')))
cha = raw_input('请输入要查询的字符:')
print(l.count(cha))
- 简单密码破解
题目描述:密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。
他是这么变换的,大家都知道手机上的字母: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,
声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。
输入描述:输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾;
输出描述:输出渊子真正的密文
示例1:
输入:YUANzhi1987
输出:zvbo9441987
#!/usr/bin/env python
#encoding=utf-8
npwd = []
pwd = { '1':1,
'a':2,'b':2,'c':2,'2':2,'A':'b','B':'c','C':'d',
'd':3,'e':3,'f':3,'3':3,'D':'e','E':'f','F':'g',
'g':4,'h':4,'i':4,'4':4,'G':'h','H':'i','I':'j',
'j':5,'k':5,'l':5,'5':5,'J':'k','K':'l','L':'m',
'm':6,'n':6,'o':6,'6':6,'M':'n','N':'o','O':'p',
'p':7,'q':7,'r':7,'s':7,'7':7,'P':'q','Q':'r','R':'s','S':'t',
't':8,'u':8,'v':8,'8':8,'T':'u','U':'v','V':'w',
'w':9,'x':9,'y':9,'z':9,'9':9,'W':'x','X':'y','Y':'z','Z':'a',
'0':0
}
l = list(raw_input('请输入要解密的字符:'))
for i in l:
if i in pwd.keys():
npwd.append(str(pwd[i]))
print (''.join(npwd))
(2017-腾讯-在线编程题)
- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
输入描述:
输入包括一个整数n,(3 ≤ n < 1000)输出描述:
输出对数示例1 :
输入:
10
输出:
2
#!/usr/bin/env python
#encoding=utf-8
import math
def sushu(n):
for i in range(2,n): #素数定义为只有除自身和1可以除尽
if n % i ==0:
return 0
return 1
l = []
n = input('请输入数字n(3<n<1000):')
for i in range(2,n+1):
if sushu(i):
l.append(i) #添加素数到列表
k=0
for i in l:
for j in l:
if int(i)+int(j) == n:
print("(%s,%s)" %(i,j))
k+=1
print int(math.ceil(k/2.0))
5. ATM程序
ATM柜员机管理系统
实现功能:
1. 当用户在登陆界面输入卡号和密码能登陆;
2. 实现开户功能;
3. 与机器交互实现取款, 存款, 转账, 查询余额,
冻结账户, 修改密码等功能;
#!/usr/bin/env python
#encoding=utf-8
def create_credit(): #创建卡号
l = []
credit = []
for i in range(10):
l.append('610%.3d' % i)
credit.append(l[-1])
l.pop()
return credit[-1]
def create_user(): #创建用户
print('开户'.center(100, '*'))
name = create_credit()
print ('您的用户名为:%s' %name)
passwd = raw_input('*请设置密码>>')
credit = create_credit()
money = 0
status = 0
users[name]={'credit':credit,'money':money,'passwd':passwd,'status':status}
def info1(name): #子系统
info1 = """
**************************************************************
* ATM柜员机管理系统 *
* <1>查询余额 *
* <2>存款 *
* <3>取款 *
* <4>转账 *
* <5>修改密码 *
* <6>冻结账户 *
* <7>退出 *
**************************************************************
请输入您的选择:
"""
print(info1)
choice1 = raw_input()
if choice1 == '1':
usermoney_lookup(name)
elif choice1 == '2':
usermoney_increase(name)
elif choice1 == '3':
usermoney_reduce(name)
elif choice1 == '4':
usermoney_change(name)
elif choice1 == '5':
userpwd_change(name)
elif choice1 == '6':
user_frozen(name)
elif choice1 == '7':
exit()
else:
print('没有该选项,请重试!!!')
def user_login(): #子系统登陆
print('登陆'.center(100, '*'))
timeout = 0
while timeout < 3:
name = raw_input('请输入用户名>>')
if name not in users:
print("该用户不存在!!!")
timeout += 1
break
elif users[name]['status'] == 1:
print('账户已被冻结!!!')
break
else:
passwd = raw_input('请输入密码>>')
if passwd == users[name]['passwd']:
while True:
info1(name)
else:
print('密码错误,请重新输入!!!')
timeout += 1
def usermoney_lookup(name): #查询余额
usermoney = users[name]['money']
print('当前余额:%s' %usermoney)
def usermoney_increase(name): #存钱
users[name]['money'] += input('请输入存入额:')
print('当前余额为:%s' %users[name]['money'] )
def usermoney_reduce(name): #取钱
print('当前可用余额:%s' % users[name]['money'])
users[name]['money'] -= input('请输入取款额:')
print('当前余额为:%s' % users[name]['money'])
def usermoney_change(name): #转账
print('当前可用余额为:%s' % users[name]['money'])
name1 = raw_input('请输入对方帐号:')
money1 = input('请输入转账额:')
for name1 in users:
users[name1]['money'] += money1
users[name]['money'] -= money1
print('当前余额为:%s' % users[name]['money'])
def userpwd_change(name): #改密码
users[name]['passwd'] = raw_input('请输入新密码:')
print('密码更改成功,下次登陆请用新密码登陆!!!')
def user_frozen(name): #冻结账户
users[name]['status'] = input('冻结请按1:')
if users[name]['status'] == 1:
print('已冻结')
else:
print('未知错误')
info = """
*******************************************************
* ATM柜员机管理系统 *
* (1)开户 *
* (2)登陆 *
* (3)退出系统 *
*******************************************************
"""
users = {'610000':{'credit':'610000','money':25800,'passwd':'123456','status':0},}
while True:
print(info)
choice = raw_input('请输入您的选项:')
if choice == '1':
create_user()
elif choice == '2':
user_login()
elif choice == '3':
exit()
else:
print('没有该选项,请重新选择!!!')
6、用户登陆管理系统:
1. 注册新用户
username
password
gender
email
age
2. 用户登陆
username
password
3. 注销用户
username
password
4. 显示用户信息
5. 退出系统
1. 用户名和密码分别保存在列表中;
2. 用户登录时,判断该用户是否注册;
2. 用户登录时,为防止黑客暴力破解, 仅有三次机会;
3. 如果登录成功,显示登录成功(exit(), break).
#!/usr/bin/env python
#encoding=utf-8
def createuser():
print('注册'.center(100,'*'))
print('*开头为必填项')
name = raw_input('*请输入注册用户名>>')
if name in users:
print('用户名已存在,请重新选择用户名')
else:
passwd = raw_input('*请输入密码>>')
gender = raw_input('*请输入性别(0-男,1-女,2-其它)>>')
email = raw_input('请输入邮箱>>')
if not email :
email = None
age = raw_input('请输入年龄>>')
if not age :
age = None
users[name] = {'name':name,'passwd':passwd,'gender':gender,'email':email,'age':age}
print('用户创建成功!!!')
def userlogin():
print('登陆'.center(100, '*'))
timeout = 0
while timeout < 3:
name = raw_input('请输入用户名>>')
if name not in users:
print("该用户不存在!!!")
timeout += 1
break
else:
passwd = raw_input('请输入密码>>')
if passwd == users[name]['passwd']:
print('登陆成功')
break
else :
print('密码错误,请重新输入!!!')
timeout += 1
else:
print('输入超时,请等待!!!')
def userlogoff():
print('注销'.center(100, '*'))
name = raw_input('请输入要注销的用户名>>')
if name not in users:
print('未注册的用户!!!')
else:
users.pop(name)
print('%s 已注销' % name)
def usermessages():
for k,v in users.items():
print ('%s %s \n' %(k,v))
info = """
***********************************************************
* 用户登陆管理系统 *
* (1)注册新用户 *
* (2)用户登陆 *
* (3)用户注销 *
* (4)用户信息显示 *
* (5)退出系统 *
***********************************************************
请输入您的选择:
"""
users = {'root':{'name':'root','passwd':'root','gender':'1','email':'','age':'20'},}
while True:
print(info)
choice = raw_input()
if choice == '1':
createuser()
elif choice == '2':
userlogin()
elif choice == '3':
userlogoff()
elif choice == '4':
usermessages()
elif choice == '5':
exit()
else :
print ("没有该选项,请重试!!!")