Asif Khan Asif Khan - 7 days ago 6
Python Question

Python code - not sure about text files

I need help with my python code. I've been trying to save the sentence inputted into a text file without it repeating the words in the file. I'm not sure how to do it.

Any help is appreciated.

This is my code:

import sys

#user-friendly, informs the user what do to
answer = input("What is your name?\n")
print("Hello " + answer + " and welcome to this program!\n")
print("This program will ask you for a sentence and print out the positions of the words instead of the actual words. it will then save it in a file with the sentence.\n")

repeat = True
loop = True
true = True

#Allows the user to decide whether or not they want to use the program
while repeat:
answer2 = input("Do you want to do run this program?\n")
#if the answer is 'no' then the program stops
if answer2.lower() == "No" or answer2.lower() == "nah" or answer2.lower() == "no" or answer2.lower() == "n":
print ("Okay then ... Bye.")
sys.exit()
#if the answer is 'yes' then the code continues
elif answer2 == "Yes".lower() or answer2.lower() == "yeah" or answer2.lower() == "yes" or answer2.lower() == "y":
print ("Okay then ... \n")
while true:
if loop == True:
sentence = input("Please enter a sentence:\n").lower()
#converts the sentence into a list
s = sentence.split()
#works out the positions of the words
positions = [s.index(x)+1 for x in s]
print(positions)

#opens a text file
fi = open("CA Task 2.txt", "w")
#Allows you to write over the original content in the file
fi.write(str(s))
#it closes the file once you've finished with it
fi.close()

#opens a text file
fi = open("CA Task 2.txt", "a")
#Allows you to add to the text file instead of writing over it
fi.write("\n")
fi.write(str(positions))
#it closes the file once you've finished with it
fi.close()
sys.exit()

#if the answer is neither 'yes' nor 'no' then the programs jumps to this part and allows the user to try again
else:
print("Please enter a valid answer! Try again!\n")


Let's just say the sentence inputted is "ask not what your country can do for you but what you can do for your country".

It should come up saying:
ask not what your country can do for you but what you can do for your country

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 9, 6, 7, 8, 4, 5]

This works and then it has to be saved into a text file:
['ask', 'not', 'what', 'your', 'country', 'can', 'do', 'for', 'you', 'but', 'what', 'you', 'can', 'do', 'for', 'your', 'country']

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 9, 6, 7, 8, 4, 5]

This is fine but what i want it to do is to not repeat the word if it has already been mentioned once in the text file.

Answer

There is built is function called: set https://docs.python.org/3/library/stdtypes.html#set:

import sys

 #user-friendly, informs the user what do to
 answer = input("What is your name?\n")
 print("Hello " + answer + " and welcome to this program!\n")
 print("This program will ask you for a sentence and print out the positions of the words instead of the actual words. it will then save it in a file with the sentence.\n")

repeat = True
loop = True
true = True

 #Allows the user to decide whether or not they want to use the program
 while repeat:
  answer2 = input("Do you want to do run this program?\n")
  #if the answer is 'no' then the program stops
  if answer2.lower() == "No" or answer2.lower() == "nah" or answer2.lower() ==    "no" or answer2.lower() == "n":
    print ("Okay then ... Bye.")
    sys.exit()
#if the answer is 'yes' then the code continues
elif answer2 == "Yes".lower() or answer2.lower() == "yeah" or answer2.lower() == "yes" or answer2.lower() == "y":
    print ("Okay then ... \n")
    while true:
        if loop == True:
            sentence = input("Please enter a sentence:\n").lower()
        # converts the sentence into a list
        s = sentence.split()
        # for loop makes sure that if the word is in the list then it wont print it out again
        for word in s:
            if word not in s:
                s.append(word)
        # works out the positions of the words
        positions = [s.index(x) + 1 for x in s]
        print(set(positions))

        # opens a text file
        fi = open("CA Task 2.txt", "w")
        # Allows you to write over  the original content in the file
        fi.write(str(set(s)))
        # it closes the file once you've finished with it
        fi.close()

        # opens a text file
        fi = open("CA Task 2.txt", "a")
        # Allows you to add to the text file instead of writing over it
        fi.write("\n")
        fi.write(str(set(positions)))
        # it closes the file once you've finished with it
        fi.close()
        sys.exit()

        #if the answer is neither 'yes' nor 'no' then the programs jumps to this part and allows the user to try again
        else:
         print("Please enter a valid answer! Try again!\n")'
Comments