python小练习9(这些简单的题目你都会吗)

基本数据类型:

1: info = ‘abc’

info[2] = ‘d’

结果是什么,为什么会报错呢?

: TypeError: ‘str’ object does not support item assignment

字符串是不可变数据类型

2: 如果要把上面的字符串info里面的c替换成d,要怎么操作呢?

: (1). 转换为 list

info = 'abc'

a = list(info)

a[2] = 'd'

info = ' '.join(a)

(2). 使用字符串的 replace 函数

info = 'abc'

new_info = info.replace('c', 'd')

print(new_info)

(3). 使用序列切片方式

info = 'abcef'

new_info = info[:2] + 'd' + info[3:]

print(new_info)

3: 下面2个变量

a = ‘1’

b = 2

print a + b 的结果是什么,为什么会出现这个结果,如果希望结果是3,要怎么操作?

: TypeError: must be str, not int 不同类型不能相加

print(int(a) + b)

4: 字符串: a = ‘abcd’, 用2个方法取出字母d

: (1). a[3]

(2). a[-1]

(3). b = list(a)

b.pop()

5: a = ‘jay’, b = ‘python’

用字符串拼接的方法输出:my name is jay,i love python.

: (1).

a = 'jay'

b = 'python'

s = 'my name is %s, i love %s' % (a, b)

print s

(2).


a = 'jay'

b = 'python'

s = 'my name is {}, i love {}'.format(a, b)

print s

6: a = ‘pyer’ b = ‘apple’

用字典和format方法实现:

my name is pyer, i love apple.

答: (1). 字典方法:

a = 'pyer'

b = 'apple'

s = 'my name is {name}, i love {fruit}'.format(name='pyer', fruit='apple')

print s

(2). format 方法:

a = 'pyer'

b = 'apple'

s = 'my name is {0}, i love {1}'.format(a, b)

print s

7: 打开文件info.txt,并且写入500这个数字。

答:

a = open('info.txt', 'w')

a.write('500')

a.close()

8: 已知字符串 s = “i,am,lilei”,请用两种办法取出之间的“am”字符。

答: (1).

s[2:4]

(2).


a = s.split(',')[1]

print a

9: 在python中,如何修改字符串?

答: (1). 使用字符串的replace函数

(2). 将字符串转换成列表后修改值,然后用join组成新字符串

(3). 使用序列切片方式

使用实例见上第二题

10: bool(“2012” == 2012) 的结果是什么。

答: False

分析:判断对象的数据类型,尽管看起来数值是一样的,但是他们的类型不同,

一个是字符串,一个是 数字

11: 已知一个文件 test.txt,内容如下:

2012来了。

2012不是世界末日。

2012欢乐多。

1.请输出其内容。

2.请计算该文本的原始长度。

3.请去除该文本的换行。

4.请替换其中的字符”2012”为”2013”。

5.请取出最中间的长度为5的子串。

6.请取出最后2个字符。

7.请从字符串的最初开始,截断该字符串,使其长度为11.

8.请将{4}中的字符串保存为test1.py文本.

答:

f = open('test.txt', 'rb')

content = f.read().decode('utf-8') # 将 bytes 转换为 str

(1). print(content)

(2). print(len(content))

(3). print(content.replace('', ''))

(4). print(content.replace('2012', '2013'))

(5). a = int(len(content)/2)

     s = content[a : a+5]

     print s

(6). print(content[-2:])

(7). print(content[:11])

(8). rinfo = content.replace('2012', '2013')

     f = open('test2.py', 'w')

     f.write(rinfo)

     f.close()

12: 请用代码的形式描述python的引用机制。

答:

import sys

>>> cinfo = '1234'

>>> print id(cinfo)

6909920

>>> print sys.getrefcount('1234')

3

>>> binfo = '1234'

>>> print id(binfo)

6909920

>>> print sys.getrefcount('1234')

4

>>> dinfo = '1234'

>>> print id(dinfo)

6909920

>>> print sys.getrefcount('1234')

5

13: 已知如下代码


a = "中文编程"

b = a

c = a

a = "python编程"

b = u'%s' %a

d = "中文编程"

e = a

c = b

b2 = a.replace("中","中")

