猫史档案馆


【Python作品分享】求助!!!!!为什么会报错?请大佬帮忙看看!!【求助贴】【求助帖】

用户:失落的星失落的星查看:5 回复:4 评论:5 创建时间:2022-12-04T16:21:52


【作品展示】

center_image

 

【作品介绍】

之前我发了一个【求助贴】有些人说需要完整版代码,现在请各位大神帮忙看看!

 

【作品源代码】

import random
import time

#通用函数:
suiji = random.randint

def deng(n):
    time.sleep(n)

def kong(n):
    for i in range(n):
        print('\n')

#文字RPG冒险 代码如下:
def wenRPG():
    deng(1)
    kong(1)
    print('你好')
    deng(1)
    print('玩家')
    deng(1)
    print('欢迎来到这个游戏')
    deng(1)
    print('\n')
    deng(1)
    print('正在加载游戏地图......')
    deng(3)
    print('加载成功')
    deng(1)
    print('正在加载玩家信息......')
    deng(3)
    print('加载成功')
    deng(1)
    print('正在加载地点信息......(请耐心等待)')
    deng(5)
    print('加载成功')
    deng(1)
    print('正在加载自主意识......')
    deng(1)
    print('aa加 @& !失^败')
    deng(1)
    print('正在检查错误......')
    deng(1)
    print('发现一个错误,是否修复?(y/n)')
    a = input('>>')
    if a == 'y':
        c1 = 0
    elif a == 'n':
        c1 = 1
    else:
        print('输入错误,默认不修复')
        c1 = 1
    deng(1)
    print('发现一个错误,是否修复?(y/n)')
    a = input('>>')
    if a == 'y':
        c2 = 0
    elif a == 'n':
        c2 = 1
    else:
        print('输入错误,默认不修复')
        c2 = 1
    kong(1)
    print('你好,玩家')
    print('请问你是否进入新手教程?(y/n)')
    a = input('>>')
    if a == 'y':
        print('好的,玩家,我现在将会把这个游戏的基本规则告诉你:')
        input('(按Enter继续)>>')
    for i in range(10):
        kexuan = ['木剑', '苹果', '医疗包', '面包', '喵子', '粗制衣服']#可选物品
        a = 0  # 玩家选择
        wupinlan = []#物品栏
        beibao = []#背包
        baoshi = 100#饱食
        shengming = 100#生命
        sudu = 10#速度
        hujia = 10#护甲
        gongji = 22  # 攻击力
        zhiye = 0#职业
        food = []#食物
        dengji = 1#等级
        jingli = 10#精力
        guai = 0#打怪数量
        ditu = '''
        ——————————————------------------------------
        |                     地图                   \\
        /  |家|               |怪物森林|                \\
        |    \                   /                      \\
        \    \                 |          ----|勇者峡谷| /
        /     -----             \        /             \\
        |           \             |      /               \\
        |            \---------|小 镇|----                /
        |                      /    \                    |
        \     |盗贼基地|-------|      -------\            |
        |                    /               \--|喵|   /
        /                 |教堂|                        \\
        |                                                |
        ——————————————------------------------------------
        '''
        difang = ['家','小镇','怪物森林','勇者峡谷','盗贼基地','教堂','喵']#可去地方
        suozaidi = '家'#所在地
        n = 1#当前经验
        m = 2#目标经验
        p = 0#存档码

    def kaitou ():
        global x
        global beibao
        global food
        global kexuan
        beibao = []
        food = []
        print('你好!新来的!你叫什么名字呢?')
        x = input('>>')
        str(x)
        print('哈,所以'+x+'是你的名字啊!')
        deng(1)
        print('还挺有品味的嘛!')
        deng(1)
        kong(1)
        print('对了,你需要一些东西吗?我这里有一些东西可以给你')
        deng(0.6)
        kexuan = ['木剑', '苹果', '医疗包', '面包','喵子','粗制衣服']
        while True:
            kong(1)
            print(kexuan)
            a = input('(空为结束)>>')
            if a in kexuan:
                kexuan.remove(a)
                if a == '苹果' or a == '医疗包' or a == '面包':
                    food.append(a)
                else:
                    beibao.append(a)
            elif a == ' ':
                break
            else:
                print('请再规定东西里选择!')
                continue
            print('你选择了'+a)
        deng(1)
        print('好的,'+x+',是时候踏上你的文字冒险之路啦!')
        deng(1)
        return

    def dadou(name,xie,gong):
        global shengming
        global hujia
        global dengji
        global gongji
        global beibao
        global food
        global guaidengji
        global beibao
        global n
        global m
        guaidengji = dengji
        while True:
            kong(1)
            deng(0.3)
            print(name)
            print('血量:'+str(xie))
            print('攻击:'+str(gong))
            print('等级:'+str(guaidengji))
            kong(1)
            print('-'*10)
            print('|名字:'+x)
            xinxi()
            kong(1)
            if shengming <= 0 or xie <= 0:
                break
            print('(按Enter键继续)')
            input('>>')
            print(name+'受到了'+str(gongji)+'点伤害!')
            xie -= gongji
            print('(按Enter键继续)')
            input('>>')
            print(name+'打出了'+str(gong)+'点伤害!')
            if hujia >= gong:
                hujia -= gong
                print('你的护甲减少了'+str(gong)+'点!')
            elif hujia < gong:
                print('你的护甲减少了'+str(hujia)+'点!')
                hujia == 0
                shengming -= gong-hujia
                print('你的生命减少了'+str(gong-hujia)+'点!')
            else:
                pass
        if shengming <= 0:
            si()
        elif xie <= 0:
            kong(1)
            print(name,'die掉了!')
            deng(1)
            if name in '树藤怪坚石怪小野兽':
                print('你获得了1点经验!')
                n += 1
            elif name == '小Boss':
                print('你获得了3点经验!')
                n += 3
            if n >= m:
                print('你升级了!你の生命值增加了10点!你の攻击力增加了10点!你获得了一本攻击秘籍!')
                n = 0
                m += 1
                dengji += 1
                shengming += 10
                gongji += 10
                beibao.append('攻击秘籍')
            else:
                print('距离升级还有'+str(m-n)+'点经验')
            kong(1)

    def suiji(y,n,su,xiel,ji):
        deng(0.3)
        kong(1)
        print(y+n)
        deng(0.5)
        print('不好,它发现你了')
        print('你要‘逃跑’还是‘锤爆它’?')
        a = input('>>')
        if a == '逃跑':
            if sudu >= su:
                print('你成功逃跑了')
                deng(1)
                return 0
            else:
                print('你被'+n+'追上了,大战开始')
                dadou(n,xiel,ji)
        else:
            print('看来必须爆发一场恶战了!')
            dadou(n,xiel,ji)

    def guaiwu():
        c = random.randint(1,6)
        guaidengji = dengji
        if c == 1:
            suiji('看,前面出现了一只', '树藤怪', 14*guaidengji, 150*guaidengji, 50*guaidengji)
        elif c == 2:
            suiji('看,前面出现了一只', '小野兽', 13*guaidengji, 100*guaidengji, 40*guaidengji)
        elif c == 3:
            suiji('看,前面出现了一只', '坚石怪', 11*guaidengji, 210*guaidengji, 20*guaidengji)
        elif c == 4:
            suiji('看,前面出现了一只', '小Boss', 20*guaidengji, 200*guaidengji, 40*guaidengji)
        else:
            pass

    def kanditu():
        global suozaidi
        print(ditu)
        deng(0.5)
        print('你的地点是:'+suozaidi)
        print('你想去哪个地方?')
        a = input('>>')
        if a not in difang:
            print('不存在这个地方!')
        elif a == suozaidi:
            print('别想了,你就在这呢!')
        else:
            print('%25--->============')
            deng(1)
            print('%50------->========')
            deng(1)
            guaiwu()
            print('%75----------->====')
            deng(1)
            print('%99-------------->=')
            deng(1)
            print('%100--------------->')
            print(x+'已到达目的地')
            suozaidi = a

    def xinxi():
        print('|生命:'+str(shengming))
        print('|攻击:'+str(gongji))
        print('|速度:'+str(sudu))
        print('|护甲:'+str(hujia))
        print('|等级:'+str(dengji))
        print('|杀敌:'+str(guai))
        print('-'*10)

    def zhuangtai():
        kong(1)
        deng(0.3)
        print('通过灵魂的透视,你的身体信息是:')
        deng(0.5)
        print('-'*10)
        print('|名字:'+x)
        xinxi()

    def zhuangbei():
        global gongji
        global wupinlan
        global hujia
        global beibao
        while True:
            deng(0.6)
            kong(1)
            print('你的背包',beibao)
            print('你要装备什么?')
            a = input('(空为结束)>>')
            if a == ' ':
                break
            elif a not in beibao:
                print('请在背包里选择!')
                continue
            else:
                beibao.remove(a)
                wupinlan.append(a)
                if a == '木剑':
                    gongji += 15
                elif a == '喵子':
                    hujia += 20
                elif a == '粗制衣服':
                    hujia += 20
                elif a == '防御秘籍':
                    hujia += 30
                elif a == '攻击秘籍':
                    gongji += 20
                elif a == 'Joker+(扑克牌)':
                    gongji += 10
                elif a == 'Joker-(扑克牌)':
                    hujia += 10
                print(x+'装备了'+a)
                print(x+'的物品栏:',wupinlan)

    def eat():
        global shengming
        global baoshi
        global food
        while True:
            kong(1)
            print('你有',food,'可以吃')
            a = input('(空为结束)>>')
            if a == ' ':
                break
            elif a not in food:
                print('请在规定食物内食用!')
                continue
            else:
                food.remove(a)
                if a == '面包':
                    baoshi += 40
                    print(x+'食用了面包')
                    print(x+'恢复了40点饱食度!')
                elif a == '苹果':
                    baoshi += 20
                    print(x+'食用了苹果')
                    print(x+'恢复了20点饱食度!')
                elif a == '医疗包':
                    shengming += 30
                    print(x+'使用了医疗包')
                    print(x+'恢复了30点生命值!')

    def guang():
        global shengming
        global zhiye
        global sudu
        global gongji
        global hujia
        global jingli
        global guai
        kong(1)
        if suozaidi == '家':
            print('家里有一张床,是否睡觉?(y/n)')
            a = input('>>')
            if a not in 'yn' or len(a) != 1:
                print('输入错误')
                return
            elif a == 'y':
                if jingli == 10:
                    print('你现在不想睡觉......')
                    return
                else:
                    print('小憩一会儿,补充精力')
                    deng(1)
                    print('你现在精神不错,+2点血量!')
                    shengming += 2
                    jingli += 1
                    return
            else:
                return
        elif suozaidi == '小镇':
            c = random.randint(1,4)
            if c == 1:
                kong(1)
                print('你走进了村子,看见很多人都围着一个地方,')
                print('你很好奇,走近一看,是一块告示牌,上面写')
                print('着:只要kill掉10只怪物或以上,就可获得')
                print('一本随机秘籍(攻击秘籍、防御秘籍)')
                kong(1)
                print('你杀喵了'+str(guai)+'只怪物')
                if guai >= 10:
                    c = random.randint(1,2)
                    if c == 1:
                        beibao.append('攻击秘籍')
                        print(x+'获得了一本攻击秘籍!')
                    elif c == 2:
                        beibao.append('防御秘籍')
                        print(x+'获得了一本防御秘籍!')
                    print(x+'的kill怪物数量-10')
                    guai -= 10
                else:
                    print('你kill掉的怪物不足')
            elif c == 2:
                kong(1)
                print('你看到了')

    def caozuo():
        while True:
            kong(1)
            print('现在你要:')
            print('看地图\n出发\n查看信息\n装备\n吃东西\n逛一逛这个地方\n存档\n读档\n')
            a = input('>>')
            if a not in '看地图出发查看信息装备吃东西逛一逛这个地方存档读档':
                print('不要乱选!')
                continue
            break
        if a == '出发':
            print('你现在的所在地是:'+suozaidi+'真的要出发吗?(y/n)')
            a = input('>>')
            if a == 'y':
                kanditu()
            else:
                return
        elif a == '查看信息':
            zhuangtai()
        elif a == '装备':
            zhuangbei()
        elif a == '吃东西':
            eat()
        elif a == '逛一逛这个地方':
            print('你现在的所在地是:'+suozaidi+'真的要逛一逛这个地方吗?(y/n)')
            a = input('>>')
            if a == 'y':
                guang()
            else:
                return
        elif a == '看地图':
            kong(1)
            print(ditu)
            kong(1)
        elif a == '存档':
            p = 0
            for i in beibao:
                pass
        elif a == '读档':
            pass
    def si():
        global x
        deng(2)
        print(x)
        deng(2)
        print('挂')
        deng(2)
        print('了')
        deng(5)
        exit()

    kaitou()
    while True:
        caozuo()

