使用函数在while循环中调用类

时间:2017-01-03 01:30:26

标签: python function class oop

我正在编写一个python gui,最终将生成一个用于桌面RPG(主要是龙与地下城)的随机村庄

我有下面的代码,根据用户想要的城镇大小生成一些小酒馆,到目前为止一切正常。我希望GUI最终还能创建商店,寺庙和其他建筑物。

class NPC: 
    def __init__(self, first, last):
        self.first = first
        self.last = last
        self.name = first + ' ' + last

class Tavern: 
    def  __init__(self, name1, name2):
        self.name1 = name1
        self.name2 = name2
        self.name = 'The ' + name1 + ' ' + name2

while num_tav != 0:
    morf = random.randint(1, 2)
    if morf == 1: 
        sex = 'male'
    else:
        sex = 'female' 
    first = open(set_race + '_' + sex + '.txt')
    name1 = first.readlines()
    first = random.choice(name1).strip()

    last = open(set_race + '_surnames.txt')
    name2 = last.readlines()
    last = random.choice(name2).strip()

    npcname = NPC(first, last)

    tavern1 = open('tavnames1.txt')
    name1 = tavern1.readlines()
    name1 = random.choice(name1).strip()

    tavern2 = open('tavnames2.txt')
    name2 = tavern2.readlines()
    name2 = random.choice(name2).strip()
    tavern = Tavern(name1, name2)
    print('Taverns/Inns: ' + tavern.name + "The inkeeper is a tall " + set_race + ' ' + sex + " named " + npcname.name + '\n')
    num_tav = num_tav - 1

    w.insert(END, not_b + 'Taverns/Inns: ' + tavern.name + "The inkeeper is a tall " + set_race + ' ' + sex + " named " + npcname.name + '\n' + 'Population is approx. ' + str(population) + ' people\n') 

NPC课程基本上创造了一个随机名称,我想在其他领域(商店,市场,铁匠等)使用它,而不仅仅是生成旅店老板的名字。

我的问题是;

是否可以创建一个将使用脚本的函数

first = open(set_race + '_' + sex + '.txt')
name1 = first.readlines()
first = random.choice(name1).strip()

last = open(set_race + '_surnames.txt')
name2 = last.readlines()
last = random.choice(name2).strip()

npcname = NPC(first, last)

作为一个函数将调用NPC类,然后只是让其他while循环调用它?我不会在每个循环中重复使用相同的代码来生成其他建筑物吗?

我这样假设,但我只是不知道它会被称为什么,所以任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:0)

在函数中定义while循环,可能有一个额外的参数,它获取它应该生成的实体类型(Tavern,shop,...),然后将它放在另一个python文件中并导入它。作为一个模块。

def mynewfunction(set_race,sex):
    first = open(set_race + '_' + sex + '.txt')
    name1 = first.readlines()
    first = random.choice(name1).strip()

    last = open(set_race + '_surnames.txt')
    name2 = last.readlines()
    last = random.choice(name2).strip()


    return NPC(first, last)

然后:

while (x,y,z):
    npcname = mynewfunction(set_race):