2017-02-22 17 views
-1

このプログラムの目標は、ファイルから生徒の名前のリストを読み、その生徒のメールを生成し、そのメールを外部のテキストファイルに保存することです。私は電子メールを正しく生成する関数を書いています。しかし、をnewStudentEmailという関数で呼び出すと、それらの名前を一般的なテキストファイルから読み込んでいます。私が遭遇している問題は(@ college.edu)がfirstInitiallastNameの前に追加されていることです。Pythonの文字列連結問題

例えば、名前Georgeneは、モンテスマはcollege.edugmontezuma

@戻ってくる私は、forループ内でdomainを連結しようとしていると同じ問題が発生します。誰がなぜこれが起こっているのかについて説明していますか?

def generateEmail(name): 
#Generates an email address given a first and last name separated by a comma 

    firstInitial = str.lower(name[0]) 
    comma = name.find(",") 
    lastName = str.lower(name[comma+1:]) 
    domain = "@college.edu" 
    email = firstInitial + lastName + domain 

    return email 


def newStudentEmail(): 
    file = open("newStudents.txt", "r") 
    header = next(file) 
    for name in file: 

     newEmail = print(generateEmail(name),end="") 

     #outfile = open("newStudentsEmail.txt", "a") 
     #outfile.write(newEmail) 

    file.close() 
    #outfile.close() 
+1

していないされるように、あなたはlastName = str.lower(name[comma+1:])lastNameは、改行が含まれている場合あなたのコード全体を見渡しましたが、私が今言うことができる改善は、半分(姓と名)を得るためにname.split( "、")を使うことです。カンマの位置を見つけて別々にコピーする必要がありません。 –

+0

ありがとう!私はまだそれを学んだことはありませんでしたが、知ることは非常に便利です。 –

+0

'generateEmail'に渡す最初のものは空文字列かコンマのない文字列のどちらかです。それは '@ college.edu'が連結された状態で印刷され、次に生成された電子メールがその横に印刷され、連結の順序が間違っているように見えます。 ---問題はあなたのファイルを読むコードです。 – byxor

答えて

0

理由は次のとおりです。nameを生成するたびに改行文字があります。

AクイックフィックスはlastName = str.lower(name[comma+1:-1])

lastName = str.lower(name[comma+1:])を変更したり、ブランドンは、コメントで言うようname.strip()を使用しています。

私はあなたのコードを実行し、ラインでnewStudentsEmail.txt header line Alan,Smith Bob,Lee

として次のテキストを使用しています:for name in filename文字列が改行文字が含まれています。 name変数はgenerateEmailに渡し、「アラン・スミス\ n個」であり、リターンemail'asmith\[email protected]'であり、入力上から全体の出力は

asmith @college.edublee @college.edu

+0

' lastName'を計算するときに '-2'になるのはなぜですか?名前から追加の文字を削除しないのですか? – byxor

+0

'name'文字列に改行があるためです。-2を使用して改行文字を消去します。 – EvanL00

+0

-2抹消2文字、改行文字は1文字です。削除する余分なキャラクターとその理由は何ですか? – byxor