Week 2 Loops
While Loop
示例代码如下:
i = 0
while i < 3:
print("meow")
i = i + 1
# 另一种写法
# i += 1
代码流程如下:
For Loops
示例代码如下:
for i in [1, 2, 3]:
print("meow")
这个代码正确,但是有个缺陷:如果需要计数到很大,会十分麻烦。
改进如下:
for i in range(3):
print("meow")
当循环中不需要使用变量时,可以用如下写法:
for _ in range(3):
print("meow")
还有一种仅在 Python 中支持的语法:
print("meow\n" * 3, end="")
# 加 \n 是因为每一个单词后面需要换行
# end="" 最后不需要换行
这样的写法是更简洁,但可读性变差。
Improving with User Input
上述代码将次数进行硬编码,修改程序让其可以接受用户的输入,并且必须得是正数:
while True:
n = int(input("What's n? "))
if n < 0:
continue
else:
break
for _ in range(n):
print("meow")
上述代码中出现两个新关键词:
continue
:转到循环的下一次迭代break
:在完成所有迭代之前跳出循环
可以对上述代码进行改进:
while True:
n = int(input("What's n? "))
if n > 0:
break
for _ in range(n):
print("meow")
将上述的代码通过构建新的函数进行改写:
def main():
meow(get_number())
def get_number():
while True:
n = int(input("What's n? "))
if n > 0:
return n
def meow(n):
for _ in range(n):
print("meow")
main()
Lists and Length
列表表示:students = ["Hermoine", "Harry", "Ron"]
列表是可迭代的,所以可以直接循环:
students = ["Hermoine", "Harry", "Ron"]
for student in students:
print(student)
# 这里的 student 是指列表中的每个值
也可以换一种写法:
students = ["Hermoine", "Harry", "Ron"]
for i in range(len(students)):
print(i + 1, students[i])
len()
:得到列表的长度students[0]
:这种写法是取列表 students 里索引为 0 的值
更多关于列表的内容到官网进行查看 list
Dictionaries
数据结构:字典,用 {key: value}
构成包括键和相应的值
students = {
"Hermoine": "Gryffindor",
"Harry": "Gryffindor",
"Ron": "Gryffindor",
"Draco": "Slytherin",
}
# "Hermoine": "Gryffindor"
# 键 : 值
取值的方法如下:
students["Hermoine"]
# 得到 Gryffindor
字典也和列表一样是可迭代的,故可以修改代码如下:
students = {
"Hermoine": "Gryffindor",
"Harry": "Gryffindor",
"Ron": "Gryffindor",
"Draco": "Slytherin"
}
for student in students:
print(student)
结果是仅打印键的值,如果想同时打印键和相应的值呢?
students = {
"Hermoine": "Gryffindor",
"Harry": "Gryffindor",
"Ron": "Gryffindor",
"Draco": "Slytherin"
}
for student in students:
print(student, students[student], sep=", ")
students[student]
中 student 是键,所以整体是查找键对应的值
如果有下面表中的信息需要记录:
这里需要使用到字典列表:
students = [
{"name": "Hermoine", "house": "Gryffindor", "patronus": "Otter"},
{"name": "Haryy", "house": "Gryffindor", "patronus": "Stage"},
{"name": "Ron", "house": "Gryffindor", "patronus": "Jack Russell terrier"},
{"name": "Draco", "house": "Slytherin", "patronus": None}
]
同时,还有一个 Python 的关键词 None
需要注意,这里代表没有值的意思
同理,想要打印出需要值,方法如下:
students = [
{"name": "Hermoine", "house": "Gryffindor", "patronus": "Otter"},
{"name": "Haryy", "house": "Gryffindor", "patronus": "Stage"},
{"name": "Ron", "house": "Gryffindor", "patronus": "Jack Russell terrier"},
{"name": "Draco", "house": "Slytherin", "patronus": None}
]
for student in students:
print(student["name"], student["house"], student["patronus"], sep=", ")
Mario
如果想用代码实现马里奥这个游戏里的图形:
方式一:
print("#")
print("#")
print("#")
方式二:
for _ in range(3):
print("#")
方式三:
def main():
print_column(3)
def print_column(height):
for _ in range(height):
print("#")
main()
上面三种方法看似第一种方法是最简单的,但第三种方法可以帮助解决更复杂的问题。
如果想要实现一行:
def main():
print_row(4)
def print_row(width):
print("?" * width)
main()
如果想要打印的是一个正方形:
def main():
print_square(3)
def print_square(size):
# 打印每一行
for i in range(size):
# 打印每一行中的方块
for j in range(size):
print("#", end="")
# 打印完一行后需要换行
print()
main()
还可以改进:
def main():
print_square(3)
def print_square(size):
# 打印每一行
for i in range(size):
print_row(size)
# 打印每一行中的内容
def print_row(width):
print("#" * width)
main()