while循环
如果if语句的条件表达式结果为True,则运行if语句的附属代码,如果条件表达式结果为False,则跳过if语句附属代码。
while语句类似,只是它的附属代码块可以运行多次。 只要条件成立,其中的语句就会重复执行。 一旦某次条件表达式的判定为False,就会跳出循环,执行之后的代码。
while 条件表达式:
满足条件时要执行的命令1
满足条件时要执行的命令2
在程序第一次运行到while语句的时候,先进行条件表达式的判断,如果是False,直接跳过整个while循环整体;如果是True,则运行一次附属代码块,然后重新判定条件表达式是否为True,如果是,则再运行一次附属代码块,然后再判定条件表达式…直到某一次判定条件表达式时,判定结果为False了,此时停止循环,退出整个while循环整体,程序向后运行。
i = 1
while i <=5:
print(i)
i = i + 1
print("Finished!")
while循环体(循环体就是之前我们说的“附属代码块”)中的代码被重复执行,这称为迭代。
break语句
如果我们想过早(在条件表达式变为False之前)地结束while循环,可以使用break语句。
当程序运行过程中,在循环时遇到break,这时break语句会使循环立即结束。
continue语句
与break不同,如果碰到continue,程序会跳回到循环的顶部(跳过单次循环的后续附属代码),而不是停止整个循环。
i = 0
while True:
i = i +1
if i == 2:
print("Skipping 2")
continue
if i == 5:
print("Breaking")
break
print(i)
print("Finished")
i = 0
while True:
i = i +1
if i == 2:
print(("Skipping ")+str(i))
continue
if i == 5:
print(("Breaking at ")+str(i))
break
print(i)
print("Finished")
运行结果:
1
Finished
Skipping 2
3
Finished
4
Finished
Breaking at 5
数组(lists)
数组是Python中的另一种对象。 它们用于存储一系列值,也就是说,一个数组里可以存储多个独立值。
使用方括号创建数组,数组里的每个值称为数组的元素。元素与元素之间使用逗号分隔。
可以利用方括号中某个元素的位次(索引值)来直接调用数组中的这个特定元素。
如果想检查某个元素是否在数组中,可以使用in运算符。 如果这个元素在数组中出现一次或多次,就返回True,否则返回False。
如果想检查某个元素是否不在数组中,可以按以下这几种方式来使用not运算符。
nums = [1, 2, 3]
print(not 4 in nums)
print(4 not in nums)
print(not 3 in nums)
print(3 not in nums)
改变数组的另一种方法是使用**append函数**。 这会将一个新的元素添加到现有数组的末尾。
在append前面的点,表示它是“数组”这个类的方法。 方法将在后面的文章中详细解释。
要获取数组中的元素数,可以使用**len函数**。
nums = [1, 2, 3]
nums.append(4)
print(nums)
print(len(nums))
[1, 2, 3, 4]
4
还有一个方法叫**insert**,类似于append,它允许我们在数组中的任何位置插入新元素,而不仅仅是在最后。我们通过把要插入的位置的索引值当做一个参数,来确定插入的位置。(比如下面例子中那个红色的1,表示新插入的元素在插入后的数组中位于索引值为1的位置,也就是新元素是插入后数组的第二个元素)
words = ["Python", "fun"]
words.insert(1, "is")
print(words)
['Python', 'is', 'fun']
还有一个方法叫index,它被用来查找数组中的第一个与指定的查找内容相匹配的数组内元素,并返回其索引值。
如果指定的内容不在数组中,则会引发ValueError。
letters = ['p', 'q', 'r', 's', 'p', 'u']
print(letters.index('r'))
print(letters.index('p'))
print(letters.index('z'))
range函数
range函数被用来创建一个连续的数字数组。
举个例子,下面的代码可以生成一个包含10个连续整数的数组,默认从0开始数。
numbers = list(range(10))
print(numbers)
要注意的是,在上面例子的代码中,我把range(10)的结果先利用list()函数转换成了数组类型,然后才赋予给了numbers。也就是说,在这里,“转换成数组类型”这一步是必要的,因为range函数本身的返回结果是一个range类型的对象,而非list类型。如果要将其赋值给一个数组对象,则必须先将其转换为数组。
正如上文所说,如果只使用一个参数调用range函数(也就是说range后面的括号里只写一个参数),那么range函数会生成一个range对象,这个range对象里面的值从0开始,range对象里的元素总数等于该参数。
如果使用两个参数调用它,它将生成从第一个参数到第二个参数(不含第二个参数)的range对象。
numbers = list(range(3, 8))
print(numbers)
numbers = list(range(3))
print(numbers)
print(range(20) == range(0, 20))
另外,range函数还可以有第三个参数,用来规定每两个元素之间的差值。
numbers = list(range(5, 20, 2))
print(numbers)
while循环和数组的组合使用
有时,我们需要在数组中的每个元素上执行代码,这称为迭代,可以使用while循环和计数器变量来完成。
words = ["hello", "world", "spam", "eggs"]
counter = 0
max_index = len(words) - 1
while counter <= max_index:
word = words[counter]
print(word + "!")
counter = counter + 1
最大的索引值(上面例子中以max_index变量表示)比总元素数量少1,因为索引值是从0开始数的。
for循环
如果使用while循环来遍历数组,需要相当多的代码,因此Python提供了for循环作为实现相同功能的简便方式。
可以使用for循环编写前一个示例中的相同功能的代码,如下所示:
words = ["hello", "world", "spam", "eggs"]
for word in words:
print(word + "!")
Python中的for循环与其他语言中的for循环有所区别,类似于C语言等语言中的foreach循环方式。
for循环通常用于重复执行某些代码一定的次数。 下面的例子是通过将for循环与range对象进行组合来完成的。
for i in range(5):
print("hello!")
计算器代码
while True:
print("Options:")
print("Enter 'add' to add two numbers")
print("Enter 'subtract' to subtract two numbers")
print("Enter 'multiply' to multiply two numbers")
print("Enter 'divide' to divide two numbers")
print("Enter 'quit' to end the program")
user_input = input(": ")
if user_input == "quit":
break
elif user_input == "add":
num1 = float(input("Enter a number: "))
num2 = float(input("Enter another number: "))
result = str(num1 + num2)
elif user_input == "subtract":
...
elif user_input == "multiply":
...
elif user_input == "divide":
...
else:
print("Unknown input")
print("The answer is " + result)