那些年被我坑过的Python——邂逅与初识(第一章)

时间:2023-03-09 05:05:07
那些年被我坑过的Python——邂逅与初识(第一章)

第一问:为什么学习Python?

  虚妖说:为了还债,还技术债,很早接触编程,却一直徘徊,也码了很多代码,却从未真真学会编程!

第二问:什么是Python

  是一种以简洁、优雅著称的解释型、动态、强类型的高级编程语言;

  简洁和优雅:

    体现在Python的语法风格,最明显的一点是缩进,其他语言中缩进本来是作为使代码结构条理增加可读性的约定,而在Python中缩进成了一种强制性要求,同时也成为代码块的分隔方式,避免使用过多的分隔标识,比如VB的Begin和End,shell中的if、fi,java中的{}等等;是不是有一种一箭双雕的感觉?!这类的编码风格已经成为Python的基因,也成就了简洁与优雅的特性。

  解释型与编译型:

    为了更好的理解两者的区别,我把编程语言与自然语言做一个类比:

    使用语言来传递信息应该是人类作为智慧生物最大的特性之一。它是信息的在一定范围内的通用编码集合,实现了对信息的高级抽象。简而言之就是构成了沟通和交流的基础。但语言有适用范围限制,就像中国不同民族使用不同的语言,即使地理位置相近使用的语言相近也会有不同的表达方式,比如方言等,更不用说国外的其它多种语言了。在这个前提下就需要引入翻译机制来实现信息不同编码方式的转换。那么如果人要和机器交流怎么办?这就需要将自然语言翻译成机器语言,这里的翻译机制就称为编译(compile)。随着编译机制的发展,逐渐演化出两种编译方式:编译型和解释型。

    编译型是指一次性把全部的自然语言进行翻译,一起告诉给计算机:你去整吧!现在没我啥事了。

    解释型是指一段一段的进行翻译:你整完这块再找我,我时刻准备着为您服务!

  动态与静态:

    区别就是变量是否需要预先定义,需要预先定义的是静态类型,比如C和Java,需要用的时候再说,这类语言称为动态语言类型。

  强类型与弱类型:

    区别在于类型转换过程,强类型必须使用特定的转换函数,而弱类型则不用,强类型可以更好的对数据进行约束。

第三问:常用的字符编码有哪些?区别是什么?

  常听说的字符编码有ASCII码、GB2312、GBK、GB28030、Unicode和UTF-8;

  区别是:

  ASCII编码的一个单元占用一个字节即8位,是较早的编码规范,不能表示中文或其他国家语言;

  GB2312、GBK、GB28030是中国不同时期使用的字符编码集,一个单元占两个字节,用来实现对中文字符的编码;

  Unicode是统一码或万国码,是各种编码的集大成者,一个单元占两个字节,可以对多国文字字符进行编码;

  UTF-8是在Unicode基础上改良的可变长编码方式,即单元的长度是不定的,表示ASCII编码集中的字符时候单元为一个字节,表示其它复杂字符编码的时候,单元使用三个字节来表示,这样可以适应字符集的不断扩展,以后还可能加入外星字符集,呵~呵~

第四问:什么是变量,变量赋值?和内存地址或内存对象之间有什么关系?

  变量顾名思义就是变化的量,是数据的抽象载体,而数据对象本身是存放在内存中的,给变量赋值就是构建变量名与数据对象地址之间的映射关系。变量不是数据,但是通过赋值操作,就可以通过变量名找到对应的数据对象。

  而把一个变量赋值给另一个变量的本质是复制映射关系,变量名之间是没有关联的。

  Python里的赋值还是很容易理解的,相较而言C、C++中的指针以及指针变量的概念就要复杂得多!

第五问:简单的数据类型有哪些?

  几乎所有语言的基本数据类型都很相似,最简单的类型无非就是整型(int)、字符串(str)、布尔型(bool)和浮点型(float),当然Python的基本数据类型还包括:列表、字典、元组和集合。

