Python语言程序设计基础(第二版)P121代码示例

P121第四章课后习题代码示例

4.1 猜数游戏。在程序中预设一个0-9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”;小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中数字为止,显示“预测N次,你猜中了!” ,其中N 为用户输入数字的次数。

#猜数字游戏
N = 0
while True:
    s = eval(input("请输入一个(0-9)的整数:"))

    if s in [0,1,2,3]:
        N += 1
        print("遗憾,太小了")
    elif s in [5,6,7,8,9]:
        N += 1
        print("遗憾,太大了")
    elif s in [4]:
        N += 1
        print("预测{}次,你猜中了".format(N))
        break
    else:
        print("请输入正确的数字")

4.2 统计不同字符个数。用户从键盘输入一行字符,编写一个程序,统计并输入其中英文字符、数字、空格的个数。

#统计不同字符个数
s = input("请输入一行英文:")
a = 0
b = 0
c = 0
try:
    for i in s:
        if ord('A') <= ord(i) <= ord('Z') or ord('a') <= ord(i) <= ord('z'):
            a += 1
        elif ord('0') <= ord(i) <= ord('9'):
            b += 1
        elif i == " ":
            c += 1
    print("英文字符有{}个,数字有{}个,空格字符有{}个。".format(a,b,c))
except:
    print("输入内容有误!")

在这里插入图片描述
4.3 最大公约数计算。从键盘接收两个整数,编写程序求出这两个整数的最大公约数和最小公倍数。

import math
#最大公约数计算。
def Yue(num0,num1):
    a = math.gcd(num0,num1)
    return a
#math库里找不到最小公约数的函数
# 最小公倍数计算
def Bei(num2,num3):
    b = []
    for i in range(1,(num2 * num3)+1):
        if i % num2 == 0 and i % num3 == 0:
            b.append(i)
            break #结束循环
    return b[0]

print("请输入要求的最大公约数")
num0 = eval(input("请输入第一个整数:"))
num1 = eval(input("请输入第二个整数:"))
print(Yue(num0,num1))

print("请输入要求的最小公倍数")
num2=int(input("请输入第一个整数:"))
num3=int(input("请输入第二个整数:"))
print(Bei(num2, num3))

在这里插入图片描述

最大公约数最小公倍数解法二:

def gcd(x, y):
    """求最大公约数"""
    (x, y) = (y, x) if x > y else (x, y)
    for factor in range(x, 0, -1):
        if x % factor == 0 and y % factor == 0:
            return factor


def lcm(x, y):
    """求最小公倍数"""
    return x * y // gcd(x, y)

学习了。

4.4 猜数字游戏续。其他游戏规则不变。让计算机随机产生一个预设数字,范围在1-100之间。

#猜数字游戏2
import random

N = 0
while True:
    s = random.randint(0,101)

    if s in list(range(0,40)):
        N += 1
        print("系统输入的是{}".format(s))
        print("遗憾,太小了")
    elif s in list(range(70,101)):
        N += 1
        print("系统输入的是{}".format(s))
        print("遗憾,太大了")
    elif s in list(range(40,69)):
        N += 1
        print("系统输入的是{}".format(s))
        print("预测{}次,猜中了".format(N))
        break
    else:
        pass

在这里插入图片描述
4.5 猜数游戏续。基于4.4程序,当用户输入的不是整数时,程序自动终止。

#猜数字游戏
N = 0
while True:
    try:
        s = eval(input("请输入一个(0-9)的整数:"))
        if s in [0,1,2,3]:
            N += 1
            print("你输入的数字是:{}".format(s))
            print("遗憾,太小了")
        elif s in [5,6,7,8,9]:
            N += 1
            print("你输入的数字是:{}".format(s))

            print("遗憾,太大了")
        elif s in [4]:
            N += 1
            print("预测{}次,你猜中了".format(N))
            break
    except:
        print("输入内容必须为整数!请重新输入!")

在这里插入图片描述
4.6 题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。请问:参赛者更换选择后能否增加猜中汽车的机会?

#羊车门问题
import random as r
#总次数
total=1000000    #1000,1W,10W,100W
#换与不换的获胜次数
win1=0
win2=0
for i in range(total):
    #模拟选择过程
    man=r.randint(1,3)
    car=r.randint(1,3)
    #结果:一开始为车门,不换+1.
    #     否则则一开始为羊门,换+1.
    if man==car:
        win1+=1
    else:
        win2+=1
print("在{}次实验中:".format(total))
print("若不更改门,获胜概率为{:.3}%.".format((win1/total)*100))
print("若更改门,获胜概率为{:.3}%.".format((win2/total)*100))

声明一下此答案uper写不出,参考这位大佬的参考答案分析的很不错(点击跳转)
感谢大佬指点。
4.7 完美优化猜数字游戏(换汤不换药)。附上源码供参考一波吧。

#猜拳数字完美版
N = 0
while True:
    try:
        s = eval(input("请输入一个(0-9)的整数:"))
        if s in [0,1,2,3]:
            N += 1
            print("你输入的数字是:{}".format(s))
            print("遗憾,太小了")
        elif s in [5,6,7,8,9]:
            N += 1
            print("你输入的数字是:{}".format(s))

            print("遗憾,太大了")
        elif s in [4]:
            N += 1
            print("预测{}次,你猜中了".format(N))
            break
        else:
            print("你输入的数字是:{}".format(s))
            print("请输入一个(0-9)的整数!!!")
    except:
        print("输入内容必须为整数!!!")

亲测代码都可以实现。如有优化更改之处留下宝贵意见!
uper创作不易,转载附上链接,感谢。

原创文章 27 获赞 34 访问量 2604

猜你喜欢

转载自blog.csdn.net/weixin_46313446/article/details/105365565
今日推荐