======Procedural Programming======
//Week 2 notes//
----
====Procedural Programming====
===What is Procedural Programming===
* Functional Programming
* **Function**: A segment of code that performs a specific task, sometimes taking some input and sometimes returning some output
* **Method**: A function that is part of a class in object-oriented programming (but colloquially, often used interchangeably with function).
* Object-Oriented Programming: A programming paradigm where programmers **define custom data types** that have custom methods embedded within them.
* Event-Driven Programming: 程序会等待用户的输入(//event//),根据输入再进行计算。
==Procedural Programming in Python==
* type & variables
* operators
* arithmetic op
* logical op
==Comments and Documentation==
* Comments: Notes from the programmer supplied in-line alongside the code itself, designated in a way that prevents the computer from reading or attempting to execute them as code.
* Documentation: Collected and set-aside descriptions and instructions for a body of code.
* Self-Documenting Code: 使用变量名来解释程序的意义
* python 使用
* ''#'' 作为**单行** comment 的起点,终点是 end of the line
==python IDLE==
* 使用 IDLE 直接可以进入
* Immediate Mode:交互型模式(类似计算器)
* Scripting Mode
* ''Ctrl+N'' 创建新文件,''F5'' 运行
* ''input()'' 函数可以用于输入(类似cin)比如:
user_input = input("Enter some text: ")
print("You entered:", user_input)
====Variables====
* 由 name 和 value 组成
* name 不变, value 会变
* variable 的命名:骆驼(camel case)和下划线 (under_score)(python 用后面)
==variable in python==
* variable 的类型在赋值的时候决定。如果改变了赋值的类型,那么 variable 的类型会随之改变
* 命名规则:
* rule
* variable 只能由数字和字符(还有下划线)组成
* variable 只能从字母开始
* varibale 不能使用 reserve word
* convention
* variable 名应该是有意义的,比如 ''age''
===Assigning Variables===
* order relation ship: ''x = 5'',而不是 ''5=x''(systax error)
* 在 variables 使用之前需要进行赋值(name error)
* None:意味着**没有值**。但这种情况是可以打印的,而没有赋值的不行(没赋值意味着没定义)
===Data Types===
* basic types
* custom types
* 某些 data type 是不可比较的,如果需要比较,需要人为的指定规则。
==data type in python==
* python 是弱类型语言
* python 变量的类型由其 value 决定(C++ 是由 name 决定)
* 类型检测函数: ''type()'':
* python 并没有严格意义上的 primitive data.
==mixing types==
* 如果做没有意义的,不同 type 之间的运算,会导致 TypeError.
* 注意看错误输出,解释器会提示是什么导致了不兼容。
==None and NoneType==
* ''None'' 类型是根据 null 的概念而来,代表**没有值的变量**
* ''None'' 类型被称为 ''NoneType'',不能与任何其他类型适配
* 创建 ''None'' type
* 直接赋值 ''None'',比如 ''x = None''
==None and functions==
这里的例子主要是 ''print()''。''print()'' 函数实际上并没有返回值(也可以说返回类型是 ''NoneType''),以此以下程序中:
a = "Hello"
b = "world"
c = a + b
d = print(c)
print(d)
''d = print(c)'' 实际上做了两步:
* ''print(c)'' 将 ''c'' 的内容输出到终端,并返回 ''NoneType''
* ''None'' 赋值给了 ''d''
===Type conversion in python===
==string 与 数字==
''"123"'' 与 ''123'' 是两种不同的数据:
* ''"123"'' 以文本形式存储
* ''123'' 是以整型的形式存储
==string 转换函数==
* ''str()'':将当前 argument 转换并返回 string 类型的数据
#convert int
my_int = 5
my_string = str(my_int)
#convert date
from datetime import date
myDate = date.today()
myDateAsString = str(myDate)
以上转换多半可以通过隐式转换来进行。但需要注意的是,''print()'' 内部无法进行隐式转换。比如下面的例子会造成 TypeError
print("Today's date: " + myDate)
可选的做法:
print("Today's date: " + str(myDate))
另外一种做法是使用 '','' 运算符,''print()'' 会将 '','' 两边的分别衡量,因此也不会产生因 ''+'' 带来的类型不匹配了:
print("Today's date:", date.today())
==string 转换为其他类型==
转换为 ''int''
my_int_as_str = "5"
my_int = int(my_int_as_str)
转换为 ''float''
my_float_as_str = "5.1"
my_float = float(my_float_as_str)
转换为 ''bool''
my_boolean_as_str = "True"
my_boolean = bool(my_boolean_as_str)
* 如果转换的后的结果不能转化为指定的类型,那么结果是 ValueError,比如 ''"5a"'' 不能转换为 ''int''。
* 即便存在对应的转换关系, literal 只能转化为对应的类型,比如 ''"5.1"'' 不能转换为 ''int'' 类型,会导致 ValueError.
* 例外:
* **不丢失信息**的转换可以实现,比如 int 的 string 可以转换为 float,但反之不行
* 绝大部分数据都可以转化为 boolean
==User input==
* ''input()'' 打印指定内容,并返回用户的输入。用户的输入的内容是 ''str'' 类型,因此需要转换:
myUserInput = input("Enter an int")
myInt = int(myUserinput)
print(myInt * myInt)
不输入任何信息直接回车会得到一个空 string。该 string 无法转化为 float
===Reserved Keywords in Python===
查看 python 的 keywords:
import keyword
print(keyword.kwlist)
*** Importing Libraries**. import, from. Not covered explicitly, but you'll see these in a few places throughout our material, especially when we're dealing with dates, turtles, or random numbers.
* **Logical Operators**. and, is, not, or, False, True, None. Covered in Chapter 2.3.
* C**ontrol Structures**. as, break, continue, if, elif, else, for, in, while, pass, with. Covered throughout Unit 3. if, elif, and else are covered in 3.2; for, while, pass, continue, and break are covered in 3.3. as and with are not covered explicitly. in comes up in Chapters 2.3, 3.2, 3.3, and other places.
* **Functions**. def, return. Covered in Chapter 3.4.
* **Object-Oriented Programming Syntax**. class. Covered in Chapter 5.1.
* **Error Handling**. except, finally, raise, try. Covered in Chapter 3.5. else also comes up here.
使用 keywords 做变量名会导致 systax error.
==function 名不是 reserve keyword==
* 使用 function 名作为变量名会掩盖 function 原有的意思(也就是 name 的 bind 变了)
* 实际使用中应该避免使用 function 名作为变量名
==Dot Notation in Python==
''.'' 运算符是成员运算符,用于访问类中的成员;比如:
#date is a class, today() is its member function
from datetime import date
myDate = date.today()
print(myDate.year)
print(myDate.month)
print(myDate.day)
成员函数取决于类(library)提供什么样的功能。比如 ''datetime'' 类就能提供与 ''date'' 类不一样的功能:
import datetime
currentTime = datetime.datetime.now()
print(crrentTime.hour)
print(crrentTime.minute)
print(crrentTime.second)
====Logical Operators====
*** Mathematical Operators**:Operators that perform mathematical functions
* **Logical Operators**:Operators that perform logical operations, such as comparing relative values, checking equality, checking set membership, or evaluating combinations of other logical operators.
===Relational Operators===
*** Relational Operators**: Operators that check the relationships between multiple variables
*** Numeric Comparison Operators**: Operators that facilitate numeric comparison between values.
* **Boolean Operators**
* Non-Numeric Equality Comparisons:不比较大小,但比较是否相等。比如苹果和橘子可以定义为不相等。
* Set Operators:Check to see if a value is a member of a set of multiple values. Most often this comes up in strings and lists.
==Relational Operators in Python==
* ''=='' equal operator
* ''in'' 查看一个 string 是否包含另外一个 string(也可以用于元素是否在 List 里)
* 该运算返回 t/f,区分大小写
===Boolean Operators===
* ''and''
* ''or''
* ''not''
===Ture Tables===
* 可以通过真值表快速查询复杂逻辑表达式的真假
==逻辑运算符的性质==
* 交换律
* 分配律
* 德摩根律(not( A and B)-> not A or not B
====Mathematical Operators====
* Assignment Operator
* Mathematical Operators: add, sub, mul, div, mod
* Additional Operators: floor div ''%%//%%'', exponent(base ''%%**%%'' exp)
- floor div 会往最小的数进行取整。比如 3 ''%%//%%'' -2, 浮点结果是 ''-1.5'',最小可以取到的整数是 ''-2'',因此结果是 ''-2''
- floor div 中,如果有浮点数参与运算,结果也是浮点数
===self assignement===
* self assignement
* incrementing
* 自增可以用 ''+='' 之类的缩写(比如 ''-='', ''*='')表示,string 也可以用。
==sincermenting and loops==
* 自增一般与 loop 连用。
==Parentheses Errors==
* 括号需要匹配。
* 括号不匹配的出错信息往往在别的行
*