我一直在看着這個整個下午,無法弄清楚爲什麼性別輸入是重複自己,儘管只出現被稱爲一次。這不是我可以看到的循環的一部分。Python - 隨機嬰兒名稱生成器問題 - (複製輸入,調用變量)
我試着添加變量來充當計數器,並嘗試使用if語句只運行輸入,如果計數器變量小於1,但無法弄清楚。
編輯:由於這裏有很好的反饋,我發現get_full_name在get_first_name中導致了重複的性別輸入 - 但是現在我在嘗試輸出隨機生成的第一個中間名時遇到問題。
我想設置setFirst,setMiddle和setLast變量爲全局變量,但後來我得到一個NameError。我也嘗試創建一個新的功能來顯示它們,但那也不起作用。我嘗試添加「自我」。 (不包括引號),直接在函數()或其下的一個縮進中。
我會先顯示錯誤,然後顯示完整的代碼。
錯誤: 回溯(最近通話最後一個):
文件 「初始化 py」 爲,線100,在 的main()
文件 「初始化 py」 爲,行92,在主
打印顯示名(setFirst,setMiddle,setLast)
NameError:全局名稱 'setFirst' 沒有定義
我也得到名稱錯誤,試圖串聯setFirst,setMiddle和setLast在到另一個變量的全名。
下面的代碼:
from os.path import abspath, join, dirname
import random
full_path = lambda filename: abspath(join(dirname(__file__), filename))
FILES = {
'first:male': full_path('dist.male.first'),
'first:female': full_path('dist.female.first'),
'last': full_path('dist.all.last'),
}
def get_name(filename):
selected = random.random() * 90
with open(filename) as name_file:
for line in name_file:
name, _, cummulative, _ = line.split()
if float(cummulative) > selected:
return name
def get_first_name(gender=None):
global determine
global setFirst
print ("First name... Enter 1 for Male, 2 for Female or 3 to be surprised! ")
determine = input()
if determine == 1:
gender = 'male'
if determine == 2:
gender = 'female'
if determine == 3:
print ("You want to be surprised!")
gender = random.choice(('male', 'female'))
return get_name(FILES['first:%s' % gender]).capitalize()
setFirst = get_first_name()
print setFirst + " "
def get_middle_name(gender=None):
global setMiddle
if determine == 1:
gender = 'male'
if determine == 2:
gender = 'female'
if determine == 3:
gender = random.choice(('male', 'female'))
return get_name(FILES['first:%s' % gender]).capitalize()
setMiddle = get_middle_name()
print setMiddle + " "
def get_last_name():
global setLast
#We will implicitly pass a Last Name until other issues are fixed
return 「Smith」
setLast = get_last_name()
print setLast
def get_full_name(gender=None):
return u"%s %s %s" % (get_first_name(gender), get_middle_name(gender), get_last_name())
#def displayName(setFirst, setMiddle, setLast):
# print setFirst + " " + setMiddle + " " + setLast
def main():
#print u"%s %s %s" % (setFirst, setMiddle, setLast)
#print displayName(setFirst, setMiddle, setLast)
f = open('output', 'a') #append output to filename output
f.write(get_full_name() + '\n') #and add a line break after each run
f.close()
if __name__ == "__main__":
main()
即使我嘗試傳遞變量的main(),如:
def main(setFirst, setMiddle, setLast):
它仍然給出了NameError約不被定義。我究竟做錯了什麼?
我在「導入隨機」下添加了這個權限,但現在我得到了一些流氓「無」顯示 - 這導致我相信代碼中存在泄漏。思考?
setFirst = None
setMiddle = None
setLast = None
這裏是我創建設法跟蹤它的功能: 高清顯示名(setFirst,setMiddle,setLast):
if setFirst == None:
print ("Random Baby Name Generator")
else:
print setFirst
print setMiddle
print setLast
if setMiddle == None:
print ("Double check the middle name variable.")
if setLast == None:
print ("Double check the last name variable.")
你所說的「性別輸入重演」呢?我們沒有這些文件,我們也看不到發生了什麼。 Yuu're將不得不告訴我們。 – saulspatz
好點,對不起。這裏是一個示例輸出: 名字...輸入1爲男性,2爲女性或3爲驚訝! 菲奧娜克莉絲汀瓊斯 名字...輸入1爲男性,2爲女性或3驚訝! – cydonia22
'get_full_name'在'main'中出現兩次 –