鱼C论坛

 找回密码
 立即注册
查看: 2875|回复: 20

[已解决]python 数学问题2

[复制链接]
发表于 2020-4-6 10:31:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
两人从1开始轮流数数,最少数1个数,最多数3个数,谁数到30谁赢,怎么数?
这道题用python可以解吗?
诚问各位大佬
最佳答案
2020-4-6 11:43:38
  1. def is_right(b):
  2.     b_ = int(b)
  3.     if b_ > 0 and b_ < 4:
  4.         return b_
  5.     else:
  6.         while True:
  7.             b = input('请输入1-3之间的数字:')
  8.             b_ = int(b)
  9.             if b_ > 0 and b_ < 4:
  10.                 return b_


  11.             
  12. def Fun(number = 10):
  13.     Temp = number
  14.     sum_ = 0
  15.     a = 0#程序
  16.     b = 0#玩家
  17.     if number % 4 != 0:#如果不是4的倍数
  18.         a = number % 4
  19.         print('a:', a)
  20.         sum_ += a
  21.         if (sum_ >= Temp):#判断是否python赢了
  22.             return False
  23.         number -= a
  24.         print("目前总和为:", sum_)
  25.         print('剩余:', number)
  26.     else:#如果一开始就是4的倍数
  27.         while True:
  28.             a = 1
  29.             
  30.             if number % 4 != 0:#如果对面失误
  31.                 a = number % 4
  32.                 sum_ += a
  33.                 if (sum_ >= Temp):#判断是否python赢了
  34.                     return False
  35.                 number -= a
  36.                 print('a:', a)
  37.                 print("目前总和为:", sum_)
  38.                 print('剩余:', number)
  39.                 break
  40.             sum_ += a
  41.             number -= a
  42.             print('a:', a)
  43.             print("目前总和为:", sum_)
  44.             print('剩余:', number)
  45.             if (sum_ >= Temp):#判断是否python赢了
  46.                 return False
  47.             b = input("输入数字:")
  48.             b = is_right(b)
  49.             sum_ += b
  50.             if (sum_ >= Temp):#判断是否玩家赢了
  51.                 return True
  52.             number -= b
  53.             print("目前总和为:", sum_)
  54.             print('剩余:', number)
  55.    
  56.     while True:#维持剩余的数是4的倍数
  57.         b = input("输入数字:")
  58.         b = is_right(b)
  59.         sum_ += b
  60.         number -= b
  61.         print("目前总和为:", sum_)
  62.         print('剩余:', number)
  63.         if (sum_ >= Temp):#判断是否玩家赢了
  64.             return True

  65.         a = number % 4
  66.         sum_ += a
  67.         number -= a
  68.         print('a:', a)
  69.         print("目前总和为:", sum_)
  70.         print('剩余:', number)
  71.         if (sum_ >= Temp):#判断是否python赢了
  72.             return False
  73.         
  74.         
  75. if False == Fun(8):
  76.     print("lose")
  77. else:
  78.     print('win')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-6 10:41:21 | 显示全部楼层
写两个循环遍历应该很简单就实现了,数数可以用random模块引入,不难的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 10:41:44 | 显示全部楼层
有人能解答一下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 10:43:05 | 显示全部楼层
抛弃大学 发表于 2020-4-6 10:41
写两个循环遍历应该很简单就实现了,数数可以用random模块引入,不难的

