python 数学问题2
两人从1开始轮流数数,最少数1个数,最多数3个数,谁数到30谁赢,怎么数?这道题用python可以解吗?
诚问各位大佬{:10_333:} 写两个循环遍历应该很简单就实现了,数数可以用random模块引入,不难的 有人能解答一下吗 抛弃大学 发表于 2020-4-6 10:41
写两个循环遍历应该很简单就实现了,数数可以用random模块引入,不难的
我知道,主要是输出有困难 是这个问题太难了吗 如果是4的话,第二个人一定输, 也就是说要在对手说数字之前把数字维持在4的倍数(应该是这样{:10_257:}) x-Aaron 发表于 2020-4-6 11:05
如果是4的话,第二个人一定输, 也就是说要在对手说数字之前把数字维持在4的倍数(应该是这样)
第一个人要赢就要出2吧 天假之名 发表于 2020-4-6 11:06
第一个人要赢就要出2吧
是的 天假之名 发表于 2020-4-6 11:06
第一个人要赢就要出2吧
30对4取余是2 x-Aaron 发表于 2020-4-6 11:16
30对4取余是2
这样的话我就有思路了 天假之名 发表于 2020-4-6 11:21
这样的话我就有思路了
{:10_257:} x-Aaron 发表于 2020-4-6 11:28
我马上就写好了 def is_right(b):
b_ = int(b)
if b_ > 0 and b_ < 4:
return b_
else:
while True:
b = input('请输入1-3之间的数字:')
b_ = int(b)
if b_ > 0 and b_ < 4:
return b_
def Fun(number = 10):
Temp = number
sum_ = 0
a = 0#程序
b = 0#玩家
if number % 4 != 0:#如果不是4的倍数
a = number % 4
print('a:', a)
sum_ += a
if (sum_ >= Temp):#判断是否python赢了
return False
number -= a
print("目前总和为:", sum_)
print('剩余:', number)
else:#如果一开始就是4的倍数
while True:
a = 1
if number % 4 != 0:#如果对面失误
a = number % 4
sum_ += a
if (sum_ >= Temp):#判断是否python赢了
return False
number -= a
print('a:', a)
print("目前总和为:", sum_)
print('剩余:', number)
break
sum_ += a
number -= a
print('a:', a)
print("目前总和为:", sum_)
print('剩余:', number)
if (sum_ >= Temp):#判断是否python赢了
return False
b = input("输入数字:")
b = is_right(b)
sum_ += b
if (sum_ >= Temp):#判断是否玩家赢了
return True
number -= b
print("目前总和为:", sum_)
print('剩余:', number)
while True:#维持剩余的数是4的倍数
b = input("输入数字:")
b = is_right(b)
sum_ += b
number -= b
print("目前总和为:", sum_)
print('剩余:', number)
if (sum_ >= Temp):#判断是否玩家赢了
return True
a = number % 4
sum_ += a
number -= a
print('a:', a)
print("目前总和为:", sum_)
print('剩余:', number)
if (sum_ >= Temp):#判断是否python赢了
return False
if False == Fun(8):
print("lose")
else:
print('win') x-Aaron 发表于 2020-4-6 11:43
import random
def myFunc(n, stepper):
"""
:参数 n: 目标数
:参数 stepper: 步进范围(可以走几步的最大值)
:返回值: (flag,first_num,total_stepper)
第一个出还是第二个出:flag=1,第一个出;flag = 0第二个出
如果第一个出:第一次出多少 first_num
如果第二个出:出的数总和为多少 total_stepper
"""
total_stepper = stepper + 1# 组合数
if n % total_stepper == 0:#能整除的情况
print("目标数:{},步进范围:{},组合数:{}".format(n, stepper, total_stepper))
flag = 0 # 对方先出
return (flag, 0, total_stepper)
else:
v_num = n - stepper - 1# 拿到v_num就一定能数到目标数
if v_num % total_stepper == 0: # v_num能被组合数整除的情况
flag = 0 # 对方先出
print("目标数:{}, 步进范围:{}, 组合数:{}, 是否第一个出:{}".format(n, stepper, total_stepper, flag))
return (flag, 0, total_stepper)
else:
flag = 1 # 我方先出
first_num = v_num % total_stepper # 我第一次数的数,这个数将v_num钝化为可以被组合数整除的数
print("目标数:{}, 步进范围:{}, 组合数:{}, 是否第一个出:{}, 出多少:{}".format(n, stepper, total_stepper, flag, first_num))
return (flag, first_num, total_stepper)
print(myFunc(30,3))
看看这个怎么样 天假之名 发表于 2020-4-6 11:49
看看这个怎么样
else里的if好像没有用到啊{:9_241:} x-Aaron 发表于 2020-4-6 12:10
else里的if好像没有用到啊
v_num能被组合数整除的情况 x-Aaron 发表于 2020-4-6 11:43
这个最佳就给你好吧 天假之名 发表于 2020-4-6 11:49
看看这个怎么样
你不回我就给你了 天假之名 发表于 2020-4-6 11:49
看看这个怎么样
好吧 天假之名 发表于 2020-4-6 13:12
好吧
{:10_257:}
页:
[1]
2