python之第四周作业

python之第四周作业

  • 统计大写和小写字母
  • 打印前t行的杨辉三角
  • 模拟猜数游戏
  • 计算字符匹配率
  • 24点游戏实现

第一题

要求: 编写函数,接收字符串参数,
返回一个元组,其中第一个元素为大写字母个数,
第二个元素为小写字母个数。

参考:

将ASCII字符转换为对应的数值即‘a’–>65,使用ord函数,ord(‘a’)

实例:

def CountAlphabet( strings):
     UAlphabet_list= []  #大写字母
     LAlphabet_list= []  #小写字母
     list_str = list(str(strings))
     for i in list_str:
         # 大写字母的ascll值
         if ord(i) in range(65,91):
             UAlphabet_list.append(i)
         elif ord(i) in range(97,123):
             LAlphabet_list.append(i)
     return (len(UAlphabet_list),len(LAlphabet_list))

if __name__ == "__main__":
    result=CountAlphabet("scnasSCBACaca6s54598465787#$%^&*((##$HVjhvcsa")
    print(result)

结果:

在这里插入图片描述

第二题

要求:

设计程序,编写函数,接收一个整数t为参数,
打印杨辉三角前t行。
第二种方法:
使用collections标准库的defaultdict实现上例的功能。
第一种方法

参考:

递推公式:f[1][1]=1 , f[i][j]=f[i-1][j-1]+f[i-1][j]

**说明:**第二种方法的库不是特别会用。

实例:

from collections import defaultdict as default
def PrintYHTriangle(row):
    f = [[1],[1,1]]
    for i in range(row-2):
        f.append([])
        length =len(f[i]) #上一级的长度
        f[i+2].append(1)  #杨辉三角的每一层的第一个和最后一个都是1,
        # 中间的为f[i][j]=f[i-1][j-1]+f[i-1][j]
        for j in range(1, length+1):
            f[i+2].append(f[i+1][j-1]+f[i+1][j])
        f[i + 2].append(1)
    for i in f:
        print(i)

def PrintYaHuTwo(row):
    way = default(list)
    way.update({1: [1]})
    way.update({2: [1, 1]})
    for i in range(row - 2):
        list_result = []
        length = len(way.get(i + 2))  # 上一级的长度
        list_result.append(1)  # 杨辉三角的每一层的第一个和最后一个都是1,
        # 中间的为f[i][j]=f[i-1][j-1]+f[i-1][j]
        for j in range(1, length):
            list_result.append(way.get(i + 2)[j - 1] + way.get(i + 2)[j])
        list_result.append(1)
        way.update({length + 1: list_result})
    for i in list(way.values()):
        print(i)

# 第二种方式:
if __name__ =="__main__":
    print("第一种方式:")
    row = int(input("输入整数t:"))
    PrintYHTriangle(row=row)
    print("第二种方式:")
    row = int(input("输入整数t:"))
    PrintYaHuTwo(row=row)

结果:

在这里插入图片描述

第三题

**要求:**编写函数模拟猜数游戏。
系统随机产生一个数,
玩家最多可以猜5次,
系统会根据玩家的猜测进行提示,
玩家则可以根据系统的提示对下一次的猜测进行适当调整。

实例:

import random
def GuessNumber():
    number = random.randint(1,100)
    i = 5;
    while i >0:
        print("你还剩余",i,"次猜测机会!!")
        num = int(input("请输入你所猜测的数字(你只有五次机会):"))
        if num > number:
            print("你所猜测的数字大于正确答案!")
        elif num < number:
            print("你所猜测的数字小于正确答案!")
        elif num == number:
            print("恭喜你猜到了正确答案!")
            break
        i-=1
        if i ==0:
            print("抱歉你的猜测次数已用完!!\n","正确答案是",number)

if __name__ =="__main__":
    GuessNumber()

结果:

在这里插入图片描述

第四题

要求:

设计程序,编写函数,
计算字符串匹配的准确率。以打字练习程序为例,
假设origin为原始内容,userInput为用户输入的内容,
下面的代码用来测试用户输入的准确率。

实例:

def CountAccuracy(originalContent,matchContent):
    orcon =list(originalContent)
    macon = list(matchContent)
    if orcon == macon:
        print("准确率为","100%")
    else:
        counts =0
        for i in range(len(macon)):
            if orcon[i] == macon[i]:
                counts += 1
        print("准确率为","{:4.2f}%".format((counts/len(orcon))*100))
if __name__ == "__main__":
    orcon ="设计程序,编写函数,计算字符串匹配的准确率。以打字练习程序为例,假设origin为原始内容,userInput为用户输入的内容,下面的代码用来测试用户输入的准确率。"
    macon = input("请输入:")
    CountAccuracy(orcon,macon)

结果:

在这里插入图片描述

第五题

要求:

24点游戏是指随机选取4张扑克牌(不包括大小王),
然后通过四则运算来构造表达式,如果表达式的值恰好等于24就赢一次。
下面的代码定义了一个函数用来测试随机给定的4个数是否符合24点游戏规则,
如果符合就输出所有可能的表达式

实例:

import random
from pprint import pprint
def PrintAll():
    style =["红桃","黑桃","方块","梅花"]
    playingCards = [i for i in range(2,11)]
    playingCards.append('J')
    playingCards.append('Q')
    playingCards.append('K')
    playingCards.reverse()
    playingCards.append('A')
    playingCards.reverse()
    playingCard = []
    # 选择四个数
    for i in range(4):
        value =random.randint(0,12)
        values = playingCards[value]
        playingCard.append({str(style[random.randint(0,3)]+str(values)):value+1})
    # pprint(playingCard)
    #把花色 和 值 分别储存到两个列表中以便使用
    CardColor =list( list(i.keys())[0] for i in playingCard)
    CardValue =list( list(i.values())[0] for i in playingCard)
    print("随机选取四个扑克牌为:")
    print(CardColor)
    result =DetermineWhetherItMeetsTheFourPointRule(
        CardValue[0],
        CardValue[1],
        CardValue[2],
        CardValue[3]
    )
    if len(result) ==0:
        print("很遗憾,没有符合的表达式")
    else:
        print("符合该条件的表达式有:")
        for i in result:
            print(i)
def DetermineWhetherItMeetsTheFourPointRule(number1, number2, number3, number4):
    result = []
    symbols =['+','-','*','/']
    #遍历     需要三个符号
    for s1 in symbols:
        for s2 in symbols:
            for s3 in symbols:

                #判断是否需要括号:
                if s1+s2+s3 == '+++' or  s1+s2+s3 == '***':
                    expression =["{}{}{}{}{}{}{}".format(number1,s1,number2,s2,number3,s3,number4)]
                else:
                    expression=[
                        "(({} {} {}) {} {}) {} {}".format(number1, s1, number2, s2, number3, s3, number4),
                        "({} {} {}) {} ({} {} {})".format(number1, s1, number2, s2, number3, s3, number4),
                        "({} {} ({} {} {})) {} {}".format(number1, s1, number2, s2, number3, s3, number4),
                        "{} {} (({} {} {}) {} {})".format(number1, s1, number2, s2, number3, s3, number4),
                        "{} {} ({} {} ({} {} {}))".format(number1, s1, number2, s2, number3, s3, number4)
                    ]
                    #检查表达式是否符合条件
                    #中间会报错  ZeroDivisionError: division by zero
                for i in expression:
                    try:
                        if eval(i) == 24:
                            result.append(i)
                    except ZeroDivisionError:
                        pass #把0作为除数的部分过滤
    #遍历结束
    return result
if __name__=="__main__":
    PrintAll()

结果:
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值