数据类型考试

 

1 介绍

满分120分,90分及格

 

考试范围:

  1. Python语法
  2. 数据类型
  3. 流程控制
  4. 文件处理

 

考试时间:

    周三下午2.00点-晚6:30

2 基础题(50分)

  1. 请说明python解释器与python语言的区别或联系(1分)

Python语言就是一个编程语言,是人与机器沟通的桥梁

Python解释器解释把人类的语言翻译成机器能听懂的语言,让机器代替人力

  1. 执行python脚本的两种方式是?(1分)

交互  。脚本运行

  1. python如何实现单行注释和多行注释(1分)

单行用#  多行用’’’ ‘’’

  1. 定义一个变量有三个特性,分别为?(1分)

Id    type   value

等号比较的是什么?(1分)

is比较的是什么?(1分)

id

  1. 使用链式赋值的方式将10赋值给变量x、y、z(1分)

X=y=z=10

  1. count=10,使用增量赋值,将count的值增加111(1分)

count+=111

  1. 使用一行代码将info=[‘egon’,18,’male’]将列表中用户的名字,年龄,性别分别赋值给变量name,age,gender(1分)

Name=info[0],age=info[1],gender=info[2]

 

  1. 编写猜年龄程序(2分)

a)     要求用户输入年龄,然后与程序后台存放的年龄进行比较,然后打印不同的提示信息,提示用户猜大了or猜....

b)     要求最多才三次则退出程序

Age=18

Count=0

While ount<3:

Inp_name=input(‘输入年龄:’)

If inp_name==age:

Print(‘猜对了’)

Count+=1

Break

Else:

Print('超过三次,重新输入’)

 

 

 

 

  1. 简述数据类型int,str,list,tuple,dict,set的应用场景(1分)

整型int

用来表示:等级,年龄,身份证号,学号,id号

字符串str:包含在引号(单引号,双引号,三引号)内的一串字符

 用来表示:名字,家庭住址,描述性的数据

列表:定义在[]中括号内,用逗号分隔开多个值,值可以是任意类型

用来存放多个值:多个爱好,多个人名

元组按索引取值(正向取+反向取):只能取

字典:定义{}内用逗号分隔开,每一个元素都是key:value的形式,其中value可以是任意类型,而key一定要是不可变类型

集合:定义方式:在{}内用逗号分隔开一个个元素

注意的问题

集合内没有重复的元素

集合的元素必须是不可变类型

  1. 有列表data=[‘alex’,49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量(1分)

Name=data【0】,age=data【1】,

  1. 有如下列表,请取出第三个学生的第1个爱好(1分)

students=[

    {'name':'alex','age':38,'hobbies':['play','sleep']},

    {'name':'egon','age':18,'hobbies':['read','sleep']},

    {'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},

]  student【2】【3】【0】

  1. 有列表 students_info=[[‘egon’,18,[‘play',]],['alex',18,['play','sleep']]],请取出第二个学生的第二个爱好(1分)
  2. 所有数据类型自带布尔值,布尔值为假的有?(1分)

空  0    None

  1. 请判断下述代码的结果为?(1分)

               print(10 > 3 and 'alex' != 'sb' or 'abc' > 'd')   真

print(10 > 3 and 'alex' == 'sb' or 'abc' < 'd')   假

print(10 > 3 or 'alex' < 'sb' or 'abc' < 'd' and 'egon' == ‘nb') 真

  1. 阅读代码,请写出执行结果

代码一:(1分)

if True or False and False:

    print('yes')

else:

    print('no')    真

代码二:(1分)

if (True or False) and False:

    print('yes')

else:

    print('no')  假

16. 请使用while和for两种方式来循环所有可循环的数据类型(while:1分,for:1分),比如

           编写for循环,利用索引遍历出每一个字符

msg='hello egon 666’

for  item in mag:

print(‘mag’)

 

编写while循环,利用索引遍历出每一个字符

msg='hello egon 666’

while True

print(msg【0:13】)

  1. 编写while循环,让用户输入用户名和密码,如果用户为空或者数字,则重新输入(1分)

While  Ture:

Name=input(‘输入用户名:’)

Pwd=input(‘输入密码:’)

If not name.isdbhr():

Continu

18. 输出1-100内所有的奇数(1分)

Count=1

while count<101:

if count%2=0

print(‘count’)

count+=1

 

  1. 使用while循环输出1 2 3 4 5 6     8 9 10(1分)

 

Count+=1

While count<=10:

If  count!=7:

Print(‘count’)

  1. 求1-2+3-4+5 ... 99的所有数的和(1分)

Res=0

Count=1

While count<=5:

If count%2==0:

Res-=count

Else

Res+=count

Print(res)

21. 请说明break与continue的区别(1分)

Break  跳过本次循环

Continu  跳过本层循环

  1. 常用数据类型有:字符串,列表,元组,字典,集合,请分类

按照存值个数分类?(1分)

标量:数字,字典

容器:列表,元组,字典

 

按照可变不可变类型分类?(1分)

 

可以变: 列表   字典

不可以变:数字,字符串 元组

按照取值方式分类(直接取值,按索引,按key取)?(1分)

顺序  字符串,列表元组,字典   key:字典

直接:数字

按照有序无序分类?(1分)

有:元组,列表   无:字典,集合

  1. 阅读代码,请写出执行结果 (1分)

a = "alex"

b = a.upper()

print(a)
alex

print(b)

ALEX

  1. 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)

  name = " aleX"

1) 移除 name 变量对应的值两边的空格,并输出处理结果

Print(name.strip())

2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果
print(name.startawith(al))

3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
print(name.endswith(x))

4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果

Print(name.replace(‘l’,’p’))

5) 将 name 变量对应的值根据 “l” 分割,并输出结果。

Print(name.split(‘l’)

6) 将 name 变量对应的值变大写,并输出结果
print(name.upper(alex))

7) 将 name 变量对应的值变小写,并输出结果
print(name.lower())

8) 请输出 name 变量对应的值的第 2 个字符?

Print(name[1])

9) 请输出 name 变量对应的值的前 3 个字符?

Print(name[:3])

10)     请输出 name 变量对应的值的后 2 个字符?
print(name[-2:1])

