认识算法的重要性

  1. - 遇到问题? 学完语言,接到需求,没思路?
  2. 1.学会了语言,能读懂别人的代码, 但是自己没解决问题的能力,不能够把实际问题转换为代码,自己写出来.(这是只是学会一门语言的后果),不要成为语言的英雄. 最主要是能用语言解决问题.
  3. 2.计算机这东西容易忘,需要每天把自己的思维活动睡前回顾下.
  4. 3.不要直接开敲代码,先抛开语言,用大脑想想人应该去怎么解决这个问题,想清楚解决办法后(伪代码), 再开始写代码
  5. 4.不要以学会python为最终目的,要学会用python解决实际问题作为最终目的.(先想清楚处理过程,在翻译成py语言)
  6. - 关于逻辑思维培养
  7. 严蔚敏的数据结构(排序 查找 列表 堆栈 队列 树的简单部分)
  8. - 什么是算法?(处理问题的思路)
  9. 1+1 也是算法
  10. 当来一个问题时候,开发首先想用什么办法来一步步处理解决这个业务问题,最后落实到代码.可见写代码脑海中先得得到解决问题的办法,然后用编程语言来描述出来.
  11. 算法是描述解决问题的方法。
  12. 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
  13. - 核心课程介绍
  14. 硬件: 组成原理
  15. 软件: 数据结构与算法核心课程 + (深化)操作系统
  16. 严蔚敏的数据结构(排序 查找 列表 堆栈 队列 树的简单部分)

软件专业知识骨架

  1. - 基本素质
  2. 算法
  3. 冒泡 快排
  4. 数据结构
  5. list dict(hash表) 链表
  6. 网络
  7. tcp三次握手 http常见状态 header
  8. 操作系统
  9. --
  10. == 具体语言
  11. 复杂度: 为了评定算法之间对比的优劣. 执行完算法所用的次数. 数组有n项,复杂度就是n*n
  12. 时间复杂度(执行完算法所需的时间,一般说的复杂度是指这个)
  13. 空间复杂度
  14. 冒泡排序
  15. 复杂度O(n^2)
  16. 稳定性: 冒泡是稳定的

语言对比

语言 优点 缺点
C/C++ 性能,游戏,底层 代码量大,上手难
java 明星级语言,比较成熟 不太好上手,代码量大,开发速度慢
.net/c# x 过时了
shell 简单的系统维护 不能算是一门编程语言,shell太简单,不能完成复杂的功能
php 易学,脚本 主要适合web
python 易学,脚本,功能强大 运行速度比java慢
javascript 易学,前端 前端脚本语言

学代码正确姿势

千万不要一开始就纠结一个模块或语法的细节方方面面,力求搞透. 一定要先会用常用几个简单功能,解决当前问题,达到一定境界后期逐步补充

1.找一些简单教程,如10min学会python等(不要太多) 2.动手敲代码(比第1步重要太多, 第2步没做,第1步做的再多也没用)

编码习惯

  • 嵌套不要超过三层(缩进)
  • 一条语句不要太长
  • 有and需要()
  • 超过2个break,要优化

判断是否是闰年(能同时被100 400 或同时被100 4整除)

  1. - 优化前
  2. while True:
  3. num = raw_input("num > ")
  4. if (int(num)%100 == 0 and int(num)%400==0):
  5. print num
  6. break
  7. # elif int(num)%100 == 0 and int(num)%4==0:
  8. elif int(num)%100 == 0:
  9. print num
  10. break
  11. else:
  12. print '不是闰年!!!'
  13. - 优化后(1,前面层层都break,后面没必要写else关键字 2,多条break需要考虑重复优化问题 3,能被100整除的肯定能被4整除)
  14. while True:
  15. num = raw_input("num > ")
  16. if (int(num)%100 == 0 and int(num)%400==0) or (int(num)%100 == 0) :
  17. print num
  18. break
  19. print '不是闰年!!!'

学习python的目标