#数字喵游戏 代码如下:
def zhadan():
    play = 0#玩家选择
    b = 0#最小范围
    c = 100#最大范围
    com = 0#计算机选择
    z = -10#喵1号位置
    x = -10#喵2号位置
    v = -10#喵3号位置
    m = 0#难度
    dijilun = 0#第几轮
    kong(1)
    print('数字喵')
    print('---------------------------')
    print('规则如下:')
    print('你和机器人在0~100的数字中选择')
    print('一个编号,如果机器人选择的编号')
    print('是喵编号,玩家赢;反之,机器人')
    print('赢。如果两个人都没选择到喵,')
    print('编号范围缩小,直到两个人中有一')
    print('选到喵编号。')
    print('---------------------------')
    kong(1)
    print('请选择难度:简单/普通/困难')
    a = input('>>')
    if a == '简单':
        m = 1
    elif a == '普通':
        m = 2
    elif a == '困难':
        m = 3
    else:
        print('输入错误,游戏结束')
        return 0
    while True:
        if c - b == 10:
            print('范围过小!结束游戏!')
            return
        kong(1)
        print('喵生成中......共有'+str(m)+'个喵')
        if m == 1:
            z = random.randint(b, c)
        elif m == 2:
            z = random.randint(b, c)
            x = random.randint(b, c)
        elif m == 3:
            z = random.randint(b, c)
            x = random.randint(b, c)
            v = random.randint(b, c)
        deng(3)
        kong(1)
        dijilun += 1
        print('第'+str(dijilun)+'轮')
        while True:
            print('请输入你选择的编号【'+str(b)+'~'+str(c)+'】')
            play = int(input('>>'))
            if play >= b and play <= c:
                break
            else:
                print('输入错误!')
                continue
        print('【玩家】选择了'+str(play)+'号编号')
        print('【电脑】正在选择......')
        deng(random.randint(1,4))
        com = random.randint(b,c)
        print('【电脑】选择了'+str(com)+'号编号')
        deng(3)
        if play == z or play == x or play == v:
            print('BOOOOOOOM!【玩家】引爆了喵,【电脑】获胜了')
            exit()
        elif com == z or com == x or com == v:
            print('BOOOOOOOM!【电脑】引爆了喵,【玩家】获胜了!')
            exit()
        else:
            print('好险,两个人都没有选到喵!')
            print('缩小范围!')
            b += 5
            c -= 5
            continue

