2012-09-25 12 views
1

即時通訊新手和即時通訊難倒。我問了另一個question,我嘗試瞭解決方案,並且遇到了另一個錯誤。在這個問題中,包括我的整個代碼儘可能具體。我很想讓這個character_sheet()函數打印到.txt文件。提前致謝!我試圖寫入txt.file的函數有什麼問題?

########################################################## 
# Cyberpanky N.O.W Python Character Generator by Ray Weiss 
# 
# Created 9/24/2012 
# 
# Much thanks to Connor Daliposon 
# Mho made a very readable D&D Character Generator 
# That a Python newbie like me could understand                                                         
########################################################## 

# Imports 
import random 
from pprint import pprint 


# Hey there 
print """ 
Hello world & welcome to the CYBERPANKY N.O.W. character generator. 
Programmed by Ray Weiss. 
To quit at anytime, press CNTRL-C. 
""" 

print "Lets figure out your stats first. Press enter to continue." 
raw_input() 

# Stat Roller 
# Rolls 3D6 and adds the sum together and prints 

def roll_stats(): 
    a = random.randint(1, 6) 
    b = random.randint(1, 6) 
    c = random.randint(1, 6) 
    d = random.randint(1, 6) 
    list = [a, b, c, d] 
    list.sort() 
    add = sum(list[1:4]) 
    return add 

# Modifiers 

def pow_mod(): 
    a = "|+1 to hit on mele attack rolls| " 
    b = "|+1 damage on mele attack rolls|" 

    if pow >= 15 and pow < 17: 
     return a 
    if pow >= 17: 
     return a + b 
    else: 
     return " ~no modifiers~" 

def iq_mod(): 
    a = "|-500$ to invest in cyberspace| " 
    b = "|Reroll Street Doc abilities|" 

    if iq >= 15 and iq < 17: 
     return a 
    if iq >= 17: 
     return a + b 
    else: 
     return " ~no modifiers~" 

def agi_mod(): 
    a = "|+1 to hit with ranged weapons| " 
    b = "|-1 to hit with ranged weapons|" 

    if agi >= 12: 
     return a 
    if agi <= 9: 
     return b 
    else: 
     return " ~no modifiers~" 

def con_mod(): 
    a = "|+1 hit point per hit dice|" 
    b = "|-1 hit point per hit dice|" 

    if con >= 15: 
     return a 
    elif con <= 6: 
     return b 
    else: 
     return " ~no modifiers~" 

def cyn_mod(): 
    a = "|Add 10% to earned experience|" 
    b = "|Add 5% to earned experience|" 
    c = "|Subtract 10% from earned experience|" 
    d = "|Subtract 20% from earned experience|" 

    if cyn >= 15: 
     return a 
    elif cyn > 12 and cyn < 15: 
     return b 
    elif cyn > 6 and cyn < 9: 
     return c 
    elif cyn <= 6: 
     return d 
    else: 
     return " ~no modifiers~" 

def cha_mod(): 
    a = "|+1 to reaction rolls|" 
    b = "|-1 to reaction rolls|" 

    if cha >= 15: 
     return a 
    if cha <= 8: 
     return b 
    else: 
     return " ~no modifiers~" 

# Prints stats + modifiers. 
pow = roll_stats() 
print "Power:", pow, pow_mod() 
iq = roll_stats() 
print "Intelligence:", iq, iq_mod() 
agi = roll_stats() 
print "Agility:", agi, agi_mod() 
con = roll_stats() 
print "Constitution:", con, con_mod() 
cyn = roll_stats() 
print "Cynicism:", cyn, cyn_mod() 
cha = roll_stats() 
print "Charisma:", cha, cha_mod() 

print "\nIf you dont like your stats, tough shit. This is Cyberpanky N.O.W." 
print "\nPress enter to continue." 
raw_input() 

# Choose Class 

print """In Cyberpanky N.O.W. there are only 3 character classes. 

1. Samurai: Badass mercenaries. Can make multiple attacks. 
------------------------------------------------------------------------------ 
2. Street Docs: Hackers/Doctors. Can heal & hack. 
------------------------------------------------------------------------------ 
3. Shaman: Magical prophets that follow spirit animals and cast miracles 
------------------------------------------------------------------------------ 
""" 
type = int(raw_input("Please type a 1, 2, or 3 > ")) 