学py暂时目标

  • python的基础,掌握基本的编程思想,具体两个任务

    • access_log日式处理
    • url,ip,访问状态维度,统计访问次数
    • 排序,打印出访问次数最多的前10
  • 简单的cmdb
    • 基于flask
    • 数据库mysql
    • 前端jquery+bootstrap
    • 简单粗暴的完成最简单的增删改查

远程目标

  • 1,webqq

  • 2,bbs-抽屉

  • 3,ftp

  • 4.cmdb

  • 5.商城

  • 6.新浪微博

  • 通讯录

  • 信用卡

  • 打飞机

py语言常见数据结构

  1. - py语言
  2. 变量
  3. print 'maotai'
  4. x = 23
  5. print x
  6. 语句
  7. python数据结构:
  8. 数字
  9. 四则运算
  10. 整除:默认去尾,5%2
  11. 取余
  12. table隔行换色
  13. 负载均衡
  14. 字符串
  15. 单双引号
  16. 字符串里有单/双引号:转义 'i\'m maotai'
  17. 三个引号 里面字符串原样输出
  18. 字符串相加(拼接) 乘法: 'maotai'*20
  19. 字符串格式化
  20. + 不适用于不同类型的,可读性差(sql语句,url请求拼接)
  21. %s 适用于大多数
  22. 布尔
  23. true false
  24. and or ! (if判断)
  25. list
  26. dict
  27. tuple
  28. 逻辑控制
  29. if语句
  30. 循环

if for常见应用

  1. - 登录小程序
  2. import getpass
  3. username=raw_input('username: ')
  4. password=getpass.getpass('password: ')
  5. if username=='bob' and password=='123456':
  6. print 'login suceess!!!'
  7. else:
  8. print 'failed'
  9. - 打印成绩
  10. grade=int(raw_input('input your grade> '))
  11. if grade>=90:
  12. print '优秀'
  13. elif grade>=80:
  14. print '好'
  15. elif grade>=70:
  16. print '良'
  17. elif grade>=60:
  18. print '及格'
  19. else:
  20. print '你要努力了!'
  21. - 猜字游戏
  22. import random
  23. ch_list = {
  24. 0: '石头',
  25. 1: '剪刀',
  26. 2: '布'
  27. }
  28. # menu
  29. op = '''
  30. 0, 选石头
  31. 1, 选剪刀
  32. 2, 选布
  33. 请选一项(0/1/2) > '''
  34. pc_op = random.choice([0, 1, 2])
  35. # people_op = int(raw_input(op))
  36. while True:
  37. people_op = int(raw_input(op))
  38. if people_op in [0, 1, 2]:
  39. break
  40. # print result
  41. print '''
  42. 你选的是: %s
  43. 电脑选的是: %s
  44. ''' % (ch_list.get(people_op), ch_list.get(pc_op))
  45. win_list = [[1, 0], [2, 0], [2, 1]]
  46. if [people_op, pc_op] in win_list:
  47. print '恭喜你,你赢了.'
  48. elif people_op == pc_op:
  49. print '平局!'
  50. else:
  51. print '电脑赢了!'

列表知识点

  1. list:
  2. - in len max min del
  3. - 切片
  4. - append count extend index insert pop remove reverse

列表 字符串常见

  1. - len in的实现
  2. - 遍历列表
  3. for x in list
  4. print x
  5. for i, element in enumerate(list): # for循环将列表中的元素及他们的下标
  6. print i,element
  7. - 字符串--列表转换
  8. join split
  9. ".".join(["192","168","1","10"])
  10. '192.168.1.10'.split('.')
  11. - 字符串拼接
  12. fields = ["id","name","age","email"] # 将要输出列定义到列表中,每次变动只需要修改列表就行
  13. sql = "select %s from user" % ",".join(fields)
  14. - todolist
  15. todo_list = []
  16. while True:
  17. action = raw_input("add|do > ")
  18. if action == 'add':
  19. oper = raw_input("oper > ")
  20. todo_list.append(oper)
  21. elif action == "do":
  22. if len(todo_list):
  23. print todo_list.pop(0)
  24. else:
  25. print "nothing"
  26. else:
  27. break

