2018.10.10python homework

1、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写

names=['egon','alex_sb','wupeiqi','yuanhao']
new_names=[name.upper() for name in names]
print(new_names)

2、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字

长度。

names=['egon','alex_sb','wupeiqi','yuanhao']
res=filter(lambda name:not name.endswith('sb'),names)
print(list(res))

3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)

with open('a.txt','rt',encoding='utf-8')as f:
   res=max(f,key=lambda line:len(line))
   print(len(res))

4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)

with open('a.txt','rt',encoding='utf-8')as f:
   res=sum(len(line) for line in f)
   print(res)

5、思考题

with open('a.txt') as f:
   g=(len(line) for line in f)
print(sum(g)) #为何报错?
f= open('a.txt')
g=(len(line) for line in f)
f.close()
print(sum(g))

#这两个报错是一致的,所以可能是后面再求和的时候文件已经关闭了

6、文件shopping.txt内容如下:

mac,20000,3

lenovo,3000,10

tesla,1000000,10

chicken,200,1

求总共花了多少钱?

#方式一:

with open('shopping.txt')as f:
   money=0
   for msg in f:
       res=msg.strip(' ').split(',')
       sums=int(res[1])*int(res[2])
       money+=sums
print(money)

方式二:

with open('shopping.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)

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

#方式一:

products=[]
with open('shopping.txt')as f:
   for msg in f:
       res = msg.strip(' ').split(',')
       res_dict={'name':res[0],'price':res[1],'count':res[2]}
       products.append(res_dict)
print(products)

#方式二:

with open('shopping.txt')as f:
   info=[{'name':line.strip(' ').split(',')[0],'price':line.strip(' ').split(',')[1],'count':line.strip(' ').split(',')[2]} for line in f]
print(info)

求单价大于10000的商品信息,格式同上

products=[]
with open('shopping.txt')as f:
   for msg in f:
       res = msg.strip(' ').split(',')
       res_dict={'name':res[0],'price':res[1],'count':res[2]}
       if int(res_dict['price'])>10000:
           products.append(res_dict)
print(products)

 

7.想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模

nums=[1,2,10,30,33,99,101,200,301,311,402,403,500,900,1000] #从小到大排列的数字列表
def search_num(num,nums):
   if len(nums) == 0:
       print('num not exist')
       return
   mid_index=len(nums)//2
   if num > nums[mid_index]:
       nums=nums[mid_index+1:]
       search_num(num,nums)
   elif num < nums[mid_index]:
       nums=nums[:mid_index]
       search_num(num,nums)
   else:
       print('got it')
search_num(44,nums)
l = [1, 2, 10, 30, 33, 99, 101, 200, 301, 402]
def search_index(num, l, start=0, stop=len(l) - 1):
  if start <= stop:
      mid_index = start + (stop - start) // 2
      if num > l[mid_index]:
          start = mid_index + 1

      elif num < l[mid_index]:
          stop = mid_index - 1
      else:
          print('got it', mid_index)
          return
      search_index(num, l, start, stop)
  else:
      print('num not exist')
      return


search_index(33, l)

 

原文地址:https://www.cnblogs.com/hello-yuanjing/p/9768803.html