Python калькулятор процента посещаемости с использованием цикла do while - PullRequest
1 голос
/ 08 мая 2020

Цель состоит в том, чтобы создать калькулятор процентной посещаемости на основе заданного списка имен. Я смог oop ввести вопросы с именами в списке. Однако мои проблемы l ie со следующим условием if, которое должно выводить 1 для каждого входного вопроса, если ответ y для каждого человека в списке, или 0, если ответ n для любого человека в списке. Затем следует сложить числовые выходы, чтобы получить процентное соотношение. Пожалуйста, помогите.

continueLooping=True

students=["Annie", "Brian", "Clare", "Danny", "Ellen"]

i=0

while i<len(students):
    askuser=input(f"Is {students[i]} present?[y/n]")
    i=i+1

    if askuser == "y":
        one = 1
        print("1")

    else:
        one = -1
        print("-1")

        while one<len(students):
            if askuser == "y":
               one = 1
                one=one+1
            else:
                one = -1
                one=one+1

percentage=(one)/len(students)
print(percentage)

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Ваше второе внутреннее while l oop завершится, только если первый ответ - «y».

То, что вы должны стремиться сделать, - это подсчитать количество ответов «y», которые вы получите во внешнем а l oop. Таким образом:

students=["Annie", "Brian", "Clare", "Danny", "Ellen"]

i=0
studentsPresentCount = 0

while i<len(students):
    askuser=input(f"Is {students[i]} present?[y/n]")
    i=i+1

    if askuser == "y":
        studentsPresentCount += 1




percentage = studentsPresentCount/len(students)
print(percentage)

Обратите внимание, что вы можете использовать синтаксис c sugar 'i + = 1' вместо 'i = i + 1'.

0 голосов
/ 08 мая 2020

В попытке максимально приблизиться к вашему коду, приведенный ниже код работает для того, что вы описываете.

В коде есть три основных исправления:

  1. У вас есть внутреннее while l oop, в котором нет необходимости. На каждом проходе внешнего вида l oop вы можете спросить о каждом ученике, вывести желаемую посещаемость и скорректировать оценку посещаемости. Нет необходимости во втором l oop внутри.

  2. Вы продолжаете изменять значение «единицы», а не увеличиваете или уменьшаете его. Вы можете установить единицу равной 0 за пределами l oop (как вы делаете со своим счетчиком i) и настроить его внутри l oop.

  3. Вероятно, вы не хотите, чтобы непосещаемость равнялась -1, а, наоборот, ставили его равным нулю. Представьте себе сценарий с 3 участниками и 2 не участниками. Ваша оценка будет равна 1 + 1 + 1-1-1, при оценке посещаемости 1 - тогда как на самом деле оценка посещаемости равна 3.

Также нет необходимости в Переменная "continueLooping" в начале.

Последний пункт, если вы хотите процент, вы можете умножить процентное значение на 100 (оно возвращает десятичное значение).

Рабочий код с этими исправлениями:

students=["Annie", "Brian", "Clare", "Danny", "Ellen"]

i=0
one = 0

while i<len(students):
    askuser=input(f"Is {students[i]} present?[y/n]")
    i=i+1

    if askuser == "y":
        one += 1
        print("1")

    else:
        print("0")



percentage=(one)/len(students)
print(percentage)
...