11)     请输出 name 变量对应的值中 “e” 所在索引位置?
print(name.index(‘e’))

12)     获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。

Print(name[:-1])

  1. 有变量msg='/etc/a.txt|365|get'(1分)

将该变量中的文件名,文件大小,操作方法切割出来

Print(msg.split(‘/’).split(‘|’))

 

  1. msg='hello alex'中的alex替换成SB(1分)

print(msg.replace(‘alex’,’sb’))

  1. 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。(1分)

即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}

A={‘k1’:[],’k2’:[]}

C=[11,22,33,44,55,66,77,88,99,90]

For  I  in c:

If i>66:

A[‘k1’].append(i)

Else:

A[‘k2’].append(i)     print(a)

  1. 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合

pythons={‘alex’,’egon’,’yuanhao’,’wupeiqi’,’cobila’,’biubiu’}

linuxs={‘wupeiqi’,’oldboy’,’cobila’}

求出即报名python又报名linux课程的学员名字集合(1分)

Print(python & linux)

求出所有报名的学生名字集合(1分)

Print(python |  linux)

求出只报名python课程的学员名字(1分)

Print(pythons - linuxs)

求出没有同时这两门课程的学员名字集合(2分)

Print(python ^  linuxs)

29. 什么是字符编码,如何避免乱码问题?(1分)

字符——翻译——数字,,用什么方式存就用什么方式取

30. unicode转成utf-8的过程称为encode还是decode(1分)

encode

  1. 在python3中bytes类型与unicode类型二者之间如何相互转换?(1分)

encode('gbk') 的结果xc9xcf正是python2中的str类型的值,而在python3是bytes类型,在python2中则是str类型

  1. 使用with语法以文本的方式打开一个文件,并读出文件所有内容(1分)该内容的数据类型是?(1分)

