Python初学者——全面概述最受欢迎的编程语言
如果你是Python的新手,我建议你先查看一些关于Python的概念其实都非常容易理解,比如函数,列表,字典等等。
我写这篇文章的唯一目的是通过提供相关的适当注释来帮助初学者,以便能够更好地理解这些概念。
我将在本文中讨论的主题是 -
Variables and data types--变量和数据类型
Working with strings--使用字符串
Working with numbers--使用数字
Getting input from user--从用户那里获取输入
Mad Libs Game--Mad Lib Game
Lists--列表
Tuples--元组
Functions and return statement--函数和return语句
If statements--if语句
Dictionaries--字典
While loop--while循环
For loop--For循环
Exponent function--指数函数
2d Lists and Nested For Loop--2d列表和嵌套循环
Comments--注释
Try/Except--Try/ExceptReading
external files--读取外部文件
Writing to external files--写入外部文件
Modules and pip--模块和pip
Classes and Objects--类和对象
使用字符串 -
字符串是使用最广泛的数据类型,可以在字符串变量中存储数字,纯文本,特殊字符。让我们看一些代码来更好地理解字符串。
print("This is a string")
这里我们刚刚用双引号打印了一个纯文本。双引号表示它是一个字符串。
我们还可以将这个纯文本存储在名为“Variable”的占位符中。
alpha_string = "Python is awesome" num_string = "25" special_string = "@*" alpha_num_string = "ms7"
这里我们将值赋给变量。变量可用于在将来引用这些值,这样我们就不必一次又一次地输入文本。您可以观察到我们可以在字符串中存储任何类型的值 - 数字,字母,特殊字符。
有许多函数可以与字符串一起使用 -
legend = "Elon Musk" print(legend) #OUTPUT - Elon Musk print(legend.upper()) #OUTPUT - ELON MUSK print(legend.isupper()) #OUTPUT - False print(legend.upper().isupper()). #OUTPUT - True print(len(legend)) #OUTPUT - 9 print(legend.replace("Elon", "Kimbal")) #OUTPUT - Kimbal Musk
- upper()函数是将所有字母转换为大写
- isupper()函数检查所有字符是否都是大写。
- 这里要注意的关键是我们也可以将这些方法链接在一起,例如 - legend.upper().isupper()。这里字符串'legend'将转换为大写字母,然后我们将检查字符是否为大写。
- len()函数返回字符串的长度。
- replace()函数是替换字符串中的特定文本。
这里要注意的最重要的一点是字符串是不可变的,不能被修改。
现在,您一定想知道,我们只是修改了字符串并得到了输出,那么它们怎么会是不可变的呢?接下来我会说明这种“不可变性”是如何工作的。
print(legend) #OUTPUT - Elon Musk print(legend.upper()) #OUTPUT - ELON MUSK print(legend) #OUTPUT - Elon Musk
在这里,可以看到,在第二行中,我们将字符串更改为大写,但在第三行打印时,它仍然与原始字符串相同。这些字符串函数在此处不起作用。他们不能修改原始字符串。事实上我们不能修改原始字符串,如果我们这样做了,我们就会得到一个错误提示。
legend = "Elon Musk" legend[1] = 'k' Traceback (most recent call last): File "/Users/dhairyakumar/Downloads/FreeCodeCamp/demo.py", line 9, in <module> legend[1] = 'k' TypeError: 'str' object does not support item assignment
在这里,我试图用'k'替换字母'l'但是提示出错。
使用数字 -
在Python中,数字数据类型涵盖了所有数值,不像其他编程语言,如C,C ++或Java,对于不同类型的数值,有不同的数据类型,如int,float,double等。
让我们看一些代码来更好地理解数字。
print(2 * (3+2)) # OUTPUT = 10 print(10 % 3 ) # OUTPUT = 1 num = -5.78 print(num) # OUTPUT = -5.78 print(abs(num)) # OUTPUT = 5.78 print(str(num) + " is my number") # OUTPUT = -5.78 is my number print(round(num)) # OUTPUT = -6
这里我们可以在print语句中执行一些计算,我们也可以为变量赋一个数字。这里要注意的一点是,如果我们想要将字符串和数字一起打印输出,那么我们需要将数字类型转换为字符串。
在数学模块中还有其他函数,如floor和ceil
from math import * print(ceil(num)) # OUTPUT = -5 print(floor(num)) # OUTPUT = -6
从用户那里获取输入 -
我们可以使用input()函数从用户那里获取输入。
name = input("Enter your name : ") age = int(input("Enter your age : ")) salary = float(input("Enter your salary : ")) print("Name = " + name + " : " + " Age = " + str(age) + " : " + "Salary = " + str(salary)) #OUTPUT Enter your name : abc Enter your age : 25 Enter your salary : 12000.67 Name = abc : Age = 25 : Salary = 12000.67
这里我们需要取一个整数输入,那么我们只需将input()函数类型转换为int,对于十进制值,我们将它转换为float。
Mad Lib Game -
这是一个小游戏,我们将从用户那里获取输入并尝试形成一些有趣的句子。
color = input("Enter a color : ") plural_noun = input("Enter a plural noun : ") celeb = input("Enter the celebrity : ") c = "Roses are {} ".format(color) p = "{} ar blue".format(plural_noun) cl = "I love {}".format(celeb) print(c) print(p) print(cl) #OUTPUT Enter a color : red Enter a plural noun : violets Enter the celebrity : scarlett Roses are red violets ar blue I love scarlett
这里的技巧是使用format()函数。
列表 -
列表是另一种在Python中广泛使用的数据结构。它是可变的,即我们可以在声明元素之后改变它们的值。
我们可以使用extend函数轻松地将2个列表附加到一起。
friends = ["abc", "def", "xyz", "pqr", "mno","def"] num = [4, 8, 12, 16, 20] friends.extend(num) print(friends) #OUTPUT ['abc', 'def', 'xyz', 'pqr', 'mno', 'def', 4, 8, 12, 16, 20]
zip()函数,它允许我们连接两个或多个列表的值。
name = ["abc", "def", "xyz", "pqr"] roll_num = [4, 8, 12, 16] mapped = zip(name, roll_num) print(set(mapped)) #OUTPUT {('abc', 4), ('def', 8), ('pqr', 16), ('xyz', 12)}
我们可以在列表中使用其他函数。
friends = ["abc", "def", "xyz", "pqr"] friends.append("karen") print(friends) #OUTPUT = ['abc', 'def', 'xyz', 'pqr', 'karen'] friends.insert(1, "Joe") print(friends) #OUTPUT = ['abc', 'Joe', 'def', 'xyz', 'pqr'] friends.remove("abc") print(friends) #OUTPUT = ['def', 'xyz', 'pqr'] friends.pop() print(friends #OUTPUT = ['abc', 'def', 'xyz'] print(friends.count("def")) #OUTPUT = 1
这里append()函数始终将值添加到列表的末尾。
- 如果我们想在特定位置插入一个值,那么我们可以使用insert()函数。
- remove()函数用于删除particualr值。
- pop()将始终删除最后一个元素。
- count()将返回特定元素的出现次数。
我们还可以在列表中使用sort()、reverse()和copy()等函数。
friends = ["abc", "def", "pqr", "xyz"] friends.sort() print(friends) #OUTPUT ['abc', 'def', 'pqr', 'xyz'] friends.reverse() print(friends) #OUTPUT ['xyz', 'pqr', 'def', 'abc'] friends2 = friends.copy() print(friends2) #OUTPUT ['abc', 'def', 'pqr', 'xyz']
元组 -
元组与Python中的列表非常相似。主要区别在于它们是不可变的,即我们在声明后不能改变元组的元素。
coordinates = (10, 4) print(coordinates) #OUTPUT = (10, 4) coordinates = [(10, 4), (6, 7), (0, 8)] print(coordinates[0][1]) #OUTPUT = 4
我们还可以在列表中嵌套元组。这里我们可以将元素'4'称为坐标[0] [1],因为(10,4)是列表的第0个元素,4是该元组的第1个元素。
函数和返回语句 -
函数用于执行一组特定的指令。它们是可重用的,因此我们可以为任何通用任务创建一个函数,比如计算一个数字的立方,将两个数字相加等等。
def func(name): print("Hello : " + name) print("Initial") func("John") print("Final") #OUTPUT Initial Hello : John Final
python中的函数使用关键字def定义。这里要注意的两个关键事项是 -
- 我们可以将任何值传递给我们想要在其中使用的函数。该值称为参数(parameter)。
- 函数的执行顺序如上所示。输出'Initial'后,控件将移至func()并执行整个函数,然后输出'Final'。
我们还可以使用'return'关键字从函数返回一个值。
def cube(n): return pow(n, 3) print(cube(3)) #OUTPUT = 27
If语句 -
If语句用于使我们的程序更智能,因为我们可以根据程序的条件执行不同的代码。让我们从一个简单的例子开始。
is_male = True if is_male: print("You are a male") else: print("You are not a male") #OUTPUT You are a male
这里我们检查布尔变量is_male是否为真(true)或假(false),并根据它进一步执行代码。
这里需要注意的关键是,“if语句”总是基于简单的真和假逻辑,所以不管我们使用什么条件或变量,结果总是要么为真,要么为假。如下:
if 5: print("True") # OUTPUT = True if -1: print("True") # OUTPUT = True if 0: print("True") # Nothing will be printed
所以除了0以外的所有值都被认为是正确的。
如果我们有超过2个条件,那么我们可以使用else If,它在Python中被写成elif。
a = 0 if a > 0: print("a is greater than 1 ") elif a < 0: print("a is less than 1 ") else: print("a is 0 ") #OUTPUT a is 0
字典 -
字典是键值对。在这里,我们存储使用键映射的值,我们可以通过传入键检索这些值。
这里需要注意的一点是键值应该是唯一的,我们也可以使用数字键。
monthConversions = { "Jan": "January", "Feb": "February", "Mar": "March", "Apr": "April", "May": "May", "Jun": "June", "Jul": "July", "Aug": "August", "Sep": "September", "Oct": "October", "Nov": "November", "Dec": "December", }
我们可以使用2种方法检索值。
1. print(monthConversions["Jan"]) # OUTPUT = January 2. print(monthConversions.get("Jan")) # OUTPUT = January print(monthConversions.get("abc", "Invalid Key")) # OUTPUT = Invalid Key
get()方法非常有用,因为我们还可以传入默认值。因此,如果我们传入的键不在字典中,那么将输出默认值。
while循环 -
当我们想要重复执行语句或一组语句时,使用循环。
i = 1 while i <= 5: print(i) i += 1 print("While loop ended") #OUTPUT 1 2 3 4 5 While loop ended
在这里,我们从i = 1开始,一直增加到5,然后当i的值变为6时,我们走出循环并输出“While loop ended”。因此,只要条件为真,循环内的语句就会被执行。
For循环 -
For循环对于迭代来说是非常强大和有用的工具。它们可以与字符串一起使用,如下所示 -
string = "Python" for alphabet in string: print(alphabet) #OUTPUT P y t h o n
我们也可以使用for循环遍历列表。
friends = ['abc', 'def', 'pqr', 'xyz'] for name in friends: print(name) for index in range(len(friends)): print(friends[index])
两种情况下的输出都是相同的
abc def pqr xyz
如果你想使用索引遍历列表,那么你可以使用range()函数,我们可以创建一个循环变量,它将逐个输出存储在列表中的所有值。
指数函数 -
通常表示为“^”执行在Python中使用* *。
print(2**4) #OUTPUT = 16
我们还可以创建一个函数来执行此操作,如下所示。
def pow(base_num, pow_num): res = 1 for i in range(pow_num): res = res * base_num return res print(pow(2, 5)) #OUTPUT = 32
2D列表和嵌套循环 -
2d列表本质上是一个嵌套列表。我们可以使用2d列表在Python中创建类似网格的结构。
num_grid = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [0] ] print(num_grid[1][2]) # OUTPUT = 6
如果要输出此列表的每个元素,则可以使用嵌套for循环执行此操作。
for row in num_grid: for col in row: print(col, end=" ") #OUTPUT 1 2 3 4 5 6 7 8 9 0
这里我们使用了一个嵌套的for循环来遍历整个列表。在第一次迭代中,变量行将引用列表的第一个元素,即[1,2,3],而col将引用该子列表的每个元素,即1,2,3。
注释 -
编程语言中使用注释来提供有关代码块的信息或忽略某些行。
''' This function prints Hello ''' def func(): print("Hello") #print("Hi")
上面的函数将只输出Hello,Hi将被忽略,因为我们在它前面放置了'#',所以Python将忽略这一行。
- #用于单行注释
- '''用于多行注释
Try / Except -
Try / Except是Python中一个非常重要的主题,因为它允许我们处理各种类型的错误和异常。
我们可以在try块中放置我们认为可能导致错误的任何代码,如果遇到错误,将执行except块。
try: num = int(input("Enter a number : ")) print(num) except: print("Invalid Input")
在上面的程序中,如果我们输入一个数值,那么程序将正常工作,但如果我们输入一个字符串或一个浮点数然后没有try / except块,程序就会崩溃,但现在它只会输出'Invalid Input'(无效输入)。这一点很重要,因为当我们编写生产级别的程序时,我们不希望在用户不能提供有效输入时程序崩溃,而是希望程序尽可能稳定。
尽管上面的代码可以很好地工作,但是except block仍然存在一个问题。except块将输出相同的消息,而不考虑错误的原因。
try: val = 10/0 num = int(input("Enter a number : ")) print(num) except: print("Invalid Input")
在这里,程序甚至在接受输入之前就会崩溃,因为程序不能处理除0。但问题是我们仍然会看到无效的输入。定义except block的正确方法是定义我们想要处理的异常类型。
try: val = 10/0 num = int(input("Enter a number : ")) print(num) except ValueError as err: print("Invalid Input") print(err) except ZeroDivisionError as err: print("Division by zero is not allowed") print("Error = " , err)
在这里,程序将正确地处理这两个异常。我们可以做的另一件事情是,我们还可以通过将except语句存储在变量中来输出错误。
所以,如果我们运行上述程序,那么我们将得到 -
Division by zero is not allowed Error = division by zero
读取外部文件 -
我们可以访问Python中的各种外部文件,我们也可以修改它们。我们使用open()函数打开一个特定的文件。
emp_file = open("emp.txt", "r")
“emp.txt”是文件的名称。如果该文件存在于某个其他目录中,则指定绝对路径。“r”是文件的模式。我们可以对文件使用多种模式。
emp.txt Mike - CEO John - Accountant Jane - Receptionist Joe - Developer Kelly - Customer Service
- r - 它允许我们以只读模式打开文件。我们无法修改文件的内容,我们只能查看文件的内容。
- w - 它允许我们以写入模式打开文件,因此我们也可以修改文件的内容并阅读它。
- a - 它允许我们在文件末尾附加任何信息。这里需要注意的一点是,我们无法修改以前写入的信息,而只能在文件末尾写入新信息。
- r + - 它为我们提供了读写权限。
emp_file = open("emp.txt", "r") print(emp_file.readable()) print(emp_file.readline()) emp_file.close() #OUTPUT True Mike - CEO
始终记得在所有操作完成后关闭该文件。
我们可以使用readline()函数从文件中读取一行。注意,我们已经使用readable()函数来检查文件是否可读。读取文件所有行的更好方法是遍历所有行并逐个输出出来。
emp_file = open("emp.txt", "r") for employee in emp_file.readlines(): print(employee) emp_file.close() #OUTPUT Mike - CEO John - Accountant Jane - Receptionist Joe - Developer Kelly - Customer Service
写入外部文件 -
我们可以通过将模式指定为“w”或“a”来写入文件。
emp_file = open("emp.txt", "a") emp_file.write(" Rachel - Customer Service") emp_file.close()
执行上面的代码后,我们的emp.txt文件将如下所示 -
emp.txt Mike - CEO John - Accountant Jane - Receptionist Joe - Developer Kelly - Customer Service Rachel - Customer Service
请注意,我们已将模式指定为“a”,如果我们将模式指定为“w”,则它将覆盖之前写入的所有值。
emp_file = open("emp.txt", "w") emp_file.write(" Karen - Developer") emp_file.close()
执行上面的代码后,我们的emp.txt文件将如下所示 -
emp.txt Karen - Developer
可以看到所有以前的值都已消失,我们只剩下一行。
模块和pip -
模块(module) - 它只是一个包含各种语句,函数,变量等的文件。关于这一点的好处是我们可以使用其他人编写的代码而无需实际复制它。
pip - 它是一个包管理器,允许我们安装各种Python模块。
demo_module.py def square(num): return num*num
这里我们声明了一个名为demo_module.py的普通文件,我们已经定义了一个简单的函数square,它只是对一个数字进行平方并返回它。这里要注意的是我们也可以在这个文件之外使用这段代码。
demo.py import demo_module print(demo_module.square(4)) #OUTPUT = 16
这里我们在demo.py中调用了函数square,但它实际上是在demo_module.py中定义的。Python的这一特性使其成为一种优秀的编程语言,因为我们可以重复使用我们的代码而无需一次又一次地实际复制它。
学习Python模块非常重要,因为它们可以帮助您节省大量的时间,因为您可以在自己的代码中使用由其他人定义的各种函数,而不必编写每行代码。
pip允许您安装这些模块。所以如果你想安装一个名为“abc”的模块,那么你可以写 -
pip install abc
请注意,大多数Python模块都可以使用pip安装,但是如果遇到任何无法使用pip安装的模块,那么很可能会有一个与之相关的详细文档,说明如何安装该特定模块。
类和对象 -
类和对象是任何面向对象编程语言的组成部分。
类基本上允许我们在程序中对真实世界对象进行建模。因此,您可以将其视为创建自己的数据类型。因此,如果你想代表像学生这样复杂的现实世界实体,那么你就不能使用基本数据类型,因为学生有各种与他/她相关的东西 - 名字,专业,成绩等不可能使用单个数据类型(如字符串或数字)表示。所以我们可以使用类来创建这种复杂的数据类型。
类是定义对象功能的蓝图
对象是类的实例。我们使用对象访问类的所有功能
Student.py class Student: def __init__(self, name, major, gpa, is_on_probation): self.name = name self.major = major self.gpa = gpa self.is_on_probation = is_on_probation def on_honor_roll(self): if self.gpa >= 3.5: return True else: return False
在这里我们定义了一个__init__函数,我们初始化了我们想要与我们的类关联的所有变量或属性。如果你来自传统的编程背景并且已经学习了C,C ++或Java等语言,那么你可以把它想象成一个构造函数。
on_honor_roll()是一种允许我们进一步扩展类功能的方法。
demo.py from Student import Student student1 = Student('Jim', 'Business', 3.4, False) student2 = Student('Kim', 'Business', 3.9, False) print(student1.gpa) print(student2.on_honor_roll()) #OUTPUT 3.4 True
这里我们创建了Student类的两个实例或对象,即-student1和student2,我们用特定的值初始化它们。当我们编写student1 = Student()时,就会调用__init__method,并使用在'()'中传递的值初始化对象。