#python #python-3.x
#python #python-3.x
Вопрос:
Я изо всех сил пытаюсь правильно добавить список элементов в оператор while ниже. У меня есть заранее определенный список элементов, который включает дни, в которые улитка поднималась каждый день. С помощью приведенного ниже кода я пытаюсь создать цикл while со списком, однако это кажется неправильным. улитка выходит из колодца «»» Улитка падает на дно колодца длиной 125 см. Каждый день улитка поднимается на 30 см. Но ночью, во время сна, скользит на 20 см, потому что стены мокрые. Сколько дней требуется улитке, чтобы выбраться из колодца? Подсказка: улитка выбирается из колодца, когда она превышает 125 см высоты. «»»
«‘ Цикл: условные операторы while: функция if-else: print() «‘
«‘ Назначьте данные запроса переменным с репрезентативными именами: well_height, daily_distance, nightly_distance и snail_position. «‘ advance_cm = [30, 21, 33, 77, 44, 45, 23, 45, 12, 34, 55] «‘ Бонус Расстояние, проходимое улиткой каждый день, теперь определяется списком «.’
well_height = 125
# daily_distance = 30
nightly_distance = 20
snail_position = 0
notEscaped = True
# Create a variable days to keep
# count of the days that pass until the snail escapes the well
days = 0
fullDaylydist = advance_cm[0] - nightly_distance
while snail_position < well_height:
if days == 1:
print(str(days) " day gone")
else:
print(str(days) " days gone")
snail_position = advance_cm[days]
if snail_position < well_height:
snail_position -= nightly_distance # The snail slides down the well here
days = 1
# Print the solution.
else:
print(str(days) " days and I am out from the well!")
# What is its maximum displacement in one day?
print(str(max(advance_cm)) " cm is the maximum distance the snail climbed in one day")
# And its minimum?
# Calculate the displacement using only the travel distance of the days used to get out of the well.
print(str(min(advance_cm)) " cm is the minimum distance the snail climbed in one day")
# What is its average progress? Take into account the snail slides at night.
# average_progress = (sum(days) * range(advance_cm)) - (sum(days) * nightly_distance)
advSum = sum(advance_cm)
advCnt = len(advance_cm)
avgSpd = advSum / advCnt
print(avgSpd) # What is its average speed during the day?
_stdDev = [(x - avgSpd) ** 2 for x in advance_cm]
# What is the standard deviation of its displacement during the day?
print(_stdDev)
Ответ №1:
Вы используете только первое значение из advance_cm
, так как каждый раз, когда вы ссылаетесь на него, вы просто делаете advance_cm[0]
. Вы также не используете nightly_distance
в цикле, что означает, что улитка никогда не сползает обратно в колодец. Цикл должен выглядеть следующим образом:
while snail_position < well_height:
if days == 1: # In yours, it would say "0 day gone", small correction
print(str(days) " day gone")
else:
print(str(days) " days gone")
snail_position = advance_cm[days] # Now it will use a different distance each day
if snail_position < well_height:
snail_postition -= nightly_distance # The snail slides down the well here
days = 1
Комментарии:
1. Большое спасибо, это работает отлично! Последний вопрос, не могли бы вы объяснить мне расчет стандартного отклонения?
2. Я не собираюсь делать всю вашу работу за вас, но здесь есть быстрое и простое объяснение стандартного отклонения: mathsisfun.com/data/standard-deviation.html Пара быстрых советов: вы можете использовать встроенную функцию sum() и понимание списка, чтобы легко обрабатывать стандартное отклонение. Вы можете прочитать о понимании списка здесь: pythonforbeginners.com/basics/list-comprehensions-in-python
3. Спасибо! Я на самом деле придумал это, и это кажется логически правильным, однако стандартное отклонение теперь вычисляется для полной длины [advanced_cm] вместо дней, которые потребовались улитке, чтобы убежать. advSum = sum(advance_cm) advCnt = len(advance_cm) avgSpd = advSum / advCnt print(avgSpd) # Какова его средняя скорость в течение дня? _stdDev = [(x — avgSpd) ** 2 для x в advance_cm] # Каково стандартное отклонение его перемещения в течение дня? print(_stdDev)
4. Вы знаете, сколько дней прошло, поскольку вы получаете это из цикла while. Вы можете использовать это число, чтобы получить фрагмент списка. Вы можете сделать это с
days_travelled = advance_cm[:(days 1)]
помощью . 1 — это потому, что количество дней увеличивается в цикле только тогда, когда улитка не выходит.