Python 我的模拟大部分时间都会出错
我正在尝试创建一个mmo游戏中升级物品的模拟,以了解获得一个完全升级的物品需要多少成本。代码已完成,但大多数情况下它会给我一条错误消息: 致命的Python错误:无法从堆栈溢出中恢复 我想这可能是因为尝试太多了。代码如下:Python 我的模拟大部分时间都会出错,python,Python,我正在尝试创建一个mmo游戏中升级物品的模拟,以了解获得一个完全升级的物品需要多少成本。代码已完成,但大多数情况下它会给我一条错误消息: 致命的Python错误:无法从堆栈溢出中恢复 我想这可能是因为尝试太多了。代码如下: import random #This is the starting grade of the item. We're trying to make it through 9 grade=0 #Those are counting how many items are
import random
#This is the starting grade of the item. We're trying to make it through 9
grade=0
#Those are counting how many items are used.
def yang(x):
yang.say+=x
yang.say=0
def w(x):
w.say+=x
w.say=0
def b(x):
b.say+=x
b.say=0
def r(x):
r.say+=x
r.say=0
#This is the upgrading simulation.
def upgrade(grade):
#c stands for chance. As the grade goes up, the chance of success goes down.
c = 0
if grade == 0:
c = 91
yang(100)
elif grade == 1:
c = 83
yang(200)
elif grade == 2:
c = 71
yang(300)
elif grade == 3:
c = 58
yang(400)
elif grade == 4:
c = 49
yang(500)
elif grade == 5:
c = 38
yang(600)
elif grade == 6:
c = 25
w(1)
yang(450)
elif grade == 7:
c = 18
b(1)
yang(900)
elif grade == 8:
c = 7
r(1)
yang(1500)
a = random.randint(1,101)
print(a)
#if it is successful grade goes up by 1
if a <= c and grade != 9:
grade+=1
#if it is not, grade goes down by 1
if a > c and grade != 0:
grade -=1
print("New grade: ",grade)
#We're trying until it gets 9
if grade < 9:
upgrade(grade)
upgrade(grade)
print(yang.say,"k")
print(w.say)
print(b.say)
print(r.say)
随机导入
#这是该项目的起始等级。我们正努力通过9点
等级=0
#这些正在计算使用了多少物品。
杨德辉(x):
yang.say+=x
yang.say=0
def w(x):
w、 假设+=x
w、 say=0
def b(x):
b、 假设+=x
b、 say=0
def r(x):
r、 假设+=x
r、 say=0
#这是升级模拟。
def升级(等级):
#c代表机会。分数越高,成功的机会就越小。
c=0
如果等级==0:
c=91
杨(100)
elif等级==1:
c=83
杨(200)
elif等级==2:
c=71
杨(300)
elif等级==3:
c=58
杨(400)
elif等级==4:
c=49
杨(500)
elif等级==5:
c=38
杨(600)
elif等级==6:
c=25
w(1)
杨(450)
elif等级==7:
c=18
b(1)
杨(900)
elif等级==8:
c=7
r(1)
杨(1500)
a=random.randint(1101)
印刷品(a)
#如果成功,分数将上升1
如果是c和等级!=0:
等级-=1
打印(“新等级:”,等级)
#我们一直在努力,直到9点
如果等级<9:
升级(职系)
升级(职系)
打印(杨,说“k”)
打印(w.say)
打印(b.say)
打印(r.say)
多亏了@jasonharper和@tom karzes,我重新开始并解决了这个问题。问题是——正如他们所说——函数一次又一次地调用自己,直到程序因过载而崩溃。以下是已完成的工作,如果有人感兴趣:
import random
def yang(x):
yang.say+=x
yang.say=0
def w(x):
w.say+=x
w.say=0
def b(x):
b.say+=x
b.say=0
def r(x):
r.say+=x
r.say=0
def upgrade(grade):
n = random.randint(0,100)
if grade == 0:
c = 91
yang(100)
elif grade == 1:
c = 83
yang(200)
elif grade == 2:
c = 71
yang(300)
elif grade == 3:
c = 58
yang(400)
elif grade == 4:
c = 49
yang(500)
elif grade == 5:
c = 38
yang(600)
elif grade == 6:
c = 25
w(1)
yang(450)
elif grade == 7:
c = 18
b(1)
yang(900)
elif grade == 8:
c = 7
r(1)
yang(1500)
if n <= c:
return int(grade+1)
if n > c and grade !=0:
return int(grade-1)
if n > c and grade == 0:
return 0
def simulation():
grade = 0
while grade<9:
grade=upgrade(grade)
t = int(input(""))
for q in range(0,t):
simulation()
print(yang.say/t)
print(w.say/t)
print(b.say/t)
print(r.say/t)
随机导入
杨德辉(x):
yang.say+=x
yang.say=0
def w(x):
w、 假设+=x
w、 say=0
def b(x):
b、 假设+=x
b、 say=0
def r(x):
r、 假设+=x
r、 say=0
def升级(等级):
n=随机随机随机数(0100)
如果等级==0:
c=91
杨(100)
elif等级==1:
c=83
杨(200)
elif等级==2:
c=71
杨(300)
elif等级==3:
c=58
杨(400)
elif等级==4:
c=49
杨(500)
elif等级==5:
c=38
杨(600)
elif等级==6:
c=25
w(1)
杨(450)
elif等级==7:
c=18
b(1)
杨(900)
elif等级==8:
c=7
r(1)
杨(1500)
如果n c和等级=0:
返回整数(一级)
如果n>c且等级==0:
返回0
def模拟():
等级=0
感谢@jasonharper和@tom karzes,我重新开始并解决了这个问题。问题是——正如他们所说——函数一次又一次地调用自己,直到程序因过载而崩溃。以下是已完成的工作,如果有人感兴趣:
import random
def yang(x):
yang.say+=x
yang.say=0
def w(x):
w.say+=x
w.say=0
def b(x):
b.say+=x
b.say=0
def r(x):
r.say+=x
r.say=0
def upgrade(grade):
n = random.randint(0,100)
if grade == 0:
c = 91
yang(100)
elif grade == 1:
c = 83
yang(200)
elif grade == 2:
c = 71
yang(300)
elif grade == 3:
c = 58
yang(400)
elif grade == 4:
c = 49
yang(500)
elif grade == 5:
c = 38
yang(600)
elif grade == 6:
c = 25
w(1)
yang(450)
elif grade == 7:
c = 18
b(1)
yang(900)
elif grade == 8:
c = 7
r(1)
yang(1500)
if n <= c:
return int(grade+1)
if n > c and grade !=0:
return int(grade-1)
if n > c and grade == 0:
return 0
def simulation():
grade = 0
while grade<9:
grade=upgrade(grade)
t = int(input(""))
for q in range(0,t):
simulation()
print(yang.say/t)
print(w.say/t)
print(b.say/t)
print(r.say/t)
随机导入
杨德辉(x):
yang.say+=x
yang.say=0
def w(x):
w、 假设+=x
w、 say=0
def b(x):
b、 假设+=x
b、 say=0
def r(x):
r、 假设+=x
r、 say=0
def升级(等级):
n=随机随机随机数(0100)
如果等级==0:
c=91
杨(100)
elif等级==1:
c=83
杨(200)
elif等级==2:
c=71
杨(300)
elif等级==3:
c=58
杨(400)
elif等级==4:
c=49
杨(500)
elif等级==5:
c=38
杨(600)
elif等级==6:
c=25
w(1)
杨(450)
elif等级==7:
c=18
b(1)
杨(900)
elif等级==8:
c=7
r(1)
杨(1500)
如果n c和等级=0:
返回整数(一级)
如果n>c且等级==0:
返回0
def模拟():
等级=0
当等级“yang”、“b”、“r”、“b”是函数时,如何称呼。说项?它们代表项。yang(x)函数将x与yang相加。假设所需的yang计数是多少。应使用while
循环重复模拟步骤。递归被限制在1000级左右。看起来upgrade
调用自己太深了。随着grade
接近9
,c
变小,因此grade
增加的机会变小。你应该重新考虑你的逻辑。很容易将其转化为迭代而不是递归,这将消除递归深度问题,但基本逻辑问题仍然存在。@MehmetDeler在使用递归之前,您应该掌握迭代。在适用的情况下,迭代更可取,而且用迭代来打击自己要困难得多。'yang','b','r',b'是函数,你如何称呼。说项?它们代表项。yang(x)函数将x与yang相加。假设所需的yang计数是多少。应使用while
循环重复模拟步骤。递归被限制在1000级左右。看起来upgrade
调用自己太深了。随着grade
接近9
,c
变小,因此grade
增加的机会变小。你应该重新考虑你的逻辑。很容易将其转化为迭代而不是递归,这将消除递归深度问题,但基本逻辑问题仍然存在。@MehmetDeler在使用递归之前,您应该掌握迭代。迭代是