#直线版飞行器游戏 代码如下:
def feixingqi():
    p = 0#玩家本回合移动步数
    c = 0#电脑本回合移动步数
    a = 0#玩家移动步数
    a_1 = 40#玩家剩余步数
    b = 0#电脑移动步数
    b_1 = 40#玩家剩余步数
    play = 1#玩家骰子
    com = 1#电脑骰子
    play_j = 0#玩家奖励
    com_j = 0#电脑奖励
    kong(1)
    print('''直线版飞行棋 规则如下:
-----------------------------
先由玩家投骰子,玩家便会随机获得
一项奖励,之后玩家将前进投出的骰
子点数加上奖励步数前进,再显示地
图,如下:
【玩家】:====-------------
【电脑】:-----------------
(上图是地图的缩减版)
再由电脑进行相同的操作。
-----------------------------''')
    kong(1)
    a = input('请选择路线长度:30格/40格/50格/60格/100格!\n>>')
    if a == '30格':
        a_1 = 30
        b_1 = 30
    elif a == '40格':
        a_1 = 40
        b_1 = 40
    elif a == '50格':
        a_1 = 50
        b_1 = 50
    elif a == '60格':
        a_1 = 60
        b_1 = 60
    elif a == '100格!' or a == '100格':
        a_1 = 100
        b_1 = 100
    else:
        print('输入错误,再见')
        kong(1)
        return
    kong(1)
    a = 0
    while True:
        p = 0
        c = 0
        input('(投骰子)(按Enter)>>')
        print('【玩家】正在投骰子......')
        deng(2)
        play = suiji(1,6)
        p += play
        print('【玩家】投到了'+str(play))
        play_j = suiji(1,12)
        if play_j == 1:
            print('【玩家】奖励前进3步!')
            p += 3
        elif play_j == 2:
            print('【玩家】奖励前进4步!')
            p += 4
        elif play_j == 3:
            print('【玩家】奖励前进5步!')
            p += 5
        elif play_j == 4:
            print('【玩家】奖励前进6步!')
            p += 6
        elif play_j == 5:
            print('【玩家】“奖励”后退2步!')
            p -= 2
        elif play_j == 6:
            print('【玩家】“奖励”后退3步!')
            p -= 3
        elif play_j == 7:
            print('【玩家】“奖励”后退4步!')
            p -= 4
        else:
            print('啥奖励也没有......')
        a += p
        if a <= 0:
            a = 0
        deng(1)
        kong(1)
        print('地图:')
        x = a_1 - a
        y = b_1 - b
        print('【玩家】:', end='')
        print('='*a, end='')
        print('-'*x)
        print('【电脑】:', end='')
        print('='*b, end='')
        print('-'*y)
        if a_1 <= 0:
            kong(1)
            print('【玩家】胜利!')
            break
        kong(1)
        deng(2)
        print('【电脑】正在投骰子......')
        deng(2)
        com = suiji(1, 6)
        c += com
        print('【电脑】投到了'+str(com))
        com_j = suiji(1, 12)
        if com_j == 1:
            print('【电脑】奖励前进3步!')
            c += 3
        elif com_j == 2:
            print('【电脑】奖励前进4步!')
            c += 4
        elif com_j == 3:
            print('【电脑】奖励前进5步!')
            c += 5
        elif com_j == 4:
            print('【电脑】奖励前进6步!')
            c += 6
        elif com_j == 5:
            print('【电脑】“奖励”后退2步!')
            c -= 2
        elif com_j == 6:
            print('【电脑】“奖励”后退3步!')
            c -= 3
        elif com_j == 7:
            print('【电脑】“奖励”后退4步!')
            c -= 4
        else:
            print('啥奖励也没有......')
        b += c
        if b <= 0:
            b = 0
        deng(1)
        print('地图:')
        x = a_1 - a
        y = b_1 - b
        print('【玩家】:',end='')
        print('='*a,end='')
        print('-'*x)
        print('【电脑】:',end='')
        print('='*b, end='')
        print('-'*y)
        if b_1 <= 0:
            kong(1)
            print('【电脑】胜利!')
            break
        kong(1)

