软件编程入门自学python (55岁自学python编程)

近几年随着python在数据分析行业/人工智能行业中一军突起,连续几年保持编程语言热门榜前五.既然python拥有如此之多的用户,那么应该如何有效地自学呐?

明确学习目的,了解python擅长的领域

其实严格来说,python作为一种完备的编程语言,并不存在所谓的擅长或不擅长,只是在某个领域使用的库比较多,使用的人比较多罢了.下图也标注出来了一些常见领域所需要使用的库.

50岁能自学python吗,55岁自学python编程

python擅长方向

其实不难看出来,python擅长的领域多数分布在一些非固定且经常需要修改.代码需要灵活易修改:例如爬虫,数据分析,或者网页页等领域.

其实这也是python的一大优势,却也是被人经常诟病的问题,由于python的"灵活性"造成几乎一个功能可以有无数种办法来实现,在多人生产环境中会成为一场噩梦.在许多软件公司中很不受待见.另外python不需要编译即可执行,造成了运行效率很低,即便现在可以通过vscode快速将python文件转为.cpy,相较于C++或者JAVA等其他语言,其运行效率依然非常低下.这也造成了很多时候大家只是用python做框架实验某个功能的可行性.

不过对于个人开发者或者代码爱好者来说,python的开发效率奇高,甚至成为了一些初创团队,或软件二次开发的主要接口语言.例如power bi在最近的更新中也引入了python语句操作.从另一方面也体现了python的普及性.

在图中罗列出来的库,有兴趣的朋友也可以自行在pipy网站上搜索,不过在开始学习python库之前,我非常建议先好好地了解一下python基础语法(我身边有很多人都因为基础不扎实被成功劝退,或者一看就开发功能就感觉头痛)

python代码格式

python官方是推荐使用 pep 8 格式来编写python代码的.其他主流的包括google的yapf,另外就是pep8格式的升级版Black.不过格式规范主要是为了方便阅读,也并非固定,(python比较随意).整体来说要尽可能保证代码工整,便于阅读,当然许多尝试过import this的python用户一定也知道python之禅.

下面我们来看一下pep8

def fun(flo: float = 0.55342, num: int = 0,
     t1: str = '一段文字/一些字符', t2: str = '另一段文字'):
  """这是一个函数"""
  text1 = t1 
  text2: str = t2
  # 在python中,即便不标注变量类型,也是可以的,是否需要标注也算是仁者见仁智者见智了.

  number_int = num
  
  print(text1) # print函数,可以将变量或者信息打印到窗口
  print(text1, type(text1)) # type函数,用来确认变量类型
  
  print("1 内容 %s 类型%s flo %0.1f" % (text1, type(text1), flo))
  # %格式化格式, %s 文字输出 
  # %f 或 %0.1f 对小数进行格式化
  
  print("2 内容 {} 类型 {}".format(text2, type(text2)))
  # 通过format()函数进行格式化输出也是个不错的主意
  
  print(flo, num)


if __name__ == "__main__":
  # __main__ 一般用于某个脚本末尾,可以用于测试,
  # 如果通过import导入其他脚本中, __main__之后的内容将不会被执行
  
  t1 = "这是一段文字"
  t2 = "这是另一段文字"
  flo = 0.55342
  fun(flo=flo, t1=t1, t2=t2)

python最重要的两个部分

一个是基本语法,其中包括的语法格式,变量类型,判断循环,函数/类/包,线程进程等.

另一个就是刚才提到的python库,包括如何找库,如何学习库的使用,其中函数如何调用等等. 当用户对python基础有着较好的理解之后,自学会变得非常简单.大多数时候只需要到对应的发布网站,查询文档便可以很顺利的自学了.

python基础语法中包括了几个重要概念, 另外由于篇幅有限,所以今天只介绍变量和判断循环两部分.当然中间也可以参杂一些其他知识,不过不会影响理解.

50岁能自学python吗,55岁自学python编程

python功能概述

变量

在python中万物皆为变量,变量可以是以下任意一种,也可以只是一个单值,虽然看起来是一个很奇怪的设定,但是在实际使用中却非常方便,让各种调用变得极其简单.但是身边也有朋友经常抱怨说变量类型那么多,更不要说从库中调去的数据了,有时候稀里糊涂的操作了就报错.可见搞清楚基本变量关系有多么的重要.

不过本文仅在抛砖引玉,并不会涉及过多的复杂数据类型.不需要考虑那么多有的没的,可以把变量认为就是一个容器,用于保存数据(文本,图片,数字,等任何类型的东西)

50岁能自学python吗,55岁自学python编程

变量构建

当然,在之前的代码中我们也看见了,其实一般情况下,我们并不需要特别标注变量类型.不过随着3.91版本的发布,相信不久的将来,变量类型标注也会成为python语言的一部分.不过就现在而言,我们可以先无视它,只是为了方面入门并且了解他们.

