当前位置:   article > 正文

小甲鱼python课后作业十五

小甲鱼python课后作业十五

了不起的分支和循环(III)

1. 我们知道在游戏运行后,通常是玩家中断游戏或者主角被打败了,才会退出游戏。那么现在让你来开发一个游戏,你觉得应该如何实现这个机制(可以画流程图,也可以简单概述)?
  利用while循环来实现有些的主体,当触发退出游戏机制的时候(玩家中断游戏或者主角被打败了),通过 break语句跳出来。

在这里插入图片描述
2. 请问下面代码存在什么问题?

love = 'yes'
while love = 'yes':
    love = input("今天你还爱我吗:")
  • 1
  • 2
  • 3

  while 后面应该是判断 love 变量的值是否为 ‘yes’(love == ‘yes’),然而这里粗心少写了一个等号(=)。幸亏现在 Python 自动会帮你排查,条件部分写成赋值语句直接就给你一个 SyntaxError: invalid syntax。

3. 如果不上机,你能算出下面循环执行完毕之后,打印的值应该是多少吗?

i = 1
sum = 0
while i < 10:
    sum = sum + i
    i = i + 1
print(sum)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  45。注意,条件是 i < 10,也就是当 i 等于 10 的时候就退出循环了,所以是 1 + 2 + … + 9 = 45。如果是要加到 10,记得条件要改为 i <= 10 哦(初学者在这里特别容易出错)。

4. 请问下面代码是否会构成一个死循环?

x = 9
while x:
    print(x)
    x -= 3
    x += 1
  • 1
  • 2
  • 3
  • 4
  • 5

  会。循环的条件是 x,那么在这段代码中,只有当 x 的值为 0,循环才能退出。循环体的内容除了打印 x 的值,就是对 x 进行减 2 的操作(先减 3 再加 1)。由于初始值是 9,每执行一次循环减 2,它这辈子也不可能等于 0 的,所以是一个死循环。

5. 当程序跑起来之后,如果发现是死循环,如何强制退出呢?

  Ctrl+C 。实在不行,就强制关闭窗口吧

6. 以下两段代码实现相同的功能,你觉得哪一段代码的实现更优雅?

代码A:

password = ''
while password != "FishC":
    password = input("请输入密码:")
    
print("欢迎您来!")
  • 1
  • 2
  • 3
  • 4
  • 5

代码B:

while True:
    password = input("请输入密码:")
    if password == "FishC":
        break
    
print("欢迎您来!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  代码B

7. 请编写一个程序,实现如下图所示的效果:

while True:
    slogan = input("请输入一局口号(输入STOP结束)")
    if slogan == "STOP":
        break
    print(slogan)
  • 1
  • 2
  • 3
  • 4
  • 5

8. 大家还记得第 008 讲课后作业那个模拟抛硬币的题目吗?请增加代码,让它可以实现以下功能:

如果抛硬币的次数小于 100,则打印每次的结果,否则不打印。
统计最终正面和反面的次数。

import random
counts = int(input("请输入抛硬币的次数:"))
i = 0
n = 0
m = 0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)
    if counts >= 100:
        if num % 2:
            n += 1
        else:
            m += 1
        i += 1
    else:
        if num % 2:
            print("正面", end=" ")
            n += 1
        else:
            print("反面", end=" ")
            m += 1
        i += 1
print("")       #起到换行的作用
print("正面的次数:",n,sep='')
print("反面的次数:",m,sep='')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

改进:

import random

counts = int(input("请输入抛硬币的次数:"))

# 利用 ignore 变量来判断是否打印每次的结果
if counts > 100:
    ignore = True
else:
    ignore = False

heads = 0 # 统计正面的次数
tails = 0 # 统计反面的次数

i = 0
print("开始抛硬币实验……")
while i < counts:
    num = random.randint(1, 10)

    if num % 2:
        heads += 1
        if not ignore:       
            print("正面", end=" ")
    else:
        tails += 1
        if not ignore:
            print("反面", end=" ")

    i += 1

print("")
print("一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", heads, "次", sep="")
print("反面:", tails, "次", sep="")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

9. 终极考验:编写代码,让程序分别统计正反面最多出现连续的次数。不要使用超纲的知识。

import random
counts = int(input("请输入抛硬币的次数:"))
i = 0
n = 0        #统计正面次数
m = 0        #统计反面次数

last = 0     #记录上一次的状态
x = 0        #连续正面次数
y = 0        #连续反面次数
x_max = 0    #最多连续正面次数
y_max = 0    #最多连续反面次数
print("开始抛硬币实验......")
while i < counts:
    num = random.randint(1, 10)
    if counts >= 100:
        if num % 2:
            n += 1
            x += 1
            if last == 2:
                x = 1
            if x > x_max:
                x_max = x
            last = 1
        else:
            m += 1
            y += 1
            if last == 1:
                y = 1
            if y > y_max:
                y_max = y
            last = 2
        i += 1
    else:
        if num % 2:
            print("正面", end=" ")
            n += 1
            x += 1
            if last == 2:
                x = 1
            if x > x_max:
                x_max = x
            last = 1
        
        else:
            print("反面", end=" ")
            m += 1
            y += 1
            if last == 1:
                y = 1
            if y > y_max:
                y_max = y
            last = 2
        i += 1
print("")       #起到换行的作用
print("一共模拟了",counts,"次抛硬币,结果如下:",sep='')
print("正面:",n,"次",sep='')
print("反面:",m,"次",sep='')
print("最多连续正面:",x_max,"次",sep='')
print("最多连续反面:",y_max,"次",sep='')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

改进:

import random
counts = int(input("请输入抛硬币的次数:"))
i = 0
n = 0        #统计正面次数
m = 0        #统计反面次数
ignore = 0   #决定是否打印结果

last = 0     #记录上一次的状态
x = 0        #连续正面次数
y = 0        #连续反面次数
x_max = 0    #最多连续正面次数
y_max = 0    #最多连续反面次数
if counts >= 100:
    ignore = False
else:
    ignore = True

print("开始抛硬币实验......")
while i < counts:
    num = random.randint(1, 10)
    if num % 2:
        n += 1
        x += 1
        if last == 2:
            x = 1
        if x > x_max:
            x_max = x
        if ignore:
            print("正面", end=" ")
        last = 1
        
    else:
        m += 1
        y += 1
        if last == 1:
            y = 1
        if y > y_max:
            y_max = y
        if ignore:
            print("反面", end=" ")
        last = 2
    i += 1
    
print("")       #起到换行的作用
print("一共模拟了",counts,"次抛硬币,结果如下:",sep='')
print("正面:",n,"次",sep='')
print("反面:",m,"次",sep='')
print("最多连续正面:",x_max,"次",sep='')
print("最多连续反面:",y_max,"次",sep='')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/412512
推荐阅读
相关标签
  

闽ICP备14008679号