字典常用应用

  1. - 栗子1: 字典程序调用设计: 实现switch
  2. 功能: 程序运行打印菜单,依据不同选项菜单实现不同功能-类似switch语句
  3. 知识点: 1. d.get(k), k则取出k,无k则返回none. 2. d.get(k,'hi') k则取出k对应的v,无k则输出hi.
  4. def menu():
  5. print '''
  6. 0: exit
  7. 1: add
  8. 2: del
  9. 3: update
  10. 4: search
  11. '''
  12. op = raw_input("pls input your op > ")
  13. return op
  14. def txl_add():
  15. print "adding"
  16. def txl_exit():
  17. print 'good bye'
  18. import os
  19. os._exit(0)
  20. d = {
  21. 0: txl_exit,
  22. 1: txl_add,
  23. }
  24. while True:
  25. op = menu()
  26. d.get(op,txl_exit)()
  27. - 字典传值-格式化字符串
  28. stu={
  29. 'name':'maotai',
  30. 'age':22
  31. }
  32. print "%(name)s %(age)d"%(stu)
  33. - 10以内的加法训练器, 每次生成一个10以内加法,让你计算结果
  34. from operator import add, sub
  35. from random import choice, randint
  36. ops = {'+': add, '-': sub}
  37. def doprob():
  38. '''生成算数题目'''
  39. op = choice("+-")
  40. nums = [randint(1, 10) for i in range(2)]
  41. nums.sort(reverse=True)
  42. ans = ops.get(op)(*nums)
  43. pr = '%d %s %d= ' % (nums[0], op, nums[1])
  44. num = 0
  45. while True:
  46. try:
  47. if (int(input(pr))) == ans:
  48. print("correct!")
  49. break
  50. if num == 2:
  51. print("the ans is %s %d" % (pr, ans))
  52. else:
  53. print("increct,try again!")
  54. num += 1
  55. except(KeyboardInterrupt, EOFError, ValueError):
  56. print("invalid input ,try again!")
  57. def main():
  58. while True:
  59. doprob()
  60. try:
  61. opt = input("Again?[y]").lower()
  62. if opt and opt[0] == "n":
  63. break
  64. except(KeyboardInterrupt, EOFError):
  65. break
  66. if __name__ == '__main__':
  67. main()

体验python能干嘛

求两个数的平均值,如果输入为空,则继续输

  1. x = raw_input('x: num > ')
  2. while not x:
  3. x = raw_input("x: num !!!! > ")
  4. y = raw_input('y: num > ')
  5. while not y:
  6. y = raw_input("y: num !!!! > ")
  7. print (int(x) + int(y)) / 2.0

用户输入字符,如果输入为0,打印所有数字和,后退出

  1. total = 0
  2. n = raw_input("input a num > ")
  3. # 确保n不等于0,才执行
  4. while n != "0":
  5. total = total + int(n)
  6. n = raw_input("input a num >!!!!! ")
  7. print total

不停输入数字,当遇到0时,输入平均数,并退出

  1. count = 1
  2. total = 0
  3. num = input("input a num > ")
  4. while num != 0:
  5. count += 1
  6. total += num
  7. num = input("input a num >!!!!!!!!! ")
  8. print count
  9. print total*1.0 / (count - 1)

存10000块钱,年利率3.25%,多少年后能翻一番

  1. year = 0
  2. total_money = 10000
  3. while total_money <= 20000:
  4. year += 1
  5. total_money += total_money * 0.0325
  6. print "year is %s; total_money is %s" % (year, total_money)
  7. print "--" * 10
  8. print year

统计js关键字在列表中出现的次数

  1. alist = ['js', 'C', 'java', 'js', 'py']
  2. count = 0
  3. for i in alist:
  4. if i == "js":
  5. count += 1
  6. print count

