Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的模拟大部分时间都会出错_Python - Fatal编程技术网

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

我正在尝试创建一个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 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在使用递归之前,您应该掌握迭代。迭代是