2017-06-19 70 views
0

我正在尝试创建一个RPG游戏,并且让代码更加简洁。我遇到了一个我无法解决的问题,而且我也对它进行了一些研究,但似乎无法解决这个问题。如何从导入文件中的函数导入列表?

我有我的主要代码为DragonFightingRPG.py与我在同一目录(prints.pyoptions.py)导入的其他文件。 我想从另一个文件中导入一个列表,因此它可以检查用户是否输入了其中一个答案,并且可以相应地回答。

DragonFightingRPG.py

import prints 
import options 

class Player(object): 
    def __init__(self): 
     self.name = None 
     self.gold = None 
     self.maxhealth = 100 
     self.health = 100 

    def get_name(self): 
     self.name = input("Hey there! What's your name?\n~~> ") 
     print("Nice name, {0}!".format(self.name)) 

    def give_gold(self): 
     print("Since you are new around here, 100 gold doubloons have been given to you!") 
     self.gold = 100 

    def gold_counter(self): 
     print("You currently have {0} gold!".format(player.gold)) 



player = Player() 


def start(): 
    player.get_name() 
    player.give_gold() 
    gold_counter() 
    prints.intro() 


def gold_counter(): 
    while True: 
     option = input("Do you want to see your balance?\n~~> ").upper() 
     if option in {options.yes_opt}: 
      print("You currently have {0} gold.".format(player.gold)) 
     elif option in {options.no_opt}: 
      print("You can check your balance later in the game.") 
     else: 
      print("Please try again.") 
      continue 
     break 





start() 

prints.py

class Player(object): 
    def __init__(self): 
     self.name = None 
     self.gold = None 
     self.maxhealth = 100 
     self.health = 100 

    def get_name(self): 
     self.name = input("Hey there! What's your name?\n~~> ") 
     print("Nice name, {0}!".format(self.name)) 

    def give_gold(self): 
     print("Since you are new around here, 100 gold doubloons have been given to you!") 
     self.gold = 100 

    def gold_counter(self): 
     print("You currently have {0} gold!".format(player.gold)) 

def intro(): 
    print("Narrator: Uhhhm...") 
    print("N: Let me check my list...") 
    print("N: Ah! Yes! {0}, that's right. I heard you were supposed to be arriving today.".format(player.name)) 
    print("N: Welcome to... THE DRAGON FIGHTER GAME!") 
    print("N: I know, it isn't the most imaginative name.") 
    print("N: Don't look at me like that, I tried my hardest!") 
    print("N: Anywho, let's carry on.") 
    print("N: For some stupid reason, the creator of this game didn't give me an actual name, so\nmy name is just \"Narrator\" or \"N\".") 
    print("N:") 

player = Player() 

options.py

def yes_opt(): 
    {"Y", "YE", "YES", "YEAH", "PLEASE", "YES PLEASE"} 

def no_opt(): 
    {"N", "NO", "NOPE"} 

的我正在努力的部分是elif option in {options.no_opt}:if option in {options.yes_opt}:。它可以工作,如果我只是在主代码中输入列表,但我想尝试从其他文件导入它。有什么想法吗?

+2

当你想要的清单进口的,你为什么把它放在一个函数? 'yes_opt = {“Y”,“YE”,“是”,“YEAH”,“请”,“是请”}'有什么问题? – dhke

回答

1
def yes_opt(): 
    {"Y", "YE", "YES", "YEAH", "PLEASE", "YES PLEASE"} 

定义一个函数称为yes_opt(其中有效什么都不做),而不是一个与该名称设置

因此,option in yes_opt不起作用。

你可能意味着简单地写这个:

yes_opt = {"Y", "YE", "YES", "YEAH", "PLEASE", "YES PLEASE"} 
1

通过一些小的改变,你可以得到这个工作。

  1. options.py

您应该从方法返回这些集合。

def yes_opt(): 
    return {"Y", "YE", "YES", "YEAH", "PLEASE", "YES PLEASE"} 

def no_opt(): 
    return {"N", "NO", "NOPE"} 
  • DragonFightingRPG.py,可以指定作为from options import yes_opt, no_opt导入语句。
  • 当你调用这些函数时,它们会返回相应的集合。

    if option in yes_opt(): 
    

    依此类推。