Python物不知数

“物不知数”出自《孙子算经》。题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”。

意思是说有一些物品,不知道有多少个,如果一次3 个 3 个的数,还多出 2 个;一次5 个 5 个的数则多出 3 个;一次 7 个 7 个的数也会多出 2 个。
现假设物品总数不超过 n (n<=1000),请编程计算满足条件的物品个数并输出。
一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;
7个7个数也会多出2个。输入一个正整数,从小到大依次输出所有不超过输入数字
且满足条件的物品数量,有多个答案时每行输出一个。
例如输入:200
输出:
23
128

n = int(input())

其实就是找出除3余2、除5余3、除7余2 的数

n = int(input())

for i in range(n+1):
    if i%3 == 2 and i%5 == 3 and i%7 == 2:
        print(i)
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1083834
  • 除此之外, 这篇博客: python小白自学基础知识(二)附加(人狗大战游戏)中的 根据函数和面向对象(类)的知识,概括为一个总的例子(该例子我在其他的文章中见过),作为上课的内容,老师要求实现人狗大战游戏代码编写,内容中包含:人初始化的金钱额度,金钱用于买枪,枪对狗的伤害,以及狗的血量,最后是人在多少次把狗打死(其中没有涉及到人打狗的同时,狗也在咬人,但是却定义了狗对人的伤害,有兴趣的朋友可以继续把游戏做下去) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 人狗大战游戏

    #创建一个类(该类的属性会为后面的类继承调用)
    class lable:
        def __init__(self, name, aggr, hp):  #类属性
            self.name = name
            self.aggr = aggr
            self.hp = hp
    
    class dog(lable):  #创建狗的类,并且继承lable(父类)的属性
        def __init__(self, name, aggr, hp, kind):
            lable.__init__(self, name, aggr, hp)
            self.kind = kind
    	#定义狗的攻击方法
        def attack(self, person):
        	#人的血等于人当前的血量减去狗的攻击力
            person.hp -= self.aggr
    
    class person(lable): #创建人的类,同样继承lable(父类)的属性
        def __init__(self, name, aggr, hp, sex):
            lable.__init__(self, name, aggr, hp)
            self.sex = sex
            #初始化人的钱为0
            self.money = 0
    	#定义人的攻击方法,参数对象是狗
        def person_attack(self, dog):
        	#狗的血量等于狗当前的血量减去人的攻击力
            dog.hp -= self.aggr
    	#定义人买枪的方法
        def person_gun(self, gun):  
            if self.money >= gun.g_price:
            	#如果钱够就买枪
                self.money -= gun.g_price
                self.gun = gun
                #枪的攻击力赋值与人的攻击力
                self.aggr = gun.g_aggr
            else:
                print('余额不足,请充值金额打狗!')
    
    class gun:  #创建gun枪的类
    	#类属性 记录子弹数量,初始化为0
        num_bullet = 0
        def __init__(self, name, aggr, zds, price):
            self.g_name = name
            self.g_aggr = aggr
            self.g_zds = zds
            self.g_price = price
     	def hand_w(self,dog):
     	#定义人开枪的方法
     		while self.g_zds > 0:#保证子弹数一直是正数
     			if dog.hp > 0:
     				#人用枪打狗,伤害为枪伤害的二倍
     				dog.hp -= self.g_aggr * 2
         			self.g_zds -= 1
                    gun.num_bullet += 1
                    print('正在使用武器攻击(伤害为{}的二倍)!'.format(self.g_aggr))
                    print('当前{}的血条为{}'.format(dog.name,dog.hp))
                else:  # 防止程序陷入死循环
                    break
    #创建实例对象
    zangao = dog('zangao', 100, 200, '咬人')
    tom = person('tom', 50, 10, '打狗')
    m4a1 = gun('m4-a1', 20, 3, 500)
    tom.money += 1000
    #假想藏獒不攻击人类,只有人类用枪打狗的过程
    # 构造一个循环体,当[zangao]的hp<=0时,退出循环
    # 固定子弹数量
    bullet_full = m4a1.g_zds
    while zangao.hp > 0:
        # 使用gun攻击
        # 判断tom是否还有钱购买枪攻击zangao,如果没有终止循环
        while tom.money >= m4a1.g_price:
            # 购买武器
            tom.person_gun(m4a1)
            # 我们需要重置一下子弹的数量
            m4a1.g_zds = 3
            # 使用武器攻击(hand_w方法自带判断,这里不用加判断了)
            m4a1.hand_w(zangao)
            
    #输出消耗打狗的总子弹数
    print('使用子弹数量为[%d]' % gun.num_bullet)
    

    (这个小例子重点在掌握面向对象的继承,还有定义函数的方法,以及一些逻辑关系,程序里没有实现让狗攻击人,然后人在攻击狗,完全就是单纯的人打狗。至于函数内定义的狗的攻击力,可以作为是为了学习面相对象的继承。一起加油呀!)

    n=int(input(""))
    count=0
    for i in range(n):
        if i%2==1 and i%3==0 and i%4==1 and i%5==1 and i%6==3 and i%7==0 and i%8==1 and i%9==0:
            print(i)