当我调用输入时,为什么我的程序意外退出?

时间:2018-04-28 04:37:37

标签: python

我正在尝试让这个RPG程序正常运行,但我无法理解。我运行得很好,你会看到你运行程序的时候。出于某种原因,当我运行它时,它在我做的每一个动作后停在1,2,3,4。我什么都没有回来?我在这里做错了什么,以及如何在将来改进我的组织和代码?

import math

import random


class character:
    def __init__(self, hp, max_hp, att, exp, int):
        self.hp = hp
        self.max_hp = max_hp
        self.att = att
        self.exp = exp
        self.int = int

class enemy:
    def __init__(self, hp, max_hp, att, exp, int):
        self.hp = hp
        self.max_hp = max_hp
        self.att = att
        self.exp = exp
        self.int = int




charspells = ['Fireball']
Loop = True

def fireball(character, enemy):
    enemy.hp -= character.int
    print('You did, ',character.int ,'to the enemy')
    print('Enemy.hp', enemy.hp)
    return enemy.hp

items = []

mainc = character(100, 100, 10, 0, 10)
tai_lopez = enemy(30, 30, 5, 0, 10)

def character_battle(character, enemy):
    choice = input('What would you like to do?\n 1. Attack \n 2. Spells \n 3. Items \n 4. Run')
    if choice == input('1'):
        print('You attack the enemy!')
        enemy.hp -= character.att
        print('You dealt', character.att, 'to the enemy!')
        print('Enemy hp =', enemy.hp)
    if choice == input('2'):
        spellchoice = input('Which spell do you wish to call?')
        print('1.', charspells[0],'\n' '2.', charspells[1], '\n' 'q', 'exit')
        if spellchoice == ('1'):
            print('You used fireball!')
            fireball(character, enemy)

        elif spellchoice == ('2'):
            if charspells[1] != 'Lightning bolt':
                print('It doesnt exist, sorry')
                # ill add more spell fucntions later
        if spellchoice == ('3'):
            print('You went back to the menu')
    if choice == input('3'):
        if items == []:
            print('You have no items')
        if items == ['potions']:
            print ('response')
            #placeholder ill add the fucntion later
    elif choice == input('4'):
        Loop = False

def enemy_battle(enemy, character):
    a = random.randint(0,50)
    if a <= 35:
        print('The enemy attacks you!')
        character.hp -= enemy.att
        print('Your hp =', character.hp)
    elif a <= 50:
        print('The enemy uses mind attacks bruh')
        character.hp -= enemy.int
        print('Your hp =', character.hp)

def battle_loop(character, enemy):
    Loop1 = True
    while Loop1 == True:
        while enemy.hp > 0  and character.hp > 0:
            character_battle(character, enemy)
            enemy_battle(character, enemy)
            if enemy.hp <= 0:
                print('You Won')
                Loop1 =  False
            if character.hp <= 0:
                print('You lost')
                exit()



battle_loop(mainc, tai_lopez)

2 个答案:

答案 0 :(得分:1)

问题是你在if语句中使用input()。每当解释器试图检查条件是否为真时,它就会执行input(),即使你没有预料到它也需要输入。在其中一种方法中,您输入的顺序错误,所以我也修复了它。所以正确的代码应该是: -

import math

import random


class character:
    def __init__(self, hp, max_hp, att, exp, int):
        self.hp = hp
        self.max_hp = max_hp
        self.att = att
        self.exp = exp
        self.int = int

class enemy:
    def __init__(self, hp, max_hp, att, exp, int):
        self.hp = hp
        self.max_hp = max_hp
        self.att = att
        self.exp = exp
        self.int = int




charspells = ['Fireball']
Loop = True

def fireball(character, enemy):
    enemy.hp -= character.int
    print('You did, ',character.int ,'to the enemy')
    print('Enemy.hp', enemy.hp)
    return enemy.hp

items = []

mainc = character(100, 100, 10, 0, 10)
tai_lopez = enemy(30, 30, 5, 0, 10)