1.请给出str对象”中文编程”的引用计数

2.请给出str对象”python编程”的引用计数

答:

import sys

a = "中文编程" ## 引用计数开始是2,然后a变量引用了字符串("中文编程")对象 2+1=3

print ("a:%s" % id(a)) ## a:24940176

b = a ## 引用字符串("中文编程")3+1=4

print ("b:%s" % id(b)) ## b:24940176

c = a ## 引用字符串("中文编程")4+1=5

print ("c:%s" % id(c)) ## c:24940176

print (sys.getrefcount('中文编程')) ## 输出结果是5

a = "python编程" ## 引用字符串("中文编程")5-1=4

print ("a:%s" % id(a)) ### a:36114784 a引用另外一个字符串("python编程")对象 2+1=3

b = '%s' % a ## 引用字符串("中文编程")4-1=3 ### b引用("python编程") 3+1=4

print ("b:%s" % id(b)) ### c:36114784

print (sys.getrefcount('中文编程')) ##输出结果是3

print (sys.getrefcount('python编程')) ###输出结果是4

d = "中文编程" ## 新建一个变量,引用字符串("中文编程") 3+1=4

print ("d:%s" % id(d)) ## d:24940176

e = a ### 引用字符串("python编程")4+1=5

print ("e:%s" % id(e)) ### e:36114784

c = b ## c引用另外一个字符串("python编程")对象,4-1=3 5+1=6

print ("c:%s" % id(c)) ## c:36114784

print (sys.getrefcount('中文编程')) ## 输出结果是3

print(a) ### 输出结果是: python编程

b2 = a.replace("中","中") ### 引用字符串("python编程")6+1=7

print(b2) ### 输出结果是: python编程

print ("b2:%s" % id(b2)) ### b2:36114784

print (sys.getrefcount('中文编程')) ##输出结果是3

print (sys.getrefcount('python编程')) ##输出结果是7

14: 七.已知如下变量

a = “字符串拼接1”

b = “字符串拼接2”

1.请用四种以上的方式将a与b拼接成字符串c。并指出每一种方法的优劣。

2.请将a与b拼接成字符串c,并用逗号分隔。

3.请计算出新拼接出来的字符串长度,并取出其中的第七个字符。

: (1).

c=a + b # 不适合大量字符串拼接

c = "%s%s" % (a, b) # 受顺序限制

c = "{a}{b}".format(a=a, b=b) # 未受顺序限制

c = "".join([a, b]) # 只要申请一次内存

(2).

c=a + ',' + b

c = "%s,%s" % (a, b)

c = "{a},{b}".format(a=a, b=b)

c = ",".join([a, b])

(3).

print len(c)

print c[6]

15: 请阅读string模块,并且,根据string模块的内置方法输出如下几题的答案。

1.包含0-9的数字。

2.所有小写字母。

3.所有标点符号。

4.所有大写字母和小写字母。

5.请使用你认为最好的办法将{1}-{4}点中的字符串拼接成一个字符串。

答:

import string

(1). a = string.digits

(2). b = string.ascii_lowercase

(3). c = string.punctuation

(4). d = string.ascii_letters

(5). s1 = ''.join([a, b, c, d])

     s2 = '%s%s%s%s' % (a, b, c, d)

     s3 = a + b + c + d

     s4 = '{}{}{}{}'.format(a, b, c, d)

16: 已知字符串 a = “i,am,a,boy,in,china”

1.假设boy和china是随时可能变换的,例boy可能改成girl或者gay,而china可能会改成别的国家,你会如何将上面的字符串,变为可配置的。

2.请使用2种办法取出其间的字符”boy”和”china”。

3.请找出第一个”i”出现的位置。

4.请找出”china”中的”i”字符在字符串a中的位置。

5.请计算该字符串一共有几个逗号。

:

 a = "i,am,a,boy,in,china"

(1). ac = "i,am,a,%(sex)s,in,%(country)s" % {'sex': 'girl', 'country': 'china'}

bc = "i,am,a,{sex},in,{country}".format(sex='girl', country='china')

(2). 方法一:

print(a[7:10])

print(a[-5:])

方法二:

cinfo = a.split(',')

print(cinfo[3])

print(cinfo[-1])

(3).

 print(a.find('i'))

print(a.index('i'))

(4).

print(a.find('i', a.find('china')))

print(a.rfind('i'))

(5). print(a.count(','))

17: 请将模块string的帮助文档保存为一个文件。

答:

import sys

import string

f = open('string_help.log', 'w')

sys.stdout = f

help(string)

f.close()

基本数据结构—列表 元组 集合 字典

1: 下面列表:

a = [1,2,3,4,5,333,11,44]

输出下面的结果:

[4,5,333]

答:

print a[3:6]

2: 有下面2个列表

a = [1,2,3]

b = [4,5,6]

用2个方法输出下面结果:

[1,2,3,4,5,6]

答: (1).

for i in b:

a.append(i)

print(a)

(2).

a.extend(b)
print a

(3). print a + b

3: 有下面2个列表:

a = [1,99,33,44,55,22]
b = [11,33,54]
输出结果:

1:[1,2,99,33,44,55,22,(11,33,54)]

2: [1,2,99,33,101,44,55,22]

答: (1).

a = [1,99,33,44,55,22]

b = (11, 33, 54)

a.insert(1, 2)

a.append(b)
print a

(2).

a = [1,99,33,44,55,22]

a.insert(1, 2)

a.insert(4, 101)

print a

4: 用列表推导式生成100内的大于20的偶数

答:

[x for x in range(21, 101) if x%2==0]

5: 已知:元组 a = (1,2,3) 利用list方法,输出下面的结果:(1,2,4)

答:

a = (1, 2, 3)

b = list(a)

b[-1] = 4

a = tuple(b)
print a

6: 利用列表推导完成下面习题:

1 输出结果:[1 love python,2 love python,3 love python,…. 10 love python]

2 输出结果:[(0,0),(0,2),(2,0),(2,2)]

答: (1).

#方法一:
['%s love python' %s for s in range(1, 11)]
#方法二:
['{} love python'.format(i) for i in range(1, 11)]

(2).

[(x, y) for x in range(3) for y in range(3) if x%2==0 and y%2==0]

7: 元组;a = (1,2,3)

有2种方法输出实现下面的结果:(5,2,3),并判断2是否在元组里

答:

a = (1, 2, 3)

b = list(a)

b[0] = 5

a = tuple(b)

print a

print 2 in a

8: 集合a = set([‘a’,’b’,’c’])做下面的操作:

1 添加字符串’jay’到集合a里。

2 集合b = set([‘b’,’e’,’f’,’g’]) 用2种方法求集合a 和集合b的并集。

答: (1).

a.add('jay')

(2).

#方法一:

 a | b

#方法二:
for i in b:

a.add(i)

print a

9: 已知字典:ainfo = {‘ab’:’liming’,’ac’:20}, 完成下面的操作

1 使用2个方法,输出的结果:

ainfo = {‘ab’:’liming’,’ac’:20,’sex’:’man’,’age’:20}

2 输出结果:[‘ab’,’ac’]

3 输出结果:[‘liming’,20]

4 通过2个方法返回键名ab对应的值。

5 通过2个方法删除键名ac对应的值。

答: (1).

#方法一: 
ainfo['sex'] = 'man'
ainfo['age'] = '20'
#方法二: 
ainfo.update({'sex':'man'})
ainfo.update({'age':'20'})
print ainfo

(2).

ainfo.keys()

(3).

ainfo.values()

(4).

#方法一: 
ainfo.get('ab')

#方法二: 
list(ainfo.values())[0]

(5).

方法一: 
del ainfo['ac']

方法二:
 ainfo.pop('ac')

10: 列表a = [11,22,24,29,30,32]

1 把28插入到列表的末端

2 在元素29后面插入元素57

3 把元素11修改成6

4 删除元素32

5 对列表从小到大排序

答: (1). a.append(28)

(2). a.insert(4, 57)

(3). a[0] = 6

(4).

a.pop()
#或者
del a[-1]

(5). a.sort()

11: 列表b = [1,2,3,4,5]

1 用2种方法输出下面的结果:[1,2,3,4,5,6,7,8]

2 用列表的2种方法返回结果:[5,4]

