#python #python-3.x
#python #python-3.x
Вопрос:
В принципе, у меня есть задание, все идет гладко, но когда я ввожу определенное значение в цикл, оно никогда не останавливается, в отличие от других значений, которые я ввожу, что странно, и я не могу понять, как с этим справиться. Вот код:
dim = int(input())
pos = int(input())
v = int(input())
vi = v
a = int(input())
posa = dim 1
print(pos)
while v != 0 or v*vi>0:
if -dim < pos < dim or pos == dim or pos == -dim:
pos = v
elif pos > dim:
pos = dim
v -= a
v = -v
elif pos < -dim:
pos = -dim
v = a
v = -v
if -dim <= pos <= dim and not posa==pos:
print(pos)
posa = pos
Для некоторого контекста это программа, предназначенная для определения положения бампера автомобиля, dim и -dim — это стены, в которые автомобиль может врезаться, а затем отскочить назад, pos — начальная позиция, v — начальная скорость, а a — на сколько абсолютное значение значенияопускается, когда натыкается на стену. Предполагается, что в конечном итоге он остановится, когда скорость больше не будет.
Проблема в том, что если входные данные равны 10, -3,6,2; это работает отлично, но если его входные данные равны 10, -3,8,3; цикл никогда не заканчивается, и я не могу понять почему.
РЕДАКТИРОВАТЬ: я не могу использовать for , def, import, break, continue, списки и подобные вещи, в основном только самые простые вещи, такие как if и while.
Комментарии:
1. Вы пробовали использовать отладчик? Вы пытались проверить, какое значение имеет каждая переменная в начале цикла? Вы пытались проследить логику вручную?
2. Что в коде гарантирует, что v когда-либо будет равно нулю? Например, если v== 1 и a== 2, вы можете перемещать v взад и вперед между -1 и 1, но никогда не достигая нуля.
Ответ №1:
if -dim < pos < dim or pos == dim or pos == -dim:
pos = v
if -dim <= pos <= dim and not posa==pos:
print(pos)
posa = pos
для этих блоков нет операции v
, его значение никогда не менялось, цикл продолжается вечно.
Комментарии:
1. Смысл в
pos
том, чтобы изменить так, чтобы в конечномif -dim < pos < dim or pos == dim or pos == -dim
итоге произошел сбой, позволяя либоelif pos > dim:
илиelif pos < -dim:
, послеv
чего может измениться.