Witam,
zaczynam studia informatyczne i zabieram się za naukę programowania.
Nie ukrywam, że jestem laikiem więc liczę na wyrozumiałość.
Napisałem kod w którym dodawane są poszczególne dane do pliku txt (każda dana w osobnej linijce)
Teraz chciałbym aby mi ktoś pokazał jak napisać kod gdzie użytkownik po wpisaniu np: Apple
sprawdzi czy znajduje się taka linijka z wyrazem Apple i wyrzuci czy jest taka dana czy nie w tym pliku txt
Z czym masz problem?
- Otwarcie pliku
- Wczytanie kolejnego wiersza
- Porównanie z podanym napisem
- Wypisaniem wyniku
- Niechęcią do nauki
Rozwiązanie #1:
- Wczytaj plik do
str
- Podziel go na linijki (np
split()
) dolist
- Sprawdź czy dane słowo
"Apple"
znajduje się w liście
Rozwiązanie #2:
- Wczytaj plik do
str
- Sprawdź czy istnieje w nim ciąg pasujący do wyrażenia regularnego
/^Apple$/m
#Edit:1
Może będzie łatwiej.
Tak wygląda mój kod
dana1 = input ("Wpisz dane1: ")
dana2 = input ("Wpisz dane2: ")
file = open("Dane1.txt","a")
file.write(dana1 + "\n")
file.write(dana2 + "\n")
file.close()
file = open("Dane1.txt")
for plik in file:
print(plik.count('Apple'))
I naprawdę nie wiem co dalej...
Na konsoli dało mi wartość 1
wiec znalazł taki tekst, ale chciałbym aby mi ktoś powiedział jak to zdefiniować jako if
Czyli jeżeli to słowo jest to... a jeżeli go nie ma to...
Będę wdzięczny jeżeli ktoś mógłby mi napisać komendę do tego bo naprawę nie wiem jak to wywołać.
def file_contains_line(filename: str, substring: str)
with open(filename) as file:
content = file.read()
lines = content.split("\n")
return substring in lines
if file_contains_line("Dane1.txt", "Apple"):
pass
linijka z wyrazem Apple
Co to znaczy, jak będzie linia, asddApplejfkehjf
ma zwrócić, True
? A może nie, może ma być, hahaxd Apple bad
, albo, hahaxd Apple.
?
zbyszek007 napisał(a):
zaczynam studia informatyczne i zabieram się za naukę programowania.> Nie ukrywam, że jestem laikiem więc liczę na wyrozumiałość.
Serio? Z deka późno.
Na takie zadanie znam wielu nastolatków ze średniej, którzy mają w paluszku.
zbyszek007 napisał(a):
Napisałem kod w którym dodawane są poszczególne dane do pliku txt (każda dana w osobnej linijce)
zbyszek007 napisał(a):
dana1 = input ("Wpisz dane1: ") dana2 = input ("Wpisz dane2: ") ... file.write(dana1 + "\n") file.write(dana2 + "\n") ```>
"poszczególne dane" a dwie i tylko dwie dane, to ogromna różnica. jako aspirujacy do programisty musisz myśleć nie tylko konkretnie, ale i abstrakcyjnie. "poszczególne" dla każdego w miare biegłego w języku logiczno-matematycznym to elementy ze zbioru, kolekcji, listy, tablicy, a nie dwie i tylko dwie, nie mające ze sobą nic wspólnego dane
Podobnie stwierdzenia "każda", to nie "dwie i tylko dokładnie dwie"
"każda" to od 1 do dowolnej ilosci (powyżej 5 klasy podstawówki od zera do dowolnej)
zbyszek007 napisał(a):
file = open("Dane1.txt") for plik in file: print(plik.count('Apple'))
Tu sam siebie okłamujesz. Elementem file
(angielskie słowo) który możesz wyliczać, nie jest plik
(to samo, ale polskie słowo), ale line
/ linia
itd
Zła nazwa zmiennej najszybciej skopi autora, utrudniając mu myślenie
Gdyby przyjąć zapis, który nie kłamie, a jedynkę jako pozytywny warunek (tożsamy z true), zmieniamy na:
for line in file:
if line.count('Apple'))>0 :
print "Jest"
else:
print "Nie wiem czy jest"
Zostawiam przyjemność pozbycia się głupiego wyniku z else, podpowiem że tzreba zmienną o sensie logicznym.
Wydzielenie do funckji jak proponuje @Riddle jest bardzo dobre, wśród pozytywnych efektów jest jaśniejsze od zmiennej logicznej - choc tam jest niuans
Życze na nowej drodze życia determinacji by to robić dobrze, a nie po łebkach jak do tej pory
Riddle napisał(a):
def file_contains_line(filename: str, substring: str) with open(filename) as file: content = file.read() lines = content.split("\n") return substring in lines if file_contains_line("Dane1.txt", "Apple"): pass
W tym fragmencie zakładasz, ze >linia jest równa "Apple"<, gdzie moje odczytanie zadania brzmi >linia zawiera "Apple"<
ZrobieDobrze napisał(a):
W tym fragmencie zakładasz, ze >linia jest równa "Apple"<, gdzie moje odczytanie zadania brzmi >linia zawiera "Apple"<
Jeśli pytanie dotyczy "linia zawiera "Apple"
" to cały ten "program" to jest sprawdzić "Apple" in file.read()
.
Jak dokładnie brzmi zadanie:
- Sprawdzić czy plik zawiera "Apple"?
- Policzyć ile razy plik zawiera "Apple"?*
- Policzyć ile razy każdy wiersz zawiera "Apple"?
Na dodatek czy "case-sensitive" czy nie?