Python inFile z pętlą
Próbuję otworzyć plik w Pythonie, aby usunąć średnie z pliku input.txt. Po wykonaniu średnich należy je umieścić na przykład po nazwisku każdej osoby
<student>'s score is <avg> bacons.
Nie rozmawialiśmy jeszcze o tym na zajęciach, więc nie jestem pewien, co robię. Domyślam się, że powinniśmy używać pętli, ale nie jestem do końca pewien, jak bym to zaimplementował.
Oto kod, który zwraca tę średnią jako nieprawidłową składnię:
def main():
inFile = open("input.txt","r")
numVals = int(inFile.readline())
name = inFile.readline()
number = float(int(inFile.readline().split())
avg = float(int(number[0]* .3 + number[1]* .1 + number[2]* .6))
print("name[0 , len(name)]'s Score is",avg,"bacons.")
inFile.close()main()
Plik wejściowy zawiera
5
Amelia
90 100 75
George
87 90 90
Adam
100 80 85
Jenny
75 80 90
Carl
86 87 88
Jakakolwiek pomoc w tej sprawie byłaby bardzo mile widziana. Nie mam pojęcia, co robić.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
2 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Masz cztery C, ale tylko trzy C.
Dlatego Python oczekuje, że wyrażenie będzie kontynuowane w następnym wierszu, ale widzi , które nie może pojawić się w środku wyrażenia, więc generuje .
Kiedy otrzymasz w wierszu, który wygląda zupełnie normalnie, możesz spróbować dwóch dobrych rzeczy.
Najpierw podziel tę linię na mniejsze części, umieść te mniejsze części w interaktywnym tłumaczu i tak dalej.
Po drugie, gdy jesteś pewien, że ta linia jest w porządku, spójrz na linię nad nią i policz nawiasy (zarówno nawiasy, jak i nawiasy). Dobry edytor znacznie to ułatwia - lub po prostu wpisz łańcuch do interaktywnego interpretera; jeśli nie zamknąłeś wszystkich nawiasów klamrowych, otrzymasz zamiast , co oznacza, że czeka na Ciebie zakończ poprzednią linię, nie czekając na całą nową linię.
Po przejściu przez to otrzymasz , ponieważ próbujesz zadzwonić do z trzech wierszy, które otrzymałeś z . To nie działa; musisz zadzwonić do na każdym z nich. Więc zamiast tego:
Zrób to:
numbers = [float(int(number)) for number in inFile.readline().split()]
Jeśli jeszcze nie nauczyłeś się rozumieć listy, będziesz musiał to zrobić za pomocą pętli. Na przykład:
Nawiasem mówiąc, nie bardzo rozumiem, dlaczego robisz . Jeśli chcesz skrócić je wszystkie do wartości całkowitych, nie potrzebujesz tutaj - mnożenie liczb całkowitych przez .3 działa dobrze. Jeśli chcesz przechowywać jakąkolwiek część dziesiętną, nie potrzebujesz . Więc po prostu użyj jednego lub drugiego.
I robisz to samo w następnym wierszu:
Wynik to to jak dla George'a. Następnie konwertujesz to na , co da ci . Następnie konwertujesz go z powrotem na , uzyskując . Nie mogę sobie wyobrazić, że właśnie tego chcesz - prawdopodobnie chcesz nieprzekonwertowanego lub może obciętego jako zamiast jako wprowadzający w błąd .
Poza tym sposób drukowania jest dość dziwny i nie jestem pewien, co to ma zrobić:
print("name[0 , len(name)]'s Score is",avg,"bacons.")
Spowoduje to wydrukowanie czegoś takiego:
name[0 , len(name)]'s Score is 89.0 bacons.
Jeśli chcesz wyświetlić wartość zmiennej, nie cytuj jej:
Ale cokolwiek spróbujesz zrobić z tymi i ... cóż, nie wiem, co próbujesz zrobić, więc nie mogę wyjaśnić, jak Zrób to.
W każdym razie to wydrukuje:
Prawdopodobnie nie potrzebujesz tej spacji po , prawda? Najlepszym sposobem obejścia tego jest użycie formatowania ciągów:
Jeśli jeszcze się tego nie nauczyłeś, szczerze mówiąc, myślę, że najlepiej jest zająć się dodatkową spacją lub może przepisać zdanie tak, aby nie stanowiło problemu:
Lub, oczywiście, naucz się tego sam, zanim twój nauczyciel do tego dojdzie. To nie jest takie trudne.
Wreszcie, przechodząc obok tego, czytasz tylko jedno nazwisko i listę numerów, a nie z nich. Aby to zrobić, potrzebujesz pętli:
Anonimowy użytkownik
Potwierdzenie od: