一、课程介绍

本节课将学习 for 循环与 if 判断的嵌套,实现更为复杂的逻辑,最终完成一个测试两个人是否契合的程序。

A019  《猜不透》编程 源码_for与if嵌套


二、重难点解析

A019  《猜不透》编程 源码_len_02len()

使用 len() 方法可以获取一个列表的元素个数,我们也把列表的元素个数称为列表长度

l = [0, 1, 2, 3]
print(len(l))

A019  《猜不透》编程 源码_len_03for 与 if 嵌套

for 循环与 if 判断可以互相嵌套使用,注意缩进的使用。

示例1:

for 循环
    if 判断

示例2:

if 判断
    for 循环

循环结构中嵌套使用分支结构时,每次循环都会进行 if 判断,根据判断结果选择执行对应的代码。

for 循环
    if 判断

代码示例:

for i in range(10):
    if i >= 5:
        print(1)
    else:
        print(2)

分支结构中嵌套循环结构时,先进行 if 判断,如果成立就会执行内部的 for 循环。

if 判断
    for 循环

代码示例:

a = 1
b = 2
if a < b:
    for i in range(3):
        print(1)
else:
    print(2)


三、单词卡

question [ˈkwestʃən] 问题

answer [ˈænsər] 回答

choice [tʃɔɪs] 选择

score [skɔːr] 分数


四、小试牛刀

4.1 源码操作

实现一个可以多次进行计算的计算器,可以不断输入任意两个数字和一个算术运算符,使得两个数字进行此运算符对应的数学运算。

比如第一次可以输入 3、+、2,会计算出 3+2 的结果为 5;第二次可以输入 4、-、2,会计算出 4-2 的结果为 2。

A019  《猜不透》编程 源码_for与if嵌套_04

for i in range(100):
    num1 = int(input('请输入第一个数字:'))
    symbol = input('请输入运算符(+、-、*、/):')
    num2 = int(input('请输入第二个数字:'))

    if symbol == '+':
        print(num1+num2)
    elif symbol == '-':
        print(num1-num2)
    elif symbol == '*':
        print(num1*num2)
    elif symbol == '/':
        print(num1/num2)
    else:
        print('你输入的运算符错误')
    print('---------------------------------------')

4.2 源码操作

实现一个猜数字的游戏。先随机获取一个指定范围(比如 1 到 10)内的整数,然后给 5 次机会猜这个数字。如果猜的数字比答案的整数小,则打印 '低了';如果猜的数字比答案的整数大,则打印 '高了';如果相等,则打印 '猜对了'。

A019  《猜不透》编程 源码_for与if嵌套_05

import random
num = random.randint(1, 10)

for i in range(5):
    choice = int(input('请输入你猜的数字:'))
    if choice < num:
        print('低了')
    elif choice > num:
        print('高了')
    else:
        print('猜对了')


五、扩展练习

A019  《猜不透》编程 源码_for与if嵌套_06

A019  《猜不透》编程 源码_len_07

import turtle

shapes = ['契合0.gif','契合1.gif','契合2.gif','契合3.gif','契合4.gif','契合5.gif']

for i in shapes:
    turtle.addshape(i)
p = turtle.Pen()
p.shape('契合0.gif')
questions = []
answers = []

questions.append('喜欢吃烧烤还是海鲜:')
answers.append('海鲜')
questions.append('喜欢喝柠檬红茶还是乌龙茶:')
answers.append('柠檬红茶')
questions.append('喜欢吃巧克力还是糖果:')
answers.append('糖果')
questions.append('喜欢游泳还是打羽毛球:')
answers.append('游泳')
questions.append('喜欢美术还是体育:')
answers.append('美术')

score = 0
for i in range(len(questions)):
    question = questions[i]
    answer = answers[i]
    choice = input(question)

    if choice == answer:
        print('喜好相同')
        score = score + 1
        p.shape(shapes[score])
    else:
        print('喜好不同')
print(score)

turtle.done()


六、大开脑洞

A019  《猜不透》编程 源码_len_08

import turtle
import random
p = turtle.Pen()

for i in range(10):
    p.penup()
    x = random.randint(-100, 100)
    y = random.randint(-100, 100)
    p.goto(x, y)
    p.pendown()
    choice = random.randint(1, 2)
    if choice == 1:
        for j in range(4):
            p.forward(100)
            p.left(90)
    elif choice == 2:
        p.forward(100)
        p.left(90)
        p.forward(50)
        p.left(90)
        p.forward(100)
        p.left(90)
        p.forward(50)
        p.left(90)
        
p.ht()
turtle.done()