字符串

  1. 以b的方式打开文件,覆盖写入新内容’你好啊wxx’(1分)

With open(‘b.txt’,‘rb’)as f:

Data=f.read():

Data=data..replace(‘b’,’你好啊’)

With open(‘b.txt’,’wb’)as f:

f.write(data)

3 综合题(70分)

  1. 编写登陆接口

基础需求:(4分)

•   让用户输入用户名密码

•   认证成功后显示欢迎信息

•   输错三次后退出程序

 

 

 

 

 

dic={
    'egon':{'password':'123','count':0},
    'egon1':{'password':'123','count':0},
    'egon2':{'password':'123','count':0},
}
while True:
    name=input('用户名:')
    if not name in dic:
        print('用户名不存在')
        continue
    if
dic[name]['count']>2:
        print('次数过多,锁定')
        continue
   
pwd=input('输入密码:')
    if pwd==dic[name]['password']:
        print('登录成功')
        break
    else
:
        print('用户名或者密码错误')
        dic[name]['count']+=1

 

 

升级需求:(6分)

可以支持多个用户登录 (提示,通过列表存多个账户信息)

用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)

 

dic={
    'egon':{'password':'123','count':0},
    'egon1':{'password':'123','count':0},
    'egon2':{'password':'123','count':0},
}

count=0
while True:
        name=input('输入用户名:').strip()
        if name not in dic:
            print('用户名不存在')
            continue

        with
open('b.txt',mode='r')as f:
            lock_users=f.read().strip('|')
            if name in lock_users:
                print('用户%s已经被锁定' %name)
                break
        if
dic[name]['count']>2:
            print('次数过多,锁定')
        with open('b.txt',mode='w')as f:
            f.write('%s|' %name)
            break

       
pwd=input('输入密码:')
        if pwd ==dic[name]['password']:
            print('登录成功')
            break

        else
:

            print('用户名或者密码错误')
            dic[name]['count']+=1

 

  1. 利编写拷贝文件的程序,要求(10分)

a)     可以拷贝任意类型的文件

3.   import sys
l=sys.argv
sre_of_path=l[1]
dst_of_path=l[2]
with open(r'%s' %sre_of_path,mode='rb')as read_f,
    open(r'%s' %dst_of_path,mode='wb')as write_f:
    for line in read_f:
        write_f.write(line)
   

 

a)     在命令行中执行,命令的格式为:python3 copy.py src_file dst_file

  1. 请用两种方式实现,将文件中的alex全部替换成SB的操作(20分)
4.   with open('db.txx',mode='r',encoding='utf-8')as f:
    data=f.read()
    data=data.replace('alex','sb')
with open('db.txt.swap',mode='w',encoding='utf-8')as f:
    f.write(data)
   
import os
with open('db.txt',mode='r',encoding='uft-8')as read_f,
    open('db.txt..sawp',mode='w',encoding='utf-8')as write_f:
    for line in read_f:
        if 'alex'in line:
            line=line.replace('alex','sb')
            write_f.write(line)
os.remove('db.txt')
os.rename('db.txt.sawp','db.txt')

 

  1. 编写购物车程序,实现注册,登陆,购物,查看功能,数据基于文件存取(30分)

 

 

import os

product_list = [['Iphone7',5800],
                ['Coffee',30],
                ['疙瘩汤',10],
                ['Python Book',99],
                ['Bike',199],
                ['ViVo X9',2499],

                ]

shopping_cart={}
current_userinfo=[]
db_file=r'db.txt'
while True:
    print('''
   
登录
    注册
    购物
    '''
)
    choice=input('输入编号:')
    if choice=='1':
        tag=True
       
count=0
        while tag:
            if count==3:
                print('次数过多,退出')
                break
           
