Как использовать цикл while, если пользовательский ввод находится за пределами диапазона? - PullRequest
1 голос
/ 10 октября 2019

Это домашнее задание, с которым у меня проблемы. Вот проблема:

Реализация функции dartGame (), которая запрашивает у пользователя ввести координаты x и y (каждая в диапазоне от -10 до 10) дротика и вычисляет, попал ли дротик в дартс,круг с центром (0,0) и радиусом 8. Если это так, строка «Это в! :-) 'печатается, иначе' Не в.: печатается .-( '. Обратите внимание, что уравнение для круга: x2 + y2 = r2; чтобы убедиться, что дротик попадет на доску, формула будет x2+ y2 <= 82 </p>

>>> dartGame()
Enter x: 4
Enter y: 2.5
It is in! :-)
>>> dartGame()
Enter x: 9.9
Enter y: -9.9
It isn't in. :-(
>>>

Вот код, который я пытался сделать. Я пытаюсь спросить у пользователя ввод x. Если x < -10 or x > 10, я хочу, чтобы функцияпродолжайте запрашивать ввод до тех пор, пока параметры не будут выполнены. Как только координата x установлена, я хочу сделать то же самое с y. У меня возникает проблема, когда мой первый цикл while повторяется бесконечно, если я угадываю число вне диапазона один раз. Например, если я предполагаю, что -13 это повторяется, но если я предполагаю, что 4,5 это все еще повторяется.

def dartGame():
    x = float(input("Enter  x: ", ))
    while x < -10 or x > 10:
            float(input("Out of range. Please select a number between -10 and 10: ", ))        
    y = float(input("Enter y: ", ))
    while y < -10 or y > 10:
            float(input("Out of range. Please select a number between -10 and 10: ", ))
    dartboard = x**2 + y**2
    if dartboard <= 8**2:
        print("It is in!")
    else:
        print("It isn't in. :-(")

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Вам следует присвоить значение x и y внутри цикла while

def dartGame():
    x = float(input("Enter  x: ", ))
    while x < -10 or x > 10:
            x = float(input("Out of range. Please select a number between -10 and 10: ", ))        
    y = float(input("Enter y: ", ))
    while y < -10 or y > 10:
            y = float(input("Out of range. Please select a number between -10 and 10: ", ))
    dartboard = x**2 + y**2
    if dartboard <= 8**2:
        print("It is in!")
    else:
        print("It isn't in. :-(")
0 голосов
/ 10 октября 2019

В вашей проверке проверки во время циклов вы не назначаете свои новые входы для x и y соответственно. Итак, вы хотите:

while x < -10 or x > 10:
    x = float(input('''stuff'''))

И то же самое с y. Другими словами, вы постоянно просто зацикливаете вход без обновления условий выхода. Вот почему это работает в первый раз, но не после.

...