1、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中的名字全部变大写
2、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中以sb结尾的名字过滤掉,然后保存剩下的名字长度
3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
5、思考题
with open(‘a.txt‘) as f:
g=(len(line) for line in f)
print(sum(g)) #为何报错?
6、文件shopping.txt内容如下
mac,20000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1
求总共花了多少钱?
打印出所有商品的信息,格式为[{‘name‘:‘xxx‘,‘price‘:333,‘count‘:3},...]
求单价大于10000的商品信息,格式同上
四 二分法
想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模
#1、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中的名字全部变大写
names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]
new_names=[i.upper() for i in names]
print(new_names)
# 2、将names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]中以sb结尾的名字过滤掉,然后保存剩下的名字长度
new_name=[]
names=[‘egon‘,‘alex_sb‘,‘wupeiqi‘,‘yuanhao‘]
# for i in names:
# if not i.endswith(‘sb‘):
# new_name.append(len(i))
# print(new_name)
names=[len(i)for i in names if not i.endswith(‘sb‘)]
print(names)
# 3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
with open(‘bb.txt‘,encoding=‘utf-8‘)as f:
# for line in f:
# max(line)
# print(line)
print(max(len(line) for line in f ))
# 4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
# summ=0
with open(‘aa.txt‘,encoding=‘utf-8‘)as f:
f.tell()
print(f.tell())
# for line in f:
# summ+=len(line)
# print(summ)
print(sum(len(line) for line in f))
print(sum(len(line) for line in f))
print(sum(len(line) for line in f))
f.tell()
print(f.tell())
#for line in f 行读文件,指针从文件起始位置偏移至文件末尾
#第一次之后的n次sum求和得到的结果为0
# 5、思考题
# with open(‘a.txt‘) as f:
# g=(len(line) for line in f)
# print(sum(g)) #为何报错?
with open(‘aa.txt‘) as f:
g=(len(line) for line in f).__iter__()
res1=g.__next__()
res2=g.__next__()
print(res1)
print(res2)
#g在python3程序中是指向文件每行长度的内存地址 是一个可迭代对象需要用.__iter__()转换称可迭代
# 器对象后再进行取值相加
# 6、文件shopping.txt内容如下
# mac,20000,3
# lenovo,3000,10
# tesla,1000000,10
# chicken,200,1
# 求总共花了多少钱?
# 打印出所有商品的信息,格式为[{‘name‘:‘xxx‘,‘price‘:333,‘count‘:3},...]
# 求单价大于10000的商品信息,格式同上
pay_shop=[]
now=[]
summ=0
with open(‘shopping.txt‘,encoding=‘utf-8‘)as f:
for line in f:
pic=line.strip(‘\n‘)
if pic==‘\n‘:
continue
data=pic.split(‘,‘)
pay={‘name‘:data[0],
‘price‘:data[1],
‘count‘:data[2]
}
summ+=int(data[1])*int(data[2])
pay_shop.append(pay)
if int(pay[‘price‘])>10000:
now.append(pay)
print(‘一共消费%s元‘%summ)
print(‘打印购物清单:\n%s‘%pay_shop)
print(‘金额大于一万的商品信息\n%s‘%now)
# 四 二分法
# 想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模
nums=[1,3,6,9,14,56,88,99]
def run(i,nums):
if len(nums)==0:
print(‘该数不在列表‘)
return
data=len(nums)//2
if i==nums[data]:
print(‘find it %s‘%data)
return data
if i>nums[data]:
nums=nums[data+1:]
return run(i,nums)
if i<nums[data]:
nums=nums[:data]
run(i,nums)
print(run(14,nums))
根据更改符号进行二分,在面对庞大数据时更快捷有效寻到数字:
l=[1,2,10,30,33,99,101,200,301,402]
def run(i,l,start=0,stop=len(l)):
if start<=stop:
data=start+(stop-start)//2
if i > l[data]:
start=data+1
if i<l[data]:
stop=data-1
if i==l[data]:
print(‘find it %s‘%data)
return
run(i,l,start,stop)
else:
print(‘not find it!‘)
return
run(99,l)
原文:https://www.cnblogs.com/yanhui1995/p/9768671.html