ユーザーが「いいえ」と入力したときに while を含む最初の for ループが機能する理由と、2 番目のインスタンスが機能しない理由を理解するのに苦労しています。
2 つのループの構造はほぼ同じだと思います。2 番目の出現は、別の関数に分割されただけです。
ユーザーが「いいえ」を入力したときに文字列を削除しないはずです。
これは機能します。ユーザーが「いいえ」を入力すると、何も削除されません。
def remove():
f = open('codilist.txt')
coname = raw_input('What company do you want to remove? ') # company name
tmpfile = open('codilist.tmp', 'w')
for line in f:
if coname.upper() in line:
while True:
answer = raw_input('Are you sure you want to remove company?\nyes or no?')
if answer == 'yes':
print line.upper() + '...has been removed.'
break
elif answer == 'no':
f.close()
tmpfile.close()
return
else:
print 'Please choose yes or no.'
else:
tmpfile.write(line)
f.close()
tmpfile.close()
os.rename('codilist.tmp', 'codilist.txt')
これは機能しません。ユーザーが「いいえ」と入力すると、とにかく文字列が削除されます。
def find_and_remove(f,coname,tmpfile):
for line in f:
if coname.upper() in line:
while True:
answer = raw_input('Are you sure you want to remove company?\nyes or no?')
if answer == 'yes':
print line.upper() + '...has been removed.'
break
elif answer == 'no':
f.close()
tmpfile.close()
return
else:
print 'Please choose yes or no.'
else:
tmpfile.write(line)
def remove():
f = open('codilist.txt')
coname = raw_input('What company do you want to remove? ') # company name
tmpfile = open('codilist.tmp', 'w')
find_and_remove(f,coname,tmpfile)
f.close()
tmpfile.close()
os.rename('codilist.tmp', 'codilist.txt')