《python语言程序设计基础》(第二版)第四章课后习题参考答案

第四章 程序的控制结构

4.1 猜数游戏
import random

# 生成一个0~9之间的整数
number = random.randint(0, 9)
# 记录猜的次数
guesses = 0

# 循环,直到猜中为止
while True:
    # 读取用户输入的数字
    guess = int(input("请输入一个0~9之间的整数:"))

    # 猜的次数加1
    guesses += 1

    # 判断猜的数字和预设的数字的大小关系
    if guess > number:
        print("遗憾,太大了!")
    elif guess < number:
        print("遗憾,太小了!")
    else:
        print("预测{}次,你猜中了!".format(guesses))
        break
4.2 统计不同字符个数

代码一:

str = input("请输入字符串:")
eng, chin, num, space, other = 0, 0, 0, 0, 0
for i in str:
    if '\u4E00' <= i <= '\u9FFF':
        chin += 1
    elif 'a' <= i <= 'z' or 'A' <= i <= 'Z':
        eng += 1
    elif '0' <= i <= '9':
        num += 1
    elif i == " ":
        space += 1
    else:
        other += 1
print("中文字符有{}个\n英文字符有{}个\n数字有{}个\n空格有{}个\n其他字符有{}个".format(chin, eng, num, space, other))

代码二:

# 从标准输入获取一个字符串
string = input("请输入字符串:")

# 初始化一个字典,用于记录不同类型的字符数量
count = {'eng': 0, 'chin': 0, 'num': 0, 'space': 0, 'other': 0}

# 遍历字符串中的每个字符
for char in string:
    if '\u4e00' <= char <= '\u9fff': # 如果是中文字符
        count['chin'] += 1 # 中文字符数量+1
    elif char.isdigit(): # 如果是数字字符
        count['num'] += 1 # 数字字符数量+1
    elif char.isspace(): # 如果是空格字符
        count['space'] += 1 # 空格字符数量+1
    elif char.isalpha(): # 如果是英文字母字符
        count['eng'] += 1 # 英文字母字符数量+1
    else: # 如果是其他类型的字符
        count['other'] += 1 # 其他类型的字符数量+1

# 输出不同类型字符的数量
print(f"中文字符有{count['chin']}个\n英文字符有{count['eng']}个\n数字有{count['num']}个\n空格有{count['space']}个\n其他字符有{count['other']}个")

4.3 最大公约数计算
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))


# 求最大公约数
def gcd(a, b):
    if a < b:
        a, b = b, a
    while b != 0:
        r = a % b
        a = b
        b = r
    return a


# 求最小公倍数
def lcm(a, b):
    return a * b // gcd(a, b)


print("最大公约数为:", gcd(a, b))
print("最小公倍数为:", lcm(a, b))

4.4 猜数字游戏续(0~100)
import random

# 生成一个0~100之间的整数
number = random.randint(0, 100)
# 记录猜的次数
guesses = 0

# 循环,直到猜中为止
while True:
    # 读取用户输入的数字
    guess = int(input("请输入一个0~100之间的整数:"))

    # 猜的次数加1
    guesses += 1

    # 判断猜的数字和预设的数字的大小关系
    if guess > number:
        print("遗憾,太大了!")
    elif guess < number:
        print("遗憾,太小了!")
    else:
        print("预测{}次,你猜中了!".format(guesses))
        break
4.5 猜数字游戏续
import random
# 生成一个0~100之间的整数
number = random.randint(0, 100)
# 记录猜的次数
guesses = 0

while True:
    try:
        # 用户输入猜测的数字,要求输入必须为整数
        guess = int(input("请输入一个0~100之间的整数:"))

        guesses += 1  # 猜测次数加1

        if guess > number:
            print("遗憾,太大了!")
        elif guess < number:
            print("遗憾,太小了!")
        else:
            print("预测{}次,你猜中了!".format(guesses))
            break
    except:
        print("输入内容必须为整数!请重新输入")  # 如果用户输入的不是整数,则提示用户重新输入
4.6 羊车门问题
import random

# 初始化三扇门
doors = ['goat', 'goat', 'goat']

# 随机放置汽车
car_index = random.randint(0, 2)
doors[car_index] = 'car'

# 参赛者随机选择一扇门
player_choice = random.randint(0, 2)
print("你选择了门", player_choice + 1)

# 主持人开启一扇有山羊的门
# 主持人不能开启参赛者选择的门和有汽车的门
opened_door_indices = [i for i in range(3) if i != player_choice and i != car_index]
goat_index = random.choice(opened_door_indices)
print("主持人打开了门", goat_index + 1, ",里面是一只山羊")

# 参赛者是否更换选择
change_choice = input("你想要更换选择吗?(y/n)").lower().startswith('y')
if change_choice:
    player_choice = [i for i in range(3) if i != player_choice and i != goat_index][0]
    print("你更换了选择,现在选择的是门", player_choice + 1)

# 输出结果
if doors[player_choice] == 'car':
    print("恭喜你猜中了汽车!")
else:
    print("很遗憾,你猜错了,汽车在门", car_index + 1, "后面")
4.7 异常处理改造实例1
try:
    TempStr = input("请输入带有符号的温度值:")
    if TempStr[-1] in ['F', 'f']:
        C = (eval(TempStr[0:-1]) - 32) / 1.8
        print("华氏温度{}转换为摄氏度温度是:{:.2f}C".format(TempStr, C))
    elif TempStr[-1] in ['C', 'c']:
        F = eval(TempStr[0:-1]) * 1.8 + 32
        print("摄氏温度{}转换为华氏温度是:{:.2f}F".format(TempStr, F))
    else:
        raise ValueError("输入格式错误")
except ValueError as e:
    print("输入错误!")
  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值