3 判断2是否在列表里

答: (1).

#方法一: 
b.extend([6, 7, 8])

#方法二: 
c = b + [6, 7, 8]

(2).

#方法一:

b = [1,2,3,4,5]

print b[-1:-3:-1]

#方法二:

c = []

c.append(b.pop())

c.append(b.pop())

print c

(3).

if 2 in b:

    print '2 in b'

12: b = [23,45,22,44,25,66,78]

用列表解析完成下面习题:

1 生成所有奇数组成的列表

2 输出结果: [‘the content 23’,’the content 45’]

3 输出结果: [25, 47, 24, 46, 27, 68, 80]

答: (1).

[i for i in b if i%2==1]

(2).

['the content %s' % s for s in b[:2]]

(3).

[i+2 for i in b]

13: 用range方法和列表推导的方法生成列表:[11,22,33]

答: range 方法:

print range(11, 34, 11)

列表推导方法:

[m*11 for m in range(1, 4)]

14: 已知元组:a = (1,4,5,6,7)

1 判断元素4是否在元组里

2 把元素5修改成8

答: (1).

if 4 in a:

    print('4 in a')

(2).

b = list(a)

b[2] = 8

a = tuple(b)

print a

15: 已知集合:setinfo = set(‘acbdfem’)和集合finfo = set(‘sabcdef’)完成下面操作:

1 添加字符串对象’abc’到集合setinfo

2 删除集合setinfo里面的成员m

3 求2个集合的交集和并集

答: (1).

setinfo.add('abc')

(2).

setinfo.remove('m')

(3).

setinfo | finfo # 并集

setinfo & finfo # 交集

16: 用字典的方式完成下面一个小型的学生管理系统。

1 学生有下面几个属性:姓名,年龄,考试分数包括:语文,数学,英语得分。

比如定义2个同学:

姓名:李明,年龄25,考试分数:语文80,数学75,英语85

姓名:张强,年龄23,考试分数:语文75,数学82,英语78

2 给学生添加一门python课程成绩,李明60分,张强:80分

3 把张强的数学成绩由82分改成89分

4 删除李明的年龄数据

5 对张强同学的课程分数按照从低到高排序输出。

6 外部删除学生所在的城市属性,不存在返回字符串 beijing

答: (1).

student = 
{'liming':
        {'name':'李明', 'age':25, 'score':
            {'chinese':80, 'math':75, 'english':85}
        }
}

student['zhangqiang'] = 
{'name':'张强', 'age':23, 'score':
    {'chinese':75, 'math':82, 'english':78}
}

(2).

student['liming']['score']['python'] = 60

student['zhangqiang']['score']['python'] = 80

(3).

student['zhangqiang']['score']['math'] = 89

(4).

student['liming'].pop('age')

del student['zhangqiang']['age']

(5).

binfo = list(student['zhangqiang']['score'].values())

binfo.sort()

print binfo

(6).

student.pop('city', 'beijing')

基本语句与函数

1: 用while语句的方法输出数字:1到10

答:

i = 1

while i<=10:

    print i

    i += 1

2: 用for语句和continue 输出结果:1 3 5 7 9

答:

for i in range(10):

    if i%2 == 1:

        print i

    else:

        continue

3: 假设有列表 a = [1,2,3,4,5,6]

1 用for if else 的方法查找数字8是否在列表a里,如果在的话,输出字符串’find’,如果不存在的话,输出字符串’not find’

2 用while语句操作上面的列表a,输出下面结果:[2,3,4,5,6,7]

答: (1).

a = [1, 2, 3, 4, 5, 6]

for i in a:

    if i == 8:

        print 'find'

    else:

        print 'not find'

(2).

a = [1, 2, 3, 4, 5, 6]

i = 0

while i < len(a):

    a[i] = a[i] + 1

    i += 1

print a

4: 写一个函数代码,返回这3个数字中最大的一个。

a = 123

b = 345

c = 444

答: (1).

def max_num1(*args):

    return max(args)

print max_num1(123, 345, 444)

(2).

def max_num2(a, b, c):

    if a < b:

        if c < b:

            return b

        else:

            return c

    else:

        if a < c:

            return c

        else:

            return a