if type == 1: 
    character_class = "Samurai" 
    class_power = """* Attack multiple times for a -2 to hit penalty. 
* Uses a D10 for Physical hit box. 
* Has a + 1 to hit bonus that levels up to level 5. 
""" 
    name = raw_input("Alright {}, tell me your name >".format(character_class)) 

elif type == 2: 
    character_class = "Street Doc" 
    class_power = """* Roll IQ to mess with electronics 
* Can heal party members after combat for 1D4 Hit Points 
* Can perform cyberwear installation or surgery with proper tools. 
""" 
    name = raw_input("Alright {}, tell me your name >".format(character_class)) 

elif type == 3: 
    character_class = "Shaman" 
    class_power = """* Can cast Miracles. 
* Can call for a saving grace if they are on their last Cool Hit Box 
* Can do favors for their god for more miracles, or pay a tithe. 
""" 
    name = raw_input("Alright {}, tell me your name >".format(character_class)) 

# Alignment 

print"""\nAlright {}, pick an alignment, it's not that important; 

1. Narcissist: Cocky bastard, you think you are the best. 
------------------------------------------------------------------------------ 
2. Neutral: Pretty self explanatory dipshit. 
------------------------------------------------------------------------------ 
3. Nihilist: You care about nothing Lebowski, You'll cut off their Johnson. 
""".format(name) 

x = int(raw_input("Please type a 1, 2, or 3 > ")) 

if x == 1: 
    alignment = "Narcissist" 

elif x == 2: 
    alignment = "Neutral" 

elif x == 3: 
    alignment = "Nihilist" 

print "\nOk you chose {} for an alignment, press enter to continue.".format(
                   alignment) 
raw_input() 

# Functions for ID generation 

def gen_id(): 
    global gender_id 
    one = "1. Straight male" 
    two = "2. Gay male" 
    three = "3. Transgender male pre-op" 
    four = "4. Transgender male post-op" 
    five = "5. Bisexual male" 
    six = "6. Straight female" 
    seven = "7. Gay female" 
    eight = "8. Transgender female pre-op" 
    nine = "9. Transgender female post-op" 
    ten = "10. Bisexual female" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "\nPlease hit enter to roll 1D10" 
    raw_input() 
    gender_id = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(gender_id) 
    raw_input() 

# Ethnic Profile 
def eth_pr(): 
    global ethnic_pr 
    one = "1. Native American" 
    two = "2. West European" 
    three = "3. East European" 
    four = "4. North Asian" 
    five = "5. South Asian" 
    six = "6. Pacific" 
    seven = "7. North African" 
    eight = "8. South African" 
    nine = "9. Slavic/Caucuses" 
    ten = "10. Hispanic" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "\nPlease hit enter to roll 1D10" 
    raw_input() 
    ethnic_pr = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(ethnic_pr) 
    raw_input() 

# Family Class Distinction 
def fam_cls(): 
    global fcd 
    one = "1. Homeless" 
    two = "2. Impoverished" 
    three = "3. Lower Class" 
    four = "4. Lower Middle Class" 
    five = "5. Middle Class" 
    six = "6. Comfortable" 
    seven = "7. Upper Middle Class" 
    eight = "8. Upper Class" 
    nine = "9. Job Creators" 
    ten = "10. Warren Buffett" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    fcd = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(fcd) 
    raw_input() 

# Whats Good With Your Folks 
def wha_goo(): 
    global wg, one_x, two_x 
    one_x = "1. Things Are Good With Your Folks; Go to Current Family Affairs" 
    two_x = "2. Your folks are fucked; go to Your Folks Got Fucked" 
    list = [one_x, two_x] 
    pprint(list) 
    print "Please hit enter to roll 1D2" 
    raw_input() 
    wg = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(wg) 
    raw_input() 

# Your Folks Got Fucked 
def yo_fo(): 
    global fogo_fuck 
    one = "1. Your parents were mugged and murdered, just like Batman" 
    two = "2. Your parents were both convicted of murder" 
    three = "3. Parents decapitated by a truck" 
    four = "4. Parents addicted to coke, put you in an orphanage" 
    five = "5. Parents were corporate spies and assinated in front of you" 
    six = "6. Parents abandonded you at a young age and joined a cult" 
    seven = "7. Your parents died from STDs contracted from aldultery" 
    eight = "8. Parents owed mob a bunch of money, sleeping with fishies" 
    nine = "9. Nuclear explosion incinerated parents, their shadow remains" 
    ten = "10. Parents shot themselves immediately after you were born." 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    fogo_fuck = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(fogo_fuck) 
    raw_input() 