我知道,主要是输出有困难
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 10:57:08 | 显示全部楼层
是这个问题太难了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 11:05:11 | 显示全部楼层
如果是4的话,第二个人一定输, 也就是说要在对手说数字之前把数字维持在4的倍数(应该是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 11:06:59 | 显示全部楼层
x-Aaron 发表于 2020-4-6 11:05
如果是4的话,第二个人一定输, 也就是说要在对手说数字之前把数字维持在4的倍数(应该是这样)

第一个人要赢就要出2吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 11:15:43 | 显示全部楼层
天假之名 发表于 2020-4-6 11:06
第一个人要赢就要出2吧

是的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 11:16:52 | 显示全部楼层
天假之名 发表于 2020-4-6 11:06
第一个人要赢就要出2吧

30对4取余是2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 11:21:07 | 显示全部楼层

这样的话我就有思路了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 11:28:39 | 显示全部楼层
天假之名 发表于 2020-4-6 11:21
这样的话我就有思路了

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 11:30:41 | 显示全部楼层

我马上就写好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 11:43:38 | 显示全部楼层    本楼为最佳答案   
  1. def is_right(b):
  2.     b_ = int(b)
  3.     if b_ > 0 and b_ < 4:
  4.         return b_
  5.     else:
  6.         while True:
  7.             b = input('请输入1-3之间的数字:')
  8.             b_ = int(b)
  9.             if b_ > 0 and b_ < 4:
  10.                 return b_


  11.             
  12. def Fun(number = 10):
  13.     Temp = number
  14.     sum_ = 0
  15.     a = 0#程序
  16.     b = 0#玩家
  17.     if number % 4 != 0:#如果不是4的倍数
  18.         a = number % 4
  19.         print('a:', a)
  20.         sum_ += a
  21.         if (sum_ >= Temp):#判断是否python赢了
  22.             return False
  23.         number -= a
  24.         print("目前总和为:", sum_)
  25.         print('剩余:', number)
  26.     else:#如果一开始就是4的倍数
  27.         while True:
  28.             a = 1
  29.             
  30.             if number % 4 != 0:#如果对面失误
  31.                 a = number % 4
  32.                 sum_ += a
  33.                 if (sum_ >= Temp):#判断是否python赢了
  34.                     return False
  35.                 number -= a
  36.                 print('a:', a)
  37.                 print("目前总和为:", sum_)
  38.                 print('剩余:', number)
  39.                 break
  40.             sum_ += a
  41.             number -= a
  42.             print('a:', a)
  43.             print("目前总和为:", sum_)
  44.             print('剩余:', number)
  45.             if (sum_ >= Temp):#判断是否python赢了
  46.                 return False
  47.             b = input("输入数字:")
  48.             b = is_right(b)
  49.             sum_ += b
  50.             if (sum_ >= Temp):#判断是否玩家赢了
  51.                 return True
  52.             number -= b
  53.             print("目前总和为:", sum_)
  54.             print('剩余:', number)
  55.    
  56.     while True:#维持剩余的数是4的倍数
  57.         b = input("输入数字:")
  58.         b = is_right(b)
  59.         sum_ += b
  60.         number -= b
  61.         print("目前总和为:", sum_)
  62.         print('剩余:', number)
  63.         if (sum_ >= Temp):#判断是否玩家赢了
  64.             return True

  65.         a = number % 4
  66.         sum_ += a
  67.         number -= a
  68.         print('a:', a)
  69.         print("目前总和为:", sum_)
  70.         print('剩余:', number)
  71.         if (sum_ >= Temp):#判断是否python赢了
  72.             return False
  73.         
  74.         
  75. if False == Fun(8):
  76.     print("lose")
  77. else:
  78.     print('win')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 11:49:11 | 显示全部楼层
  1. import random

  2. def myFunc(n, stepper):
  3.     """
  4.     :参数 n: 目标数
  5.     :参数 stepper: 步进范围(可以走几步的最大值)
  6.     :返回值: (flag,first_num,total_stepper)
  7.             第一个出还是第二个出:flag=1,第一个出;flag = 0第二个出
  8.                 如果第一个出:第一次出多少 first_num
  9.                 如果第二个出:出的数总和为多少 total_stepper
  10.     """
  11.     total_stepper = stepper + 1  # 组合数
  12.     if n % total_stepper == 0:  #能整除的情况
  13.         print("目标数:{},步进范围:{},组合数:{}".format(n, stepper, total_stepper))
  14.         flag = 0   # 对方先出
  15.         return (flag, 0, total_stepper)
  16.     else:
  17.         v_num = n - stepper - 1  # 拿到v_num就一定能数到目标数
  18.         if v_num % total_stepper == 0:   # v_num能被组合数整除的情况
  19.             flag = 0    # 对方先出
  20.             print("目标数:{}, 步进范围:{}, 组合数:{}, 是否第一个出:{}".format(n, stepper, total_stepper, flag))
  21.             return (flag, 0, total_stepper)
  22.         else:
  23.             flag = 1   # 我方先出
  24.             first_num = v_num % total_stepper    # 我第一次数的数,这个数将v_num钝化为可以被组合数整除的数
  25.             print("目标数:{}, 步进范围:{}, 组合数:{}, 是否第一个出:{}, 出多少:{}".format(n, stepper, total_stepper, flag, first_num))
  26.             return (flag, first_num, total_stepper)

  27. print(myFunc(30,3))
复制代码


看看这个怎么样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-6 12:10:27 | 显示全部楼层

else里的if好像没有用到啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 12:54:18 | 显示全部楼层
x-Aaron 发表于 2020-4-6 12:10
else里的if好像没有用到啊

v_num能被组合数整除的情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 12:55:25 | 显示全部楼层

这个最佳就给你好吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 13:12:01 | 显示全部楼层

你不回我就给你了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-6 13:12:46 | 显示全部楼层

好吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-6 13:28:57 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 13:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表