一下是常见的"单值变量类型"

# 文本类型
text: str = "文字" # 其性质类似列表,也支持切片
bit_like: bytes = b'比特类型'

# 值类型支持数值计算
num1: int = 0 #整型
num2: float = 0.532 #小数
num_l: complex = (1,2) #复数 类似元组形式

# 布尔型
# 常用于if判断
num_b1: bool = True # 1
num_b2: bool = False # 0

相对于单值变量,也有关于将数据构成一个组合的方法,例如

  • list = 列表
  • set = 集合
  • tuple = 元组 (听说也可以用它构建class)
  • dict = 字典

基本判断

if a > b: # 任何判断中,第一个判断都需要已 if开头
  print("a > b") # 如果判断成功,测执行的命令
elif a == 0: 
# elif 可以在判断式中无限添加,但是需要注意在判断式中永远都是自上由下进行判断的
  print("a == 0")
# ..................
elif b == 0 or a == 0: # 或
  pass
elif b == 1 and a == 0: # 与
  pass
else: # 类似于不需要任何条件,所有其他的都可以通过else输出
  print("其他")

# 判断表达式,需要注意的是,在判断表达式中,只能由if和else.
c = 0 if a == 0 else None
列表
0
1

基本循环

循环需要组合型数据,例如list/set/tuple/dict等,在之后我们还可能遇到数组array,但是由于它不属于python原生数据类型,就不在这里过多赘述了.

l1: list = ["列表", a, b] # 列表建立可以通过中括号建立
l2: list = [i for i in range(10)] # 也可以通过列表表达式

# 一般循环格式由for起始
# 一般用于有限次的循环
for i in l1: 
  print(i)
  

a = 0
while True: # while不使用break的情况下会无限循环,一般建议使用sleep
  a += 1 # python中的语法糖, 可以直接进行加值, 等同于 a = a + 1
  print(a)
  if a > 10:
    break # 退出循环
  elif a == 5:
    print('过了一半了')
  else:
    continue # 继续循环,单步执行之后所有信息
    print('你看不打印把')
1
2
3
4
5
过了一半了
6
7
8
9
10
11

当我们掌握了以上内容,已经可以完成一些比较简单的脚本了,例如可以计算一下外卖折扣价格按照价格进行平分.

案例

这里是我的代码,分享给大家,也希望可以拓展你对python学习的兴趣,(相比九九乘法表,或星号金字塔等经典案例,我认为这个更有趣.也贴切生活),另一方面也是为了证明一点,编程不难,难的是解决问题的思路.

def Main(): # 由于函数中没有输入值,所以没有写函数说明
  num = 0 # 计数变量,
  price_list = [] # 空列表,用于存储列表信息
  len = 50 # 打印留空,便于统一间隔,可以去除
  print("输入 done 进行计算".center(len, " ")) # 说明文本
  while True: # 由于不确定循环次数,所以使用while
    num += 1
    price = input("第{}个物品的价格: ".format(num).center(len, " "))
    if price != "done": # 需要注意的是,python中大小写敏感,必须是小写的done,否则无效
      # TODO 这里其实还需要添加一个判断,在非'done'或者不是数字类型时可以绕行,避免程序退出
      price_list.append(float(price)) # 将每次输入的价格添加到list中
    else:
      print(" ")
      dis_price = input("请输入所支付的价格: ".center(len, " "))
      print("=" * len) 
      total = sum(price_list)
      for price in price_list:
        print(
          "物品{}原价 {}元, 折扣后价格 {}元".format(
            price_list.index(price),
            price,
            round(price / int(total) * int(dis_price), 2),
           ).center(len, " ")
         )
      print()
      print("总价{} 实际支付价格 {}".format(total, dis_price).center(len, " "))
      print("=" * len)
      break


if __name__ == "__main__":
  Main()

输入 done 进行计算
          第1个物品的价格:           10
          第2个物品的价格:           11
          第3个物品的价格:           12
          第4个物品的价格:           13
          第5个物品的价格:           14
          第6个物品的价格:           done

          请输入所支付的价格:           40
==================================================
       物品0原价 10.0元, 折扣后价格 6.67元
       物品1原价 11.0元, 折扣后价格 7.33元
       物品2原价 12.0元, 折扣后价格 8.0元
       物品3原价 13.0元, 折扣后价格 8.67元
       物品4原价 14.0元, 折扣后价格 9.33元

         总价60.0 实际支付价格 40
==================================================

下一期我们可以一起学习函数,并且对这段代码进行优化,有好主意的也请留言,欢迎讨论.

在最一开始的图中,我们还说到了关于函数,线程等内容,由于今天只是抛砖引玉,变量特性等信息尚未讨论.后续会逐一讲解.可以持续关注我的头条,感谢各位的阅读.