Python-CSP 201912-1 报数

这篇博客介绍了一个Python算法,用于解决一种特殊的计数游戏。游戏中,从1开始计数,遇到7的倍数或包含数字7的数时会跳过。博主通过创建字典存储四位玩家遇到‘跳过数’的次数,并使用循环和条件判断来更新计数。最终,展示了如何统计并输出每位玩家的跳过次数。
摘要由CSDN通过智能技术生成

前言

此题的解决方法不唯一,你可以参考一下对应的解题思路,建议不要直接复制黏贴代码。

一、题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、算法思想

  • 大致的题意是说从1开始计数,一遇到7的倍数或数字中含有7时,就跳过这个数
  • 直到成功计数的个数达到n个为止
  • 而我们需要统计输出的是玩这个计数游戏的甲乙丙丁四人遇到“跳过数”次数,并输出四人的结果。
  • 我使用的存储结构是字典,以四个人的中文名称作为对应的键,并初始化值为0
  • 并定义了两个变量,一个是当前报的数,一个是当前报数的人名。
  • 先创建了一个函数,用于判断一个数是否含有7或为7的倍数
  • python中可以使用in方法来判断一个字符存在于另一个字符串中,所以可以直接使用if ’7’ in str(number)来判断转换为字符串后的number中是否含有数字7
  • 使用死循环进行计数,当成功计数达到n个就break出去
  • 符合“跳过数”时就统计一下
  • 因为遇到“跳过数”时不能算到成功计数个数里,所以需要自减运算与后面的自加运算进行抵消。
  • 之后就是将当前玩家跳到下一玩家,当前数加1,成功计数个数加1

三、代码

在这里插入图片描述

# coding=utf-8
#作者:小狐狸
#题目:报数

def check_seven(number):
    '''
    查看输入的数是否含有7或7的倍数,number为int类型
    是返回True,否返回False
    '''
    if number%7==0:
        return True
    if '7' in str(number):
        return True
    return False

if __name__ == "__main__":
    n = int(input())
##    print(n)
    dic = {}
    dic['甲'] = 0
    dic['乙'] = 0
    dic['丙'] = 0
    dic['丁'] = 0
    now = 1 #当前的数
    now_player = '甲' #当前报数的玩家
    number = 0 #已报的个数
    while True:
        if number==n: #报了n次结束
            break
        if check_seven(now): #若当前玩家的数符合跳过数的条件时
            dic[now_player] += 1
            number -= 1 #与之后的次数累加消除
        #跳到下一玩家
        if now_player == '甲':
            now_player = '乙'
##            print('甲',now)
        elif now_player == '乙':
            now_player = '丙'
##            print('乙',now)
        elif now_player == '丙':
            now_player = '丁'
##            print('丙',now)
        elif now_player == '丁':
            now_player = '甲'
##            print('丁',now)
        now += 1
        number += 1
    print(dic['甲'])
    print(dic['乙'])
    print(dic['丙'])
    print(dic['丁'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦之海岛

创作不易,狐狸叹气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值