uname=input('输入用户名:')
            pwd=input('输入密码:')
            with open(db_file,mode='r',encoding='utf-8')as f:
                for line in f:
                    line=line.strip(' ')
                    user_info=line.strip(',')

                    uname_of_db=user_info[0]
                    pwd_of_db=user_info[1]
                    balance_of_db=int[user_info[2]]
                    if uname==uname_of_db and pwd==pwd_of_db:
                        print('登录成功')
                    current_userinfo=[uname_of_db,balance_of_db]
                    print('用户学习:',current_userinfo)
                    tag=False
                    break
                else
:
                    print('用户名或者密码错误')
                    count+=1

    elif choice=='2':
        uname=input('输入用户名:')
        while True:
            pwd1=input('输入密码:')
            pwd2=input('在次输入密码:')
            if pwd2==pwd1:
                break
            else
:
                print('两次密码不一样')

        balance=input('输入余额')
        with open(db_file,mode='w',encoding='utf-8')as f:
            f.write('%s,%s,%s ' %(uname,pwd1,balance))
    elif choice =='3':
        if len(current_userinfo)==0:
            print('请先登录')
        else:
            uname_of_db=current_userinfo[0]
            balance_of_db=current_userinfo[1]
            print('尊敬的用户[%s] 你的余额[%s],祝你购物愉快' %(uname_of_db,balance_of_db))
            tag = True
            while
tag:
                for index, product in enumerate(product_list):
                    print(index, product)
                choice = input('输入商品编号购物,输入q退出>>: ').strip()
                if choice.isdigit():
                    choice = int(choice)
                    if choice < 0 or choice >= len(product_list): continue

                   
pname = product_list[choice][0]
                    pprice = product_list[choice][1]
                    if balance_of_db > pprice:
                        if pname in shopping_cart:  # 原来已经购买过
                           
shopping_cart[pname]['count'] += 1
                        else:
                            shopping_cart[pname] = {'pprice': pprice, 'count': 1}

                        balance_of_db -= pprice  # 扣钱
                       
current_userinfo[1] = balance_of_db  # 更新用户余额
                       
print(
                            "Added product " + pname + " into shopping cart,33[42;1myour current33[0m balance " + str(
                                balance_of_db))

                    else:
                        print("买不起,穷逼! 产品价格是{price},你还差{lack_price}".format(
                            price=pprice,
                            lack_price=(pprice - balance_of_db)
                        ))
                    print(shopping_cart)
                elif choice == 'q':
                    print("""
                                ---------------------------------
已购买商品列表---------------------------------
                                id          商品                   数量             单价               总价
                                """
)

                    total_cost = 0
                    for i, key in enumerate(shopping_cart):
                        print('%22s%18s%18s%18s%18s' % (
                            i,
                            key,
                            shopping_cart[key]['count'],
                            shopping_cart[key]['pprice'],
                            shopping_cart[key]['pprice'] * shopping_cart[key]['count']
                        ))
                        total_cost += shopping_cart[key]['pprice'] * shopping_cart[key]['count']

                    print("""
                               
您的总花费为: %s
                                您的余额为: %s
                                ---------------------------------end---------------------------------
                                """
% (total_cost, balance_of_db))

                    while tag:
                        inp = input('确认购买: ').strip()
                        if inp not in ['Y', 'N', 'y', 'n', 'yes', 'no']: continue
                        if
inp in ['Y', 'y', 'yes']:
                            # 将余额写入文件

                           
src_file = db_file
                            dst_file = r'%s.swap' % db_file
                            with open(src_file, 'r', encoding='utf-8') as read_f,
                                    open(dst_file, 'w', encoding='utf-8') as write_f:
                                for line in read_f:
                                    if line.startswith(uname_of_db):
                                        l = line.strip(' ').split(',')
                                        l[-1] = str(balance_of_db)
                                        line = ','.join(l) + ' '

                                   
write_f.write(line)
                            os.remove(src_file)
                            os.rename(dst_file, src_file)

                            print('购买成功,请耐心等待发货')

                        shopping_cart = {}
                        current_userinfo = []
                        tag = False


                else
:
                    print('输入非法')

    else:
        print('非法操作')

 

原文地址:https://www.cnblogs.com/maojiang/p/8688963.html