def character_battle(character, enemy):
    choice = input('What would you like to do?\n 1. Attack \n 2. Spells \n 3. Items \n 4. Run \n')
    if choice == '1':
        print('You attack the enemy!')
        enemy.hp -= character.att
        print('You dealt', character.att, 'to the enemy!')
        print('Enemy hp =', enemy.hp)
    elif choice == '2':
        spellchoice = input('Which spell do you wish to call?')
        print('1.', charspells[0],'\n' '2.', charspells[1], '\n' 'q', 'exit')
        if spellchoice == ('1'):
            print('You used fireball!')
            fireball(character, enemy)

        elif spellchoice == ('2'):
            if charspells[1] != 'Lightning bolt':
                print('It doesnt exist, sorry')
                # ill add more spell fucntions later
        if spellchoice == ('3'):
            print('You went back to the menu')
    elif choice == '3':
        if items == []:
            print('You have no items')
        if items == ['potions']:
            print ('response')
            #placeholder ill add the fucntion later
    elif choice == '4':
        Loop = False

def enemy_battle(character, enemy):
    a = random.randint(0,50)
    if a <= 35:
        print('The enemy attacks you!')
        character.hp -= enemy.att
        print('Your hp =', character.hp)
    elif a <= 50:
        print('The enemy uses mind attacks bruh')
        character.hp -= enemy.int
        print('Your hp =', character.hp)

def battle_loop(character, enemy):
    Loop1 = True
    while Loop1 == True:
        while enemy.hp > 0  and character.hp > 0:
            character_battle(character, enemy)
            enemy_battle(character, enemy)
            if enemy.hp <= 0:
                print('You Won')
                Loop1 =  False
            if character.hp <= 0:
                print('You lost')
                exit()



battle_loop(mainc, tai_lopez)

这里你不需要两节课。但我想你可能会考虑在未来添加更多功能。您可以更多地了解oop和继承,并找出一个更智能的解决方案。我认为你应该专注于基础知识。另外,尽量不要将临时变量命名为类的临时变量。这是一个非常好的代码imo。但我修好了它。

答案 1 :(得分:0)

看起来很有意思,你完成后会给我发一份副本吗? 所以基本上你使用了太多的输入()
你必须为每个input()函数输入一个值
你需要整理你的代码,或者看看其他人如何编写代码 这是一个快速解决方案,但这并不意味着这是标准,你还有很多需要学习的东西

import random

class character:
    def __init__(self, hp, max_hp, att, exp, int):
        self.hp = hp
        self.max_hp = max_hp
        self.att = att
        self.exp = exp
        self.int = int

charspells = ['Fireball','iceblock']
Loop = True
items = []
mainc = character(100, 100, 10, 0, 10)
tai_lopez = character(30, 30, 5, 0, 10) # enemy

def fireball(character, enemy):
    enemy.hp -= character.int
    print('You did, ',character.int ,'to the enemy')
    print('Enemy.hp', enemy.hp)
    return enemy.hp

def character_battle(character, enemy):
    choice = input('What would you like to do?\n 1. Attack \n 2. Spells \n 3. Items \n 4. Run')
    if choice == '1':
        print('You attack the enemy!')
        enemy.hp -= character.att
        print('You dealt', character.att, 'to the enemy!')
        print('Enemy hp =', enemy.hp)
    if choice == '2':
        print('Which spell do you wish to call?')
        print('1.', charspells[0],'\n' '2.', charspells[1], '\n' 'q', 'exit')
        spellchoice = input()
        if spellchoice == ('1'):
            print('You used fireball!')
            fireball(character, enemy)
        elif spellchoice == ('2'):
            if charspells[1] != 'Lightning bolt':
                print('It doesnt exist, sorry')
                # ill add more spell fucntions later
        if spellchoice == ('3'):
            print('You went back to the menu')
    if choice == '3':
        if items == []:
            print('You have no items')
        if items == ['potions']:
            print ('response')
            #placeholder ill add the fucntion later
    elif choice == '4':
        print("You cowardly run away")
        exit()

def enemy_battle(enemy, character):
    a = random.randint(0,50)
    if a <= 35:
        print('The enemy attacks you!')
        character.hp -= enemy.att
        print('Your hp =', character.hp)
    else:
        print('The enemy uses mind attacks bruh')
        character.hp -= enemy.int
        print('Your hp =', character.hp)

def battle_loop(character, enemy):
    Loop1 = True
    while Loop1:
        while enemy.hp > 0  and character.hp > 0:
            character_battle(character, enemy)
            enemy_battle(character, enemy)
            if enemy.hp <= 0:
                print('You Won')
                Loop1 =  False
            if character.hp <= 0:
                print('You lost')
                exit()

battle_loop(mainc, tai_lopez)