Я пытаюсь понять, как использовать цикл for для определения квадранта, в котором находится точка (определяемая кортежем).

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

Например: точки (0, 1), (1,2), (2,3) и (3,4) хранятся в списке, и их квадранты необходимо идентифицировать с помощью цикла for.

Я не уверен, с чего начать. Мой входной код выглядит следующим образом:

locationlist = []
count = 0

while True :
    try : 
        tup = input("Enter X and Y separated by a space, or enter a non-number to stop: ")
        x, y = tup.split()
        x = float(x)
        y = float(y)
        count = count + 1
        locationlist.append(tup)
    except ValueError:
        break
print("Points: ",locationlist)
0
smallvt 14 Июн 2021 в 23:06

4 ответа

Лучший ответ

Для этого не нужно создавать дополнительные переменные, просто вложите свой тест.

for x, y in locationList:
    if y >= 0:
        if x >= 0:  print( x, y, 'Quadrant 1' )
        else:     print( x, y, 'Quadrant 2' )
    else:  ##  y < 0
        if x < 0:  print( x, y, 'Quadrant 3' )
        else:     print( x, y, 'Quadrant 4' )

Изменить: Если требуется ось:

for x, y in locationList:
    if y > 0:
        if x > 0:  print( x, y, 'Quadrant 1' )
        elif x < 0: print( x, y, 'Quadrant 2' )
        else:      print( x, y, 'pos Y-axis' )

    elif y < 0
        if x < 0:  print( x, y, 'Quadrant 3' )
        elif x > 0: print( x, y, 'Quadrant 4' )
        else:      print( x, y, 'neg Y-axis' )

    else:
        if x > 0:  print( x, y, 'pos X-axis' )
        elif x < 0: print( x, y, 'neg X-axis' )
        else:  print( x, y, 'Origin' )
1
Doyousketch2 14 Июн 2021 в 20:46

Я считаю, что это то, о чем вы просите:

for x, y in locationList:
    a = x > 0
    b = y > 0
    c = x == 0 or y == 0
    
    if not c:
        if a and b:
            # 1st quadrant
        elif a:
            # 4th quadrant
        elif b:
            # 2nd quadrant
        else:
            # 3rd quadrant
    else:
        # no quadrant

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

2
Adin Ackerman 14 Июн 2021 в 20:22

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

for x, y in locationList:

    # 2nd or 4th
    if x * y < 0:
        if x < 0:
            # Second quadrant.
        else:
            # Fourth quadrant.

    # 1st or 3rd
    elif x * y > 0:
        if x < 0:
            # Third quadrant.
        else:
            # First quadrant.

    # On an axis: quadrant not well-defined.
    else:
        # No quadrant.

1
Adrian Keister 14 Июн 2021 в 20:34

Мне было непонятно, чего ты действительно хочешь. Я предполагаю, что вам нужен цикл for, чтобы найти, где заданное число, введенное пользователем, находится внутри кортежа, и распечатать его на экране. Я прав?

0
Gustavo M. Mendes de Tarso 14 Июн 2021 в 20:46