python列表字典

列表的引入:数组只能存储同一种数据类型
元组和列表区别:元组不可变数据类型,不可修改,而列表可变数据类型,可修改
列表的定义: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. 计算字符个数

题目描述: 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符。
输出描述:输出输入字符串中含有该字符的个数。

示例1:
输入:ABCDEF A
输出:1

#!/usr/bin/env python
#encoding=utf-8

l = list(raw_input(('请输入字符串:')))
cha = raw_input('请输入要查询的字符:')
print(l.count(cha))
  1. 简单密码破解

题目描述:密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。

假设渊子原来一个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))
  1. (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 ("没有该选项,请重试!!!")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值