四 声明式编程练习题

1、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写
names=['egon','alex_sb','wupeiqi','yuanhao']
a=[]
for i in names:
a.append(i.upper())
print(a)


2、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度
print([ i for i in names if 'sb'not in i])

3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
with open('a.txt','rt',encoding='utf-8')as f:
print(max(len(line)for line in f))


4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
with open('a.txt','rt',encoding='utf-8')as f:
print(sum(len(line) for line in f))
猜测:重复sum求和为0 可能是因为迭代对象没了

5、思考题

with open('a.txt') as f:
g=(len(line) for line in f)
print(sum(g)) #为何报错?
回答: 因为print 缩进错误

6、文件shopping.txt内容如下

mac,20000,3
lenovo,3000,10
tesla,1000000,10
chicken,200,1
求总共花了多少钱?

打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]

求单价大于10000的商品信息,格式同上
with open('日志文件.txt',encoding='utf-8') as f:
info=[line.split() for line in f]
money=sum(float(price)*int(count) for price,count in info)
print(money)


with open('日志文件.txt',encoding='utf-8') as f:
goods=[{
'name': line.split()[0],
'price': float(line.split()[1]),
'count': int(line.split()[2]),
} for line in f]
print(goods)


with open('日志文件.txt',encoding='utf-8') as f:
goods=[{
'name': line.split()[0],
'price': float(line.split()[1]),
'count': int(line.split()[2]),
} for line in f if float(line.split()[1]) > 10000]
print(goods)
#
'''



# 二分法
nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101]  # 从小到大排列的数字列表
def chazhao(shuzi,nums):
if len(nums) == 0:
print(shuzi,'没找到!')
return
zhong=len(nums)//2
if shuzi > nums[zhong]:
qq=nums[zhong+1:]
chazhao(shuzi,qq)
elif shuzi< nums[zhong]:
qq=nums[:zhong]
chazhao(shuzi,qq)
else:print(shuzi,'找到了')

chazhao(57,nums)
 
posted on 2018-10-10 21:08  小轩灬  阅读(138)  评论(0编辑  收藏  举报