求列表中最大值

  1. alist = [1,9999, 10, 100, 9, 1000]
  2. # 假设法
  3. max_num = 0
  4. for i in alist:
  5. if i > max_num:
  6. max_num = i
  7. print max_num
  8. # 思路2: 先排序,后取出
  9. alist = ['C','js', 'C', 'java', 'js', 'py']
  10. for i in alist:
  11. print i
  12. if i == "js":
  13. continue

判断是否是闰年(能同时被100 400)

  1. #优化前
  2. # while True:
  3. # num = raw_input("num > ")
  4. # if (int(num)%100 == 0 and int(num)%400==0):
  5. # print num
  6. # break
  7. # # elif int(num)%100 == 0 and int(num)%4==0:
  8. # elif int(num)%100 == 0:
  9. # print num
  10. # break
  11. # else:
  12. # print '不是闰年!!!'
  13. # 优化后
  14. while True:
  15. num = raw_input("num > ")
  16. if (int(num)%100 == 0 and int(num)%400==0) or (int(num)%100 == 0) :
  17. print num
  18. break
  19. print '不是闰年!!!'

(数据统计)统计列表中每项出现的次数

dict 增加 修改

数据统计的思路都差不多

  1. 首先思路是: 初始化一个字典,然后依次遍历初始化字典的value(个数)
  2. d = {}
  3. arr = ['js', 'py', 'django', 'django', 'py', 'py']
  4. # for i in xk:
  5. # if not d.has_key(i):
  6. # d[i]=0
  7. # for i in xk:
  8. # if d.has_key(i):
  9. # d[i]+=1
  10. ## 数据统计的一个
  11. for i in arr:
  12. if i in d:
  13. d[i] += 1
  14. else:
  15. d[i] = 0
  16. print d

求列表中top 2 num

  • 思路1: 两次循环,分别找出最大的,第二次循环max_num != sec_num
  • 思路2: 两次循环,分别记录最大值位置点, 第二次循环 max_index != sec_index
  • 思路3: |__|_______ 落在期间,num > max_num时,sec_num=max_num, max_num=num
  1. arr = [1, 2, 3, 2, 12, 3, 1, 3, 21, 2, 2, 3, 4111, 22, 3333, 444, 111, 4, 5, 777, 65555, 65555, 45, 33, 45]
  2. # 思路1: 直接比值(存在缺陷: 相同的2个最大值时)
  3. '''
  4. max_num = 0
  5. sec_num = 0
  6. for i in arr:
  7. if i > max_num:
  8. max_num = i
  9. print max_num
  10. for i in arr:
  11. if i > sec_num and i != max_num:
  12. sec_num = i
  13. print sec_num
  14. '''
  15. # 思路2: 找出最大的,记下它的位置,再找出次大的(不能和最大的为止一致)
  16. '''
  17. max_num = 0
  18. max_index = 0
  19. sec_num = 0
  20. i = 0
  21. for num in arr:
  22. if num > max_num:
  23. max_num = num
  24. max_index = i
  25. i += 1
  26. print max_index, max_num
  27. #####################
  28. j = 0
  29. sec_index = 0
  30. for num in arr:
  31. j += 1
  32. if num > sec_num:
  33. sec_num = num
  34. sec_index = i
  35. print sec_index,sec_num
  36. '''
  37. # 思路3: 定义2个变量, 看num落在哪个范围
  38. # ______|________|_______
  39. max_num = 0
  40. sec_num = 0
  41. for num in arr:
  42. if num < sec_num:
  43. pass
  44. elif sec_num < num and num < max_num:
  45. sec_num = num
  46. elif num >= max_num:
  47. sec_num = max_num
  48. max_num = num
  49. print max_num, sec_num

python异常小结

py异常应用

  1. IndentationError 缩进错误
  2. NameError 调用未定义的
  3. ValueError 转换错误
  4. TypeError 函数没传参数
  5. AttributeError 调用类中不存在的属性
  6. RuntimeError: 递归栈溢出,maximum recursion depth exceeded in comparison
  7. StopIteration 生成器生成的列表,next到了最后一个以外.
  8. g = (x*x for x in range(3))
  9. # for n in g:
  10. # print(n)
  11. print(next(g))
  12. print(next(g))
  13. print(next(g))
  14. print(next(g))