第六问:Python中如何实现交互?

  交互的实现是通过输入输出机制实现;

  最简单的输入输出机制是通过input()与print()函数来实现的。

  print()用来打印输出信息;input()用来实现用户数据的输入。

  HelloWorld程序就是使用print()函数完成的:

 output_info=input("Input something:")
>>>Hello World! print(output_info)
>>>Hello World!

第七问:主流的字符串的格式化输出方式有哪些?

  字符串的格式化输出说白了就是向预先定义好的字符串模板中传入变量。而变量的传入有两种方式:

    已有变量:

 name = input("your name:")
age = input("your age:")
job = input("your job:")
salary = input("your salary:")

    第一种是使用%作为占位符,然后按序按量依次传入:

 output_info = '''
---------------%s's RESUME--------------------
-----name :%s
-----age :%s
-----job :%s
-----salary:%s
''' % (name,
name,
age,
job,
salary)

      如上:在字符串中使用%s、%d、%f(分表示字符串、整型和浮点型变量)表示将要传入的数据的位置,在字符串结束后通过“  %  (变量名1,变量名2,...)”实现变量的导入。当然导入的变量个数与顺序要与字符串中占位符一 一对应!

    第二种是使用字符串的内置函数format()来实现:

 output_info = '''
---------------{0}'s RESUME--------------------
-----name :{0}
-----age :{1}
-----job :{2}
-----salary:{3}
'''.format(name,
age,
job,
salary) output_info = '''
---------------{_name}'s RESUME--------------------
-----name :{_name}
-----age :{_age}
-----job :{_job}
-----salary:{_salary}
'''.format(_name=name,
_age=age,
_job=job,
_salary=salary)

      这里其实就是调用了字符串类中的format()方法将变量传入,常用的有通过索引位置传入和通过label插入,不再过多赘述!

第八问:如何实现选择分支与循环?

  选择分支是通过if语句来实现的,循环通过while语句与for语句实现,细节不再赘述,用两小段代码来说明:

    

 import random
# 生成100以内的随机数来猜
true_age = random.randrange(100)
# print(true_age)
count = 5 while count > 0:
print("You only have %d chances to guess!" % count)
guess_age = int(input("guess a number between 1 and 100:"))
count -= 1 if guess_age == true_age:
print("Bingo!")
break
elif guess_age > true_age:
print("Just smaller try again!")
continue
else guess_age < true_age:
print("Just bigger try again!")
continue
else:
print("Unluckly!")

    上面代码的功能是实现猜年龄,年龄是随机生成的100以内随机整数,而且只有5次机会,每次输入一个猜测值,根据与真实值的比较结果反馈,如果五次都没有猜对就退出循环,猜对则立刻退出循环。

      

 import random

 true_age = random.randrange(100)
times = 3 for count in range(10):
guess_age = int(input("guess a number between 1 and 100:"))
# 超过三次后提示是否继续
if count >= times - 1:
response = input("Do you want to continue?")
if response != 'y':
print("Unlucky!")
break if guess_age == true_age:
print("Bingo!")
break
elif guess_age > true_age:
print("Just smaller try again!")
else guess_age < true_age:
print("Just bigger try again!")
else:
print("Unlucky!")

    与上一段代码相比,这里使用了for语句实现循环,超过三次猜不对,就会提醒用户是否继续;

    range()的功能很强大,可以设置步长也可以倒序,比如:

 for i in range(100,0,-1):
pass for i in range(0,10,2):
pass

    第一个for语句可实现i从100到0的变化,第二个语句可以实现10以内的偶数输出,顾名思义!

第九问:编程的好习惯有哪些?

  首先,写博客就是一个很好的回顾和梳理知识的手段;

  其次,设计的重要性远远高于编码过程,因此为了更好地将头脑中的概念具现化就需要使用工具来辅助我们,使用流程图来固化设计方案可以使得编码更有条理与针对性,对设计过程中存在的重大问题也有很好的反馈作用!

  最后,书读百遍其义自见,想磨练编程技能,写代码做练习是无可厚非的,孰能生巧,很有道理!

第一次编写博客,内容和排版可能都有欠缺,望大家多多体谅,如果发现文中有错误或是歧义,请多多指教,都是凡人,难得不犯错!