Как заставить пользователя вводить разные числа каждый раз в заданном диапазоне в Python? - PullRequest
0 голосов
/ 10 января 2019

Мой вопрос связан с книгой Тони Гаддиса "Начинаем с Python" (3-е издание). Это Глава 7. Вопрос 11. Позвольте мне вынести вопрос для справки, , а затем объяснить мой вопрос ниже, что .

Магический квадрат Ло Шу - это сетка с 3 рядами и 3 столбцами. Магический квадрат Ло Шу обладает следующими свойствами: • Сетка содержит цифры от 1 до 9 точно. • сумма каждого строка, каждый столбец и каждая диагональ складываются в одно и то же число.

В программе вы можете симулировать магический квадрат, используя двумерный список. Напишите функцию, которая принимает двумерный список как аргумент и определяет, является ли список магическим квадратом Ло Шу. Проверьте функцию в программе.

МОЙ ВОПРОС: По сути, я прошу пользователя заполнить эту сетку 3х3, используя цифры 1-9. Тем не менее, каждый номер должен отличаться друг от друга. Как я могу заставить пользователя каждый раз вводить другое число в заданном диапазоне (1-9)? Для этого есть специальная функция? После окончания главы «Списки» я не могу сделать это на Python.

Я также предоставляю свой код для этого вопроса, если он поможет. На данный момент пользователь может ввести любой номер, даже двузначный и т. Д. Заранее спасибо.

# lo shu magic square

ROWS=3
COLS=3

def main():    
    # create the two dimensional list
    square = [[0, 0, 0],
              [0, 0, 0],
              [0, 0, 0]]

    for r in range(ROWS):
        for c in range(COLS):
            square[r][c]=int(input("Enter a number 1-9 (can't enter the same number again): "))

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Думаю, вы просто проверите, находится ли он на площади.

for r in range(ROWS):
    for c in range(COLS):
        entered = int(input("Enter a number 1-9 (can't enter the same number again): ")
        existing = True in [entered in row for row in square]
        if not existing:
            square[r][c]=entered

Если это неэффективно, попробуйте иметь введенный список и проверьте его наличие. Я оставлю это хардкорным парням, чтобы определить эффективность этого подхода

0 голосов
/ 10 января 2019

Вы можете создать новый список и добавить каждый пользовательский ввод в этом списке. Затем вы можете проверить, введен ли он уже во ввод. Пример:

inputs = []
while True:
 inp = input("Enter something: ")
 if inp in inputs:
  print("Please, enter something else! You already entered that!")
 else:
  print("Successfully entered!")
  inputs.append(inp)

Пример, который вы можете использовать в вашем случае:

numbers = []
while True:
 inp = int(input("Enter number from 1 to 9: "))
 if 1 <= inp <= 9 and inp not in numbers:
  print("Success!")
  numbers.append(inp)
 else:
  print("Your number is already entered or isn't in range 1-9. Please enter again.")

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

0 голосов
/ 10 января 2019

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

>>> square = [[0, 1, 9], [2, 5, 3], [6, 0, 4]]
>>> new_value = 7
>>> any(value == new_value for row in square for value in row)
False

Используется встроенная функция any.

Или вы можете проверить наличие содержимого, используя in:

>>> 3 in [1, 2, 3]
True

Итак:

>>> any(new_value in row for row in square)
False
0 голосов
/ 10 января 2019

Math - ваш ответ другу:

print 1 <= x <= 9

Если я неправильно понял ваш вопрос, пожалуйста, дайте мне знать!


@ edit : см. Комментарии

square = [[0, 0, 0],
          [0, 0, 0],
          [0, 0, 0]]

entered = [];

for r in range(3):
    for c in range(3):
        v = int(input("Enter a number 1-9 (can't enter the same number again): "))
        if v > 9 or v < 1 or v in entered:
          print("bad number")
        entered.append(v)
        square[r][c]=v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...