[py]软件编程知识骨架+py常见数据结构的更多相关文章

  1. python解无忧公主的数学时间编程题001.py

    python解无忧公主的数学时间编程题001.py """ python解无忧公主的数学时间编程题001.py http://mp.weixin.qq.com/s?__b ...

  2. 8种常见数据结构及其Javascript实现

    摘要: 面试常问的知识点啊... 原文:常见数据结构和Javascript实现总结 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 做前端的同学不少都是自学成才或者半路出家, ...

  3. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  4. PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

    一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...

  5. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...

  6. 数据结构和算法(Golang实现)(11)常见数据结构-前言

    常见数据结构及算法 数据结构主要用来组织数据,也作为数据的容器,载体. 各种各样的算法,都需要使用一定的数据结构来组织数据. 常见的典型数据结构有: 链表 栈和队列 树 图 上述可以延伸出各种各样的术 ...

  7. 数据结构和算法(Golang实现)(12)常见数据结构-链表

    链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...

  8. 常见数据结构之JavaScript实现

    常见数据结构之JavaScript实现 随着前端技术的不断发展,投入到前端开发的人数也越来越多,招聘的前端职位也越来越火,大有前几年iOS开发那阵热潮.早两年,前端找工作很少问到关于数据结构和算法的, ...

  9. IM软件业务知识—导航

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

随机推荐

  1. Scala中的协变,逆变,上界,下界等

    Scala中的协变,逆变,上界,下界等 目录 [−] Java中的协变和逆变 Scala的协变 Scala的逆变 下界lower bounds 上界upper bounds 综合协变,逆变,上界,下界 ...

  2. windows 清理利器

    https://www.ccleaner.com/ 2. https://www.chuyu.me/zh-Hans/index.html

  3. 7.11js的总结

    <!DOCTYPE html> <html> <head> <title>js的内置全局函数</title> <script type ...

  4. SQL Server2012远程访问设置

    http://jingyan.baidu.com/article/a681b0de3bdb7b3b19434667.html?qq-pf-to=pcqq.group 1.打开SQL server201 ...

  5. 如何从视频中分离出音乐,和对音乐做分割,合并的处理(瑞典音乐家-新八宝盒.mp3.rar下载)

    点击下载:瑞典音乐家-新八宝盒.mp3.rar 1.工具 Total Video Converter 3.71 视频处理(安装软件,有绿色版的) MP3剪切器 MP3剪切器(小工具) Mp3mateP ...

  6. 问题:虚拟环境名字相同遇到bug,please specify a different sdk name?

    1.please specify a different sdk name? 这个问题出现的原因是因为PyCharm中存在相同名字的虚拟环境变量. 本人的出错原因是,一直使用PyCharm的默认设置来 ...

  7. PHP进阶-网络编程基础概念

    以太网协议图: 以太网协议: 发送header(发送至mac地址,接收者mac地址).data到网线中所有连接的计算机,然后每个机子接收数据包的时候都是用以太网协议的, 然后解析header头,看是否 ...

  8. [性能优化] perf 高级用法:完整记录程序性能指标,并按照时间段对程序进行有针对性的性能分析

    如题: 假设你已经熟悉了基本用法,知道perf是干嘛的,以及会用 perf top [性能优化] perf 背景:目标程序在运行的某时间段内会出现性能下降,需要了解这个时间内,程序发生了什么. 方法: ...

  9. [skill][telnet] 用telnet获取一个网页

    一直也搞不懂, telnet到底是干嘛用的. 然而, 它可以得到一个网页. /home/tong/Data/performance_test [tong@T7] [:] > telnet nyu ...

  10. iOS 修改TabBar的item间距

    @interface HPTabBarController ()<UITabBarControllerDelegate>//继承自UITabBarController @property ...