print(max_num2(123, 345, 444))

(3).

def max_num3(*args):

    l = []

    for i in args:

        l.append(i)

        l.sort()

    return l[-1]

print max_num3(123, 345, 444)

5: 分别写2个函数,完成下面的功能:

提示一下用到函数的:* * 和 *,猩猩是字典,星是元组

1 调用函数:ainfo(x=88,y=22,z=44) 你定义ainfo函数体里面的内容并且返回结果:[22, 44, 88]

2 调用函数:cinfo(x=88,y=22,z=44) 你定义cinfo函数体里面的内容

并且返回结果:(‘xaay’,’yaay’,’zaay’)

答: (1).

def ainfo(**kwargs):

    l = []

    for v in kwargs.values():

        l.append(v)

        l.sort()

    return l

print ainfo(x=88, y=22, z=44)

(2).

def cinfo(**kwargs):

    l = []

    for k in kwargs.keys():

        l.append('%saay' % k)

    return tuple(l)

print(cinfo(x=88, y=22, z=44))

基础篇综合

1: 已知字符串 a = “aAsmr3idd4bgs7Dlsf9eAF”,要求如下

1.1 请将a字符串的大写改为小写,小写改为大写。

print a.swapcase()

1.2 请将a字符串的数字取出,并输出成一个新的字符串。

"".join([i for i in a if i.isdigit()])

1.3 请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {‘a’:4,’b’:2}

{x:a.count(x) for x in set(a.lower())}

1.4 请去除a字符串多次出现的字母,仅留最先出现的一个。例 ‘abcabb’,经过去除后,输出 ‘abc’

l = [i for i in set(a)]

l.sort(key=list(a).index)

''.join(l)

1.5 请将a字符串反转并输出。例:’abc’的反转是’cba’

print(a[::-1])

1.6 去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符串。(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb)

a = "aAsmr3idd4bgs7Dlsf9eAF"

l = sorted(a)

upper_list = []

lower_list = []

for x in l:

    if x.isupper():

        upper_list.append(x)


    elif x.islower():

        lower_list.append(x)

    else:

        pass
print upper_list
print lower_list
for y in upper_list:

    y_lower = y.lower()

    if y_lower in lower_list:

        lower_list.insert(lower_list.index(y_lower), y)

print(''.join(lower_list))

1.7 请判断 ‘boy’里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,

则输出False.

方法一: 根据集合长度判断

a = "aAsmr3idd4bgs7Dlsf9eAF"

s = 'boy'

u = set(a)

u.update(list(s))

print(len(set(a))==len(u))

方法二:

print(set('boy').issubset(set(a)))

1.8 要求如1.7,此时的单词判断,由’boy’改为四个,分别是 ‘boy’,’girl’,’bird’,’dirty’,请判断如上这4个字符串里的每个字母,是否都出现在a字符串里。

方法一:

a = "aAsmr3idd4bgs7Dlsf9eAF"

s = ['boy','girl','bird','dirty']

u = set(a)

for i in s:

    u.update(i)

print(len(set(a))==len(u))

方法二:

a = "aAsmr3idd4bgs7Dlsf9eAF"

s = ['boy','girl','bird','dirty']

u = ''.join(s)

print(set(u).issubset(set(a)))

1.9 输出a字符串出现频率最高的字母

l = [(x, a.count(x)) for x in set(a)]

l.sort(key=lambda k:k[1], reverse=True)

print(l[0][0])

2: 在python命令行里,输入import this 后出现的文档,统计该文档中,”be” “is” “than” 出现次数。

答:

import os

m = os.popen('python -m this').read()

m = m.replace('', ' ')

l = m.split(' ')

c = [(x, l.count(x)) for x in ['be', 'is', 'than']]

print(c)

3: 一文件的字节数为 102324123499123,请计算该文件按照kb与mb计算得到的大小。

答:

size = 102324123499123

print('%s kb' % (size >> 10))

print('%s mb' % (size >> 20))

4: 已知 a = [1,2,3,6,8,9,10,14,17],请将该list转换为字符串,例如 ‘123689101417’.

答:

a = [1,2,3,6,8,9,10,14,17]

b = [str(i) for i in a]

print(''.join(b))
  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值