2017-12-06 13 views
0

テキストファイルに保存される入力名の文字列を取得しようとしている。私は大文字で入力する必要があります。 I.保存したテキストファイルはDanielDanClark名が含まれている、と私はこの部分、私は最後の4行は、おそらく道間違っていることを知っているテキストファイル内で、大文字で始まる大文字の文字列で、特定の大文字で始まる項目を見つける。

for i in range(num): 

    print("Name",i+1," >> Enter the name:") 
    n=input("") 
    names+=n   
file=open("names.txt","w") 
file.write(names) 
lookUp=input("Did you want to look up any names?(Y/N)") 
x= ord(lookUp) 
if x == 110 or x == 78: 
    quit() 
else: 
    letter=input("Enter the first letter of the names you want to look up in uppercase:") 
    file=open("names.txt","r") 
    fileNames=[] 
    file.list() 
    for letter in file: 
     fileNames.index(letter) 
    fileNames.close() 

でD.で始まる名前を私は立ち往生午前を引っ張っする必要があります。それはちょうどので、私は私の最後の失敗した試行で試してみました

答えて

1

私は5の値numを与えるの自由を取った

num = 5 
names = "" 
for i in range(num) 
    print("Name",i+1," >> Enter the name:") 
    n=input("") 
    names+=n 

ブロックして、コードブロックを破壊することができます、とnames""の値は何でありますコードが実行されます。このブロックは問題ありません。すべての入力が行われたnamesと呼ばれるstringを作成します。区切り文字を入力すると、データを読みやすくなります。提案は改行をある\nを使用することですので、あなたは、ファイルの書き込みを取得するとき、あなたは実際には各ライン上に、例を一つの名前を持っている:あなたは、ファイルを書き込むしようとしている今

num = 5 
names = "" 
for i in range(num) 
    print("Name",i+1," >> Enter the name:") 
    n = input() 
    names += n + "\n" 

このブロックで
file=open("names.txt","w") 
file.write(names) 

あなたがファイルを閉じることを忘れて、より良い方法は、完全にファイルのパス名を指定するには、例です。

file = open(r"c:\somedir\somesubdir\names.txt","w") 
file.write(names) 
file.close() 

またはより良い使用してwith

with open(r"c:\somedir\somesubdir\names.txt","w") as openfile: 
    openfile.write(names) 

ユーザーが名前を入力し、[終了を検索したい場合は、あなたが求めている次のブロック:

lookUp=input("Did you want to look up any names?(Y/N)") 
x= ord(lookUp) 
if x == 110 or x == 78: 
    quit() 

まず最初は、あなたが生産に使用すべきではないquit()を使用していることですあなたが本当にsys.exit()を使用する必要がありますつまり、あなたはimportsysモジュールを必要としていることを意味する答えhereを参照してください。次に、答えの数値をNまたはnにして、ifステートメントでこれをチェックします。 ord()を実行する必要はありません。ifステートメントで直接比較文字列を使用することができます。例:これは本当にどちらか正常に動作していないので、これは

else: 
    letter=input("Enter the first letter of the names you want to look up in uppercase:") 
    file=open("names.txt","r") 
    fileNames=[] 
    file.list() 
    for letter in file: 
     fileNames.index(letter) 
    fileNames.close() 

区切り\nは次のとおりです。

lookup = input("Did you want to look up any names?(Y/N)") 
if lookup.lower() == "n": 
    sys.exit() 

はその後、前のif文のelse:ブロックで、要求されたデータを検索するために進みます便利です。テキストファイルが開かれると、ファイルごとにfor line in fileブロックを列挙し、最初のブロックに\n区切り文字を追加すると、各行は名前になります。 for letter in fileブロックでも間違っていますが、それはあなたがしなければならないと思われることをしません。実際には、inputに入力したwhayに関係なく、ファイル内の各文字が返されます。ここでは実施例である:

すべて一緒にそれを置く
letter = input("Enter the first letter of the names you want to look up in uppercase:") 
result = [] 
with open(r"c:\somedir\somesubdir\names.txt", "r") as openfile: 
    for line in openfile: ## loop thru the file line by line 
     line = line.strip('\n') ## get rid of the delimiter 
     if line[0].lower() == letter.lower(): ## compare the first (zero) character of the line 
      result.append(line) ## append to result 
print(result) ## do something with the result 

import sys 

num = 5 
names = "" 
for i in range(num) 
    print("Name",i+1," >> Enter the name:") 
    n = input("") 
    names += n + "\n"   

with open(r"c:\somedir\somesubdir\names.txt","w") as openfile: 
    openfile.write(names) 

lookup = input("Did you want to look up any names?(Y/N)") 
if lookup.lower() == "n": 
    sys.exit() 

letter = input("Enter the first letter of the names you want to look up in uppercase:") 
result = [] 
with open(r"c:\somedir\somesubdir\names.txt", "r") as openfile: 
    for line in openfile: 
     line = line.strip('\n') 
     if line[0].lower() == letter.lower(): 
      result.append(line) 
print(result) 

作成します。私が指摘したい1つの警告、あなたはファイルを作成するとき、あなたはwモードでファイルを開き、毎回新しいファイルを作成し、前のファイルを上書きします。ファイルに追加する場合は、aモードで開くか、既存のファイルに追加するか、ファイルが存在しない場合は新しいファイルを作成する必要があります。

+0

ありがとうございます。私はこれを別のやり方で行わなければならないことを知っていました。私はそれが動作すると言われて以来、私はそれがこのように動作するようにしようとしていた。あなたの返事に感謝します。 –

関連する問題