# Current Family Affairs 
def cu_fa(): 
    global cur_fam, one_y, two_y 
    one_y = "1. Things are ok with family, go to Nature Or Nurture" 
    two_y = "2. Your family is fucked, go to Your Family Is Fucked" 
    list = [one_y, two_y] 
    pprint(list) 
    print "Please hit enter to roll 1D2" 
    raw_input() 
    cur_fam = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(cur_fam) 
    raw_input() 

# Your Family Got Fucked 
def fa_fu(): 
    global fam_fuk 
    one = "1. Market tanked with president Paul, dead broke family." 
    two = "2. Home invaders raped and murded the women in your family" 
    three = "3. Racial Supremisicist drove your family from their home" 
    four = "4. Whole family was abducted by aliens, never seen again" 
    five = "5. Radiation leak hospitalized your whole family." 
    six = "6. Family was accidentally napalmed by the UN, all dead." 
    seven = "7. Family came down with malaria" 
    eight = "8. Family has some obvious dealings with Illuminati" 
    nine = "9. Family eaten alive by cannibals" 
    ten = "10. Make it up dipshit" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    raw_input() 
    fam_fuk = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(fam_fuk) 
    raw_input() 

# Nature Or Nurture 
def na_nu(): 
    global nat_nur 
    one = "1. Your childhood was very boring & average" 
    two = "2. Your childhood was spent moving from city to city" 
    three = "3. Your childhood was depraved; hungry and lonely" 
    four = "4. Your childhood was rewarding, social & fun." 
    five = "5. You were a sick child, spent a lot of time in bed" 
    six = "6. You were sent to a preppy boarding school as a kid" 
    seven = "7. You got addicted to drugs; it screwed you up." 
    eight = "8. You killed another kid, spent time in a hospital" 
    nine = "9. You were a child genius, but had few friends" 
    ten = "10. Make it up dipshit" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    nat_nur = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(nat_nur) 
    raw_input() 

# General Disposition 
def ge_di(): 
    global gen_dis 
    one = "1. Friendly" 
    two = "2. Unfriendly" 
    three = "3. Shy" 
    four = "4. Outgoing" 
    five = "5. Unpretentious" 
    six = "6. Pretentious" 
    seven = "7. Hyperactive" 
    eight = "8. Depressed" 
    nine = "9. Wonderful Human Being" 
    ten = "10. Scumbag" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    gen_dis = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(gen_dis) 
    raw_input() 

# Whats the most important thing in the world 
def wh_wo(): 
    global wha_wor 
    one = "1. Money" 
    two = "2. Kicking ass" 
    three = "3. Getting fucked up" 
    four = "4. Family & friends" 
    five = "5. Business" 
    six = "6. The internet" 
    seven = "7. Faith" 
    eight = "8. Style" 
    nine = "9. Anarchy" 
    ten = "10. Selfishness" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    wha_wor = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(wha_wor) 
    raw_input() 

# Who is to blame for the worlds problems? 
def wh_pr(): 
    global who_pro 
    one = "1. Corporations" 
    two = "2. Leftists" 
    three = "3. Fate" 
    four = "4. Religion" 
    five = "5. The Illuminatus" 
    six = "6. The News Media" 
    seven = "7. The UN" 
    eight = "8. Your Neighbors" 
    nine = "9. Aliens" 
    ten = "10. President Ron Paul" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    who_pro = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(who_pro) 
    raw_input() 

# How do you solve the worlds problems 
def ho_pr(): 
    global how_pro 
    one = "1. Kill them all" 
    two = "2. But them out" 
    three = "3. Intimidation" 
    four = "4. Diplomacy" 
    five = "5. Free trade" 
    six = "6. Seduction" 
    seven = "7. New-Age spirituality" 
    eight = "8. Religious fanaticism" 
    nine = "9. Federal power" 
    ten = "10. Who gives a shit" 
    list = [one, two, three, four, five, six, seven, eight, nine, ten] 
    pprint(list) 
    print "Please hit enter to roll 1D10" 
    raw_input() 
    how_pro = random.choice(list) 
    print "You rolled {}, press enter to continue.".format(how_pro) 
    raw_input() 


# ID Generation 

print ("Alright {}, now we need to figure out your personality & life story." 
                   .format(name)) 
print "\n\t\t1. Ethnics, Genes, & Looks" 
print "\nTo figure out your age, we add 15 to 1D10.\n" 
age = random.randint(1, 10) + 15 
print "Press enter to continue dipshit." 
raw_input() 
print "Age:", age 
print "\t\tGender Identity\n" 
gen_id() 
print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\tEthnic Profile\n" 
eth_pr() 
print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\t2. Ballz Of Our Fathers" 
print "\n" 
print "\t\tFamily Class Distinction" 
fam_cls() 
print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\tWhat's Good With Your Folks" 
wha_goo() 
print""" 
------------------------------------------------------------------------------ 
""" 
if wg == one_x: 
    fogo_fuck = "none" 
    print "\t\tCurrent Family Affairs" 
    cu_fa() 
    print""" 
------------------------------------------------------------------------------ 
""" 
    if cur_fam == one_y: 
     fam_fuk = "none" 
     print "\t\tNature Or Nurture?" 
     na_nu() 
     print""" 
------------------------------------------------------------------------------ 
""" 
    if cur_fam == two_y: 
     print "\t\t Your Family Is Fucked" 
     fa_fu() 
     print""" 
------------------------------------------------------------------------------ 
""" 
     print "\t\tNature Or Nurture?" 
     na_nu() 
     print""" 
------------------------------------------------------------------------------ 
""" 
if wg == two_x: 
    print "\t\tYour Folks Got Fucked" 
    yo_fo() 
    print""" 
------------------------------------------------------------------------------ 
""" 
    print "\t\tCurrent Family Affairs" 
    cu_fa() 
    print""" 
------------------------------------------------------------------------------ 
""" 
    fam_fuck = "none" 
    print "\t\tNature Or Nurture?" 
    na_nu() 
    print""" 
------------------------------------------------------------------------------ 
""" 
    if cur_fam == one_y: 
     fam_fuck = "none" 
     print "\t\tNature Or Nurture?" 
     na_nu() 
     print""" 
------------------------------------------------------------------------------ 
""" 
    if cur_fam == two_y: 
     print "\t\t Your Family Is Fucked" 
     fa_fu() 
     print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\t3. What Makes you tick" 
print "\n" 
print "\t\tGeneral Disposition" 
ge_di() 
print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\tWhat's The Most Important Thing In The World?" 
wh_wo() 
print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\tWho Is To Blame For The World's Problems?" 
wh_pr() 
print""" 
------------------------------------------------------------------------------ 
""" 
print "\t\tHow Do You Solve Your/The Worlds Problem" 
ho_pr() 
print""" 
------------------------------------------------------------------------------ 
""" 

#Starting Money 
gold = roll_stats() * 100 

print "Ok so lets sum that up, please hit enter to continue" 
raw_input() 

print""" 
------------------------------------------------------------------------------ 
""" 

# Print Character Sheet Function. 
def char_shee(): 
    print "Name:", name 
    print "Class:", character_class 
    print "Class Powers:", class_power 
    print "Alignment:", alignment 
    print "Power:", pow, pow_mod() 
    print "Intelligence:", iq, iq_mod() 
    print "Agility:", agi, agi_mod() 
    print "Constitution:", con, con_mod() 
    print "Cynicism:", cyn, cyn_mod() 
    print "Charisma:", cha, cha_mod() 
    print "Money:", gold 
    print "All Characters Start With 3 Hit Dice" 
    print""" 
\t\t{0}'s History 
\t\t------------------ 
\t\tAge:{1} 
\t\t{2} 
\t\t{3} 
\t\t{4} 
\t\t{5} 
\t\t{6} 
\t\t{7} 
\t\t{8} 
\t\t{9} 
\t\tGeneral Disposition: {10} 
\t\tMost important thing is: {11} 
\t\tWho is to blame for worlds problems: {12} 
\t\tHow to solve the worlds problems: {13} 
""".format(name, age, gender_id, ethnic_pr, fcd, wg, fogo_fuck, cur_fam,fam_fuk, nat_nur, gen_dis, wha_wor, who_pro, how_pro) 

char_shee() 
print "Press enter to continue" 
raw_input() 

# Export to text file? 

#character sheet function for writing 
def character_sheet(): 
    sheet = [] 
    sheet.append("Name: " + name) 
    sheet.append("Class: " + character_class) 
    sheet.append("Class Powers :" + class_power) 
    sheet.append("Alignment: " + alignment) 
    sheet.append("Power: ", pow, pow_mod()) 
    sheet.append("Intelligence: ", iq, iq_mod()) 
    sheet.append("Agility: ", agi, agi_mod()) 
    sheet.append("Constitution: ", con, con_mod()) 
    sheet.append("Cynicism", cyn, cyn_mod()) 
    sheet.append("Charisma: ", cha, cha_mod()) 
    sheet.append("Money: " + gold) 
    sheet.append("All Characters Start With 3 Hit Dice") 
    sheet.append(""" 
\t\t{0}'s History 
\t\t------------------ 
\t\tAge:{1} 
\t\t{2} 
\t\t{3} 
\t\t{4} 
\t\t{5} 
\t\t{6} 
\t\t{7} 
\t\t{8} 
\t\t{9} 
\t\tGeneral Disposition: {10} 
\t\tMost important thing is: {11} 
\t\tWho is to blame for worlds problems: {12} 
\t\tHow to solve the worlds problems: {13} 
""".format(name, age, gender_id, ethnic_pr, fcd, wg, fogo_fuck, cur_fam,fam_fuk, nat_nur, gen_dis, wha_wor, who_pro, how_pro)) 

    # Return the string with newlines 
    return '\n'.join(sheet) 


print """Just because I like you, let me know if you want this character 
saved to a text file. Please remember if you save your character not to 
name it after something important, or you might lose it. 
""" 
text_file = raw_input("Please type 'y' or 'n', if you want a .txt file > ") 
if text_file == "y": 
    filename = raw_input("\nWhat are we calling your file, include .txt > ") 
    target = open(filename, 'w') 
    target.write(character_sheet()) 
    target.close() 
    print "\nOk I created your file." 
    print """ 
Thanks so much for using the Cyberpanky N.O.W Character Generator 
By Ray Weiss 
Goodbye 
""" 
else: 
    print """ 
Thanks so much for using the Cyberpanky N.O.W Character Generator 
By Ray Weiss 
Goodbye 
""" 

這裏是錯誤輸出

> File "cncg.py", line 634, in <module> 
>  target.write(character_sheet()) File "cncg.py", line 596, in character_sheet 
>  sheet.append("Power: ", pow, pow_mod()) TypeError: append() takes exactly one argument (3 given) Raymond-Weisss-MacBook-Pro:mystuff 
> Raylug$ 

回答

4

你需要把你的舊print "Power:", pow, pow_mod()行成一個字符串追加:

或者使用格式化:

sheet.append("Power: {0} {1}".format(pow, pow_mod())) 

因爲.append()一次只需要一件物品。

+0

我得到這個輸出是試圖 文件 「cncg.py」,線路596,在character_sheet sheet.append( 「電源」 + POW + '' + pow_mod()) 類型錯誤:不能連接'str'and'int'objects Raymond-Weisss-MacBook-Pro:mystuff Raylug $ – lerugray

+0

@lerugray:對,然後使用格式化程序版本,對於混合類型更容易。或者在這種情況下,在整數「pow」上調用'str()'。 –

+0

@Marijn皮特斯得到這個錯誤: 文件 「cncg.py」,線路634,在 target.write(character_sheet()) 文件 「cncg.py」,線路599,在character_sheet sheet.append(」 {0} {1}「。格式(con + con_mod())) TypeError:不支持的操作數類型爲+:'int'和'str' Raymond-Weisss-MacBook-Pro:mystuff Raylug $ – lerugray

0

您正在使用的append方法不止一個說法,因爲錯誤說:

TypeError: append() takes exactly one argument (3 given) 

你必須concatenize變量和函數結果字符串中,因爲你不能concatenize與其他字符串類型,您必須在將所有內容連接起來之前將其轉換爲字符串。

sheet.append("Power: " + str(pow) + " " + str(pow_mod())) 
+1

這省略了'pow'和'pow_mod()'之間的空間(後者返回一個沒有前導空格的字符串)。原來的代碼(其他qusetion)使用'print'Power:「,pow,pow_mod()'爲你插入空格。 –

+0

@Martijn彼得斯:哎呀,我完全忘了那個。感謝您指出! –