#敌对关系游戏 代码如下:
def didui():
    p1_shai = 0#玩家1骰子
    p2_shai = 0#玩家2骰子
    p1_xie = 100#玩家1血量
    p2_xie = 100#玩家2血量
    p1_wuqi = 0#玩家1武器
    p1_wuqi = 0#玩家2武器
    p1_g = 10#玩家1攻击力
    p2_g = 10#玩家2攻击力
    kong(1)
    print('''敌对关系 规则如下:
----------------------------
两个玩家会出生在两条不同的道路上,
并且每一回合两人会投一次骰子:如
果投到1,则啥也不会发生。如果投到2,
则会遇到一个装备补给站,会随机获得
一件武器,可以选择装备或丢弃。如果
投到3,会遇到一个盾牌补给站,会随机
获得一件盾牌,可以选择装备或丢弃。
如果投到4,会找到一个物品,可以选择
使用或者丢弃。如果一个人投到3-4,另
一个人投到5-6,两人将会相遇。如果
一个人投到六,则啥事没有。
----------------------------''')


#游戏开始:
while True:
    print('='*10+'文字游戏'+'='*10)
    print('''
1.文字冒险游戏
2.玩玩小游戏''')
    a = input('>>')
    if a == '1':
        kong(1)
        print('='*10+'文字冒险游戏'+'='*10)
        print('''
1.文字RPG游戏
2.部落与首领''')
        a = input('>>')
        if a == '1':
            wenRPG()
        elif a == '2':
            print('抱歉,目前此游戏尚未开发')
            continue
        else:
            print('输入错误!')
            continue
    elif a == '2':
        kong(1)
        print('='*10+'玩玩小游戏'+'='*10)
        print('''
1.数字喵
2.直线版飞行棋
3.敌对关系''')
        a = input('>>')
        if a == '1':
            zhadan()
        elif a == '2':
            feixingqi()
        elif a == '3':
            didui()
        else:
            print('输入错误!')
            continue
    else:
        print('输入错误!')
        kong(1)
        continue

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
CodeXzCodeXz

代码有些长,大概看了下报错代码所在函数开头没加

global

吧?

点赞0


评论


玛卡巴卡126玛卡巴卡126

代码有点冗余,建议你整理整理,嫌麻烦的话用pycharm的修改提示就行

 

点赞0


评论


不知名的屑Box不知名的屑Box

Python中的变量分两种,函数内的变量不能与外部调用。并且外部变量也不能与函数内部调用。所以在所有函数前都加上

global

点赞0


评论


开朗的疾电猴2Iqg开朗的疾电猴2Iqg

把532和535行的exit()改成break

点赞0


评论