2016-07-07 3 views
-3

Ok, also schreibe ich einen Code, der zehn Dungeon- und Drachencharaktere generiert. Ich muss zehn Zeichen generieren, deren Zeichen auf jeder Zeile stehen sollten. Hier sind die Anweisungen von meinem Lehrer: "Ändern Sie das Programm, um 10 Namen zu generieren und speichern Sie sie in einem Array. Dann Schreiben Sie eine Funktion, dumpFile, die das Array in eine Datei namens" CharacterNames.txt "schreibt Es sollte ein Charaktername auf jedem sein Zeile in der Datei. "Wie erhalte ich meinen Code, um einen Charakternamen zehn Mal in verschiedenen Zeilen auszudrucken?

Also hier ist mein Originalcode.

import random 

def main(): 

    txt1 = loadFile("names.txt") 
    name_txt1 = random.randint(0, len(txt1)) 
    name2_txt1 = random.randint(0, len(txt1)) 
    txt2 = loadFile("titles.txt") 
    titles_txt2 = random.randint(0, len(txt2)) 
    txt3 = loadFile("descriptors.txt") 
    descriptors_txt3 = random.randint(0, len(txt3)) 

    print(txt2[titles_txt2], txt1[name_txt1], txt1[name2_txt1],"the", txt3[descriptors_txt3]) 

def loadFile(fileName): 

    array = [] 
    file = open(fileName, "r") 

    for line in file: 
     array.append(line.strip()) 
    file.close() 
    return(array) 


main() 

Hier ist mein modifizierter Code so weit.

import random 


def main(): 
    txt1 = loadFile ("names.txt") 
    txt2 = loadFile ("titles.txt") 
    txt3 = loadFile ("descriptors.txt") 
    array = [] 

    for _ in range (10): 
    name_txt1 = dumpFile2 (txt1) 
    name2_txt1 = dumpFile2 (txt1) 
    titles_txt2 = dumpFile2 (txt2) 
    descriptors_txt3 = dumpFile2(txt3) 
    x = " ".join ((titles_txt2, name_txt1, name2_txt1, "the", descriptors_txt3)) 
    array.append (x.strip()) 
    dumpFile (array) 

def loadFile (fileName): 
    with open (fileName) as file1: return file1.read().splitlines() 


def dumpFile (arr): 
    file = open ("CharacterNames.txt", "w") 
    file.close() 
    print(arr) 

def dumpFile2(arr): 
    return arr [random.randint(0, len(arr)- 1)] 

main() 

Hier ist die Ausgabe ich von meinem modifizierten Code bekommen: This image shows the output I am getting from my modified code. I'm getting a bunch of lines when I'm supposed to only generate ten character names with one on each line

+0

Sie die Datei öffnen und die Linien drucken, aber Sie sie nie in die Datei schreiben. –

+0

Sie rufen dumpFile bei jeder Schleife Iteration, die Array für _ = 1, _ = 2 usw. dedent ist. Die Zeile dumpFile (Array) – dodell

+0

Danke, dass ich auch meine Aufmerksamkeit hatte, hatte ich ursprünglich aus der for-Schleife aber irgendwie habe ich nicht gemerkt, dass ich es wieder eingerückt habe. Danke, dass du darauf hingewiesen hast. –

Antwort

0

dumpfile wird in jeder Iteration der Schleife genannt. Setzen Sie es stattdessen nach der Schleife. Außerdem (wie Sie sicher wissen), lesen Sie nicht in die Datei dumpfile, nur zum Terminal drucken.

Sie könnten vor dem Schließen der Datei etwas wie

names = '\n'.join(arr) 
#print(names) 
file.write(names) 

tun.

+0

Danke das hat den Trick gemacht, diese Antwort meine Frage krank sein sicher, Ihnen den grünen Scheck zu geben! –

0

Unter der Annahme, dass Sie die Standardnamen auf Datei „originalnames.txt“ haben, würde ich so etwas tun:

def readnames(file): 
with open(file) as f: 
    return f.read().splitlines() 

def choosepos(max): 
    from random import randint 
    return randint(0, max-1) 

def main(): 
    orignames = readnames('originalnames.txt') 
    choosenames = list() 
    for n in range(5): # number of names that you wnat 
     npos = choosepos(len(orignames)) 
     print(npos) 
     choosenames.append(orignames[npos]) 
     orignames.remove(orignames[npos]); 
    # instead of print, you write on your file 
    print(choosenames) 

main() 
Verwandte Themen