for循环
在for循环中,
for letter in word:
print(letter)
可以输出变量word所指向内容的每一个单词,令word=Python,则输出结果为:
enter your word:python
p
y
t
h
o
n
用for循环计数:
使用for循环和range()函数进行计数(前向和后向)
#for循环计数
#counter
for i in range(10):
print(i,end=" ")
print("\n\n")
for i in range(0,50,5):
print(i,end=" ")
print("\n\n")
for i in range(10,0,-1):
print(i,end=" ")
第一个,循环遍历的序列是由range()函数的返回值产生的,给range()函数提供一个正整数,则它返回一个从0开始直到(但是不包括)给定数字的序列。
第二个,range()函数中有三个值,分别为起点,终点,计数单位,在本例中,则是输出从0开始直到50(不包括50),之间的数,每隔5个数输出一个。如果是10,51,5的话,就会包括50了。
第三个,前两个都属于前向计数,儿而这个属于后向计数,在本例中,最后一个参数是-1,就是说函数从起始点开始,通过每次加上-1的方式向终点前进,也就是减1的意思。
在本例中,都是输出了i的值,这里不是说规定for循环的循环体中必须把循环变量给用起来,有时候可能只是小某个操作重复执行指定次数而已。
例如:
for i in range(10):
print("Hi!")
输出结果
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
len()函数,可以输出序列的长度。
in运算符,可以判断某个元素是否在序列中
message=input("enter a message:")
if 'e' in message:
print("yes")
else:
print("no")
print("the length of youe message is ",len(message))
判断e是否在你输入的序列中,输出你所输入的序列的长度。
对字符串进行索引
前面讲的用for循环遍历的方法,称为顺序访问。还有一种随机访问,可以直接从序列中获取任意位置的元素,这种访问方式用到了索引(indexing)。
使用正的位置编号:从开头开始计数,对于字符串而言,第一个字母的位置是0,第二个字母的位置是1,之后以此类推。
使用负的位置编号:从末尾开始计数,对于字符串而言,从最后一个字母开始倒着往回数,倒数第一个字母位置是-1,倒数第二个字母位置是-2,之后以此类推。
0 | 1 | 2 | 3 | 4 |
i | n | d | e | x |
-5 | -4 | -3 | -2 | -1 |
randrange()函数,可以产生两个指定端点之间的随机数,randrange(3,5)可以随机产生3(包括)到5(不包括)之间的数。
import random
word="index"
high=len(word)
low=-len(word)
for i in range(10):
position=random.randrange(low,high)
print("word[",position,"]\t",word[position])
运行结果为:
word[ -3 ] d
word[ -2 ] e
word[ 2 ] d
word[ 4 ] x
word[ -3 ] d
word[ 2 ] d
word[ -1 ] x
word[ -5 ] i
word[ 2 ] d
word[ 2 ] d
序列分为两种:可变的和不可变的,即可修改和不可修改。字符串是不可变序列,是不能被修改的,用户无法修改已经创建出来的任何字符串。
name="lily"
print(name)
name="lucy"
print(name)
这种情况不是改变了字符串,而是改变了变量name的赋值,
name="lily"
name[0]="c"
print(name)
这种情况如果可以成功的话才是修改字符串,但是很显然,这个是有错误的:
Traceback (most recent call last):
File "E:/python study/loopy.py", line 42, in <module>
name[0]="c"
TypeError: 'str' object does not support item assignment
全大写的变量名有个特殊的含义:常量,但这只不过是一种约定俗称的东西,在某些编程语言中,常量是真实存在的,被创建之后就再也不能被修改了,那是创建和使用常量大的最安全的方式,然后Python并没有这种创建真正常量的方式。
通过已有的字符串创建新字符串:
1、之前讲过Python是区别大小写的,所以在进行比较的时候要注意,解决方法:只需在进行比较之前先将他们转换成相同的大小写形式然后再比较即可。
例如:
name.lower()==winner.lower()
就是将name变成小写,将winner也变成小写,然后比较。当name和winner拥有相同的字符串序列时(不管大小写形式),该条件为真。
2、字符串的连接也可以使用复合赋值运算符+=。
new_message+=letter
就相当于
new_message=new_message+letter
例子:输出不含元音的新字符串
message=input("enter a message:")
new_message=""
VOWELS="aeiou"
print()
for letter in message:
if letter.lower() not in VOWELS:
new_message+=letter
print("a new string has been creat:",new_message)
print("\nyour message without vowels is:",new_message)
输出结果为:
enter a message:he hate vowels
a new string has been creat: h
a new string has been creat: h
a new string has been creat: h h
a new string has been creat: h ht
a new string has been creat: h ht
a new string has been creat: h ht v
a new string has been creat: h ht vw
a new string has been creat: h ht vwl
a new string has been creat: h ht vwls
your message without vowels is: h ht vwls
切片:一次性获取序列中的一串连续元素。对于字符串而言,就是可以从整个字符串中获取任意范围的内容。
学习切片代码前,先看这行代码
start=None
这行代码赋给了start变量一个特殊的值,None,是Python用来表示“无”的方式,很适合用作值的占位符,在条件中,还能被计算为false。
在理解切片的时候,要注意,创建切片的方式和索引差不多,索引只用一个位置编号,而切片则需要一个起始位置和一个结束位置,这两个点之间的所有元素就会变成切片结果的一部分。图中给出了切片断点位置编号,注意与索引编号的区别。
!!当创建一个不可能的切片时,也就是起始端点比结束端点要大的时候,比如word[2:1],Python不会报错,会返回一个空序列,所以,要注意!!
切片速记法:
例如
word[:4] :返回序列起始端到端点4之间的元素
word[2:] :返回端点2到序列结束端点之间的元素
word[:] :返回序列的一个完整副本
元组
创建元组:将一组以逗号隔开的值用圆括号包起来即可。只有一对圆括号,内部没有值的时候也是有效的元组,此时称为空元组。
元组可以包含任意类型的元素,元组中的元素不需要是相同类型的,完全可以创建出同时包含字符串和数字的元组,除此之外,还可以创建含有图片、声音文件的元组。只要是可以赋值给变量的东西,就可以做成一个序列存到元组中。
tuple=("lili","lucy")
空元组
tuple=()
之前讲过,Python中任何值都可以用作条件处理,元组也可以用作条件,
if not tuple:
该语句表示当tuple元组为空元组时,然后执行后面的语句块。
inventory=("sword",
"armor",
"shield",
"Healing potion")
这个语句里,元组跨越了多行,用户可以在一行中编写元组,也可以像这样跨越多行,只要是在逗号后面换行的就ok。
打印元组可以向单个值那样打印整个元组
print(tuple)
遍历元组中的元素,可以使用for循环,形式与之前遍历字符串一样。
for item in inventory:
print(item)
上面通过字符串讲到的那些关于序列的知识对元组也是适用的,可以获取元组的长度len()函数,通过循环打印出每一个元素for循环和in操作符的使用,利用in运算符测试某个元素是否存在于元组中,此外,还可以对元组进行索引tuple[index],切片tuple[start:finish]和连接"+"等操作。
!!和字符串一样,元组也是不可变的!!
字符串的连接方式也同样适用于元组,只需使用连接运算符“+”就可以将两个元组连接起来,复合赋值运算符“+=”也适用于元组。