Python个人学习
输入输出
输出
例子:print('hello, world')
也可以接受多个字符
print(
'The quick brown fox',
'jumps over',
'the lazy dog')
The quick brown fox jumps over the lazy dog
这时会将逗号当成一个空格来输出。
输入:
提供一个input()函数让用户进行输入。
>>> name = input()
Michael
当输入时,直接将用户输入的赋值。
同时,input函数可以顺便输入提示语句。
name = input('please enter your name: ')
print('hello,', name)
当在进行输入时,会提示 please enter your name,然后在用户进行输入。
小结:
任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。
输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,或者简写为IO。
input()
和print()
是在命令行下面最基本的输入和输出,但是,用户也可以通过其他更高级的图形界面完成输入和输出,比如,在网页上的一个文本框输入自己的名字,点击“确定”后在网页上看到输出信息。
语法有所不同:采用缩进的方式。
# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
其中,#用来注释,编译器会忽视注释内容。
当语句用以:结尾时,缩进的语句视为代码块。缩进并没有规定缩进是几个空格还是说Tab,按照约定俗称的管理,始终坚持使用4个空格的缩进。而且,大小写敏感。而且如果使用Tab时需要设置空格的数量。
小结:
Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。
在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格。
数据类型:
整数和浮点数:浮点数也就是小数,之所以 称之为浮点数,是因为,浮点数的小数点位置是可以改变的。浮点数和整数在计算机的内部的尺寸方式不同,整数永远是精确的,而浮点数会有误差。
字符串:
字符串是以单引号或双引号括起来的任意文本,当在字符串内部可以用转义字符\来进行表示。
布尔值:
布尔值和布尔代数表示完全一致,一个布尔值只有正确和错误两个值。当然布尔值可以使用 and,or和not运算。
And运算是与运算,只有当两个值都为ture时才为ture。
其所起到的作用是&&。
Or运算是或运算,当两个值其中一个为ture时值为ture,
其所起到的作用是||。
Not运算是非运算,作用为!。
空值
在语言中,空值是一种特殊的值,用none表示。None不能理解为0,因为0是有意义的,而none是一个特殊的空值。
变量:
变量本身类型不固定的语言为动态语言,与会对应的是静态语言。静态语言在定义时必须指定变量类型,如果类型不匹配,将会报错。
a = 'ABC'
再定义时,python翻译器就干了两件事情:
- 在内存中创建了一个’ABC’的字符串。
- 在内存中创建了一个名为a的变量,并把它指向‘ABC’。
//有点类似于指针。
在python中有两种除法,一种除法是/:
这种除法的结果是浮点数。
还有一种除法是//,称之为地板除:
10//3 得到的结果是整数 为3.只取整数部分。
还有一种是余数运算,10%3 得到 1.
小结:
Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量 赋值就是把数据和变量给关联起来。
对变量赋值x = y是把变量x指向真正的对象,该对象是变量y所指向的。随后对变量y的赋值不影响变量x的指向。
注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648-2147483647。
Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。
格式化:
在python中,采用格式化与c语言是一致的,用%实现
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
在字符串内部,%s表示字符串替换,%d表示用整数替代,有几个%?占位符,后面就跟着几个变量或者值,顺序要对应好,如果只有一个占位符,括号可以省略。
占位符 | 替换内容 |
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
当不确定使用什么,&是永远起作用,他可以将任意数据类型转化为字符串。
另一种格式化字符串的方法是使用字符串的format()的方法,它会用传入的参数依次替换字符串内的字符串{0}…
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'
List
Python内置的一种数据类型是列表:list。List是一种有序的集合,可以随时添加和删除其中的元素。
例如:
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
此时,变量classmates就是一个list。
当我们想知道一个list的数量时,就可以使用len()函数。Len(list名)。
相似与c++的容量,可以使用索引来访问list中的每一个元素,索引是从0开始的。
例如刚才的list,
>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
当超出元素的个数时,将会报错(indexerror)。
当然也可以使用-1这样用负数来进行反向索引,但是是直接从-1开始。
List是一个可变的有序表所以,可以再list末尾追加元素到末尾。
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
也可以插入到指定的位置,比如索引为1的位置:
>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
当要删除的末尾的元素时,用pop()方法:
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
要把某个元素替换为别的元素,可以直接赋值给对应的索引位置。
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']
List元素也可以是另一个,比如:
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
其中可以拆开来看待
>>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
Tuple
另一种有序列表叫做元组。其和list非常类似,但是list一旦初始化就不能修改。因此用这个元组,就会非常安全。
在定义一个tuple时就需要将元素定义下来:
>>> t = (1, 2)
>>> t
(1, 2)
当我们需要定义一个空的tuple时,可以写成()
>>> t = ()
>>> t
()
但是当定义只有一个元素的tuple时,必须要加一个逗号。
>>> t = (1)
>>> t
1
如果这样定义,将定义的是1这个数,这是因为,括号既可以表示tuple,又可以表示数学中的小括号,这时就需要使用小逗号来进行消除歧义。
>>> t = (1,)
>>> t
(1,)
当tuple中有list是,tuple有变成一个可变的元组。最后来看一个“可变的”tuple:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
这个tuple定义的时候有3个元素,分别是'a'
,'b'
和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?
别急,我们先看看定义的时候tuple包含的3个元素:
当我们把list的元素'A'
和'B'
修改为'X'
和'Y'
后,tuple变为:
表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。
条件判断
例如:
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
再议 input
看一个有问题的条件判断。很多同学会用input()读取用户的输入,这样可以自己输入,程序运行得更有意思:
birth = input('birth: ')
if birth < 2000:
print('00前')
else:
print('00后')
输入1982,结果报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()
这是因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python提供了int()函数来完成这件事情:
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
再次运行,就可以得到正确地结果。但是,如果输入abc呢?又会得到一个错误信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'
原来int()函数发现一个字符串并不是合法的数字时就会报错,程序就退出了。
循环:
Python有两种循环可以使用
一种是for…in循环,依次将list与tuple中的每个元素迭代出来,例子:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
所以for循环就是把每个元素带入变量,然后执行缩进语块。如果要计算1-100的整数之和,我们不可能从1写到100,此时python提供一个range()的函数,这个函数可以生成一个整数数列,再通过list()函数转化为一个list,例如range(5)生成一个从0到4的序列。
>>> list(range(5))
[0, 1, 2, 3, 4]
Range(101)可以生成0-100的整数序列。
第二种就是while循环,只要条件满足,就会不断循环,当条件不符合时将跳出循环。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
break
在循环中,使用break可以提前跳出循环。
Continue
在循环过程中,也可以通过continue语句,跳过当前循环,直接进行下一次的循环。
小结:
循环是让计算机做重复任务的有效的方法。
break
语句可以在循环过程中直接退出循环,而continue
语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if
语句使用。
要特别注意,不要滥用break
和continue
语句。break
和continue
会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break
和continue
语句,上面的两个例子,都可以通过改写循环条件或者修改循环逻辑,去掉break
和continue
语句。
有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以用Ctrl+C
退出程序,或者强制结束Python进程。
请试写一个死循环程序。