Chciałbym móc pobrać wyniki testów wprowadzone przez użytkownika i zapisać do zewnętrznego pliku tekstowego. Następnie poproś aplikację o odczytanie wartości z i obliczenie średniej. Jednak nie jestem pewien, jak zaimplementować składnię Pythona w pętli i funkcjach. Próbowałem wykorzystać moje zasoby, aby lepiej zrozumieć, jak to zrobić, ale mam pewne problemy ze zrozumieniem, jak Python obsługuje pliki zewnętrzne. Ponadto, czy użycie dołączania byłoby lepsze niż pisanie w tym scenariuszu? Bieżąca składnia:

 def testAvgCalculation():
        #Variables
        total = 0
        total_quiz = 0
        while True:
        #User Input and Variable to stop loop
            inpt = input("Enter score: ")
            if inpt.lower()== 'stop':
                break
        #Data Validation
            try:
                if int(inpt) in range(1,101):
                     total += int(inpt)
                     total_quiz += 1
                else:
                    print("Score too small or Big")
            except ValueError:
                print("Not a Number")
        return total, total_quiz


    def displayAverage(total, total_quiz):
        average = total / total_quiz

        print('The Average score is: ', format(average, '.2f'))
        print('You have entered', total_quiz, 'scores')
    #Main Function
    def main():
        total, total_quiz = testAvgCalculation()
        displayAverage(total, total_quiz)
    #Run Main Function
    main()
0
Flamonga 20 listopad 2019, 22:11
To jest dość szerokie. Czego próbowałeś? W której części szczególnie utknęłaś? Czy możesz pokazać kod, który masz do tej pory?
 – 
Error - Syntactical Remorse
20 listopad 2019, 22:12

1 odpowiedź

To jest cholerne, ale próbowałem pracować z tym, co już tam było. Podzieliłem sekcję walidacji danych oryginalnej funkcji na osobną funkcję. W main() zwraca swoją wartość counter, która śledzi liczbę wprowadzonych wartości, do calculate_average(), który następnie czyta plik wiersz po wierszu, aż counter stanie się 0, co oznacza, że ma zamiar odczytać słowo „stop” (które umożliwia rozpoznanie EOF za pomocą „i” w instrukcji if), wykonuje obliczenia i zwraca jego wartości.

def write_file():
    #Variables
    counter = 0

    file = open("Scores.txt", "w")

    while True:
    #User Input and Variable to stop loop
        inpt = input("Enter score: ")
        file.write(inpt + "\n")

        if inpt.lower()== 'stop':
            file.close()
            break
        counter += 1
    return counter

def calculate_average(counter):
    total = 0
    total_quiz = counter
    scores = open("Scores.txt", "r")
    s = ""
    try:
        while counter > 0 and s != 'stop':
            s = int(scores.readline())
            if int(s) in range(1,101):
                 total += int(s)
                 counter -= 1
            else:
                print("Invalid data in file.")
    except ValueError:
        print("Invalid data found")
    return total, total_quiz

def displayAverage(total, total_quiz):
    average = total / total_quiz

    print('The Average score is: ', format(average, '.2f'))
    print('You have entered', total_quiz, 'scores')
#Main Function
def main():
    total, total_quiz = calculate_average(write_file())
    displayAverage(total, total_quiz)
#Run Main Function
main()

UWAGA: plik jest tworzony początkowo w trybie zapisu, który nadpisuje plik za każdym razem, więc nigdy nie potrzebujesz nowego. jeśli chcesz zachować rekord, możesz zmienić go na dopisywanie, chociaż będziesz musiał poradzić sobie z wyodrębnianiem odpowiednich wierszy ze starych danych wejściowych.

Niezbyt ładne, ale powinno dać ci wyobrażenie, jak osiągnąć to, do czego dążyłeś.

0
mu_Lah 21 listopad 2019, 00:16