Как я могу заставить свой код генерировать похожие, но все же разные результаты без необходимости вводить все это?

#python #python-3.x

#python #python-3.x

Вопрос:

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

Мой код:

 from tkinter import *
from random import randint

root = Tk()
root.title("root")
root.geometry("500x300")

F1 = Frame(root, height=150, width=250, highlightbackground="black", highlightthickness=2)
F1.place(x=0, y=0)

L1 = Label(root, font=("bold", 10))
L1.place(x=125, y=75)
R1 = randint(1, 16)

if R1 == 1:
    L1.config(text="1")

if R1 == 2:
    L1.config(text="2")

if R1 == 3:
    L1.config(text="3")

if R1 == 4:
    L1.config(text="4")

if R1 == 5:
    L1.config(text="5")

if R1 == 6:
    L1.config(text="6")

if R1 == 7:
    L1.config(text="7")

if R1 == 8:
    L1.config(text="8")

if R1 == 9:
    L1.config(text="9")

if R1 == 10:
    L1.config(text="10")

if R1 == 11:
    L1.config(text="12")

if R1 == 13:
    L1.config(text="13")

if R1 == 14:
    L1.config(text="14")

if R1 == 15:
    L1.config(text="15")

if R1 == 16:
    L1.config(text="16")
  

Комментарии:

1. Ошибка отступа — много. Пожалуйста, исправьте.

2. создайте функцию.. или создайте словарь..

Ответ №1:

вы можете преобразовать R1 в str и вместо многих if операторов вы можете сделать это:

 L1.config(text=str(R1))
  

Ответ №2:

Здесь простым решением было бы

 <...>
R1 = randint(1, 16)

if R1 <= 7:
    L1.config(text=str(R1))
  

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

 R1 = randint(1, 16)

r1_texts = {
    1: 'This one is special',
    2: 'This one is special, too',
    3: 'This one is extremely special'
}
for i in range(4, 17):
    r1_texts[i] = 'The random number is {}'.format(i)

L1.config(text=r1_texts[R1])
  

Ответ №3:

Вы пробовали что-то подобное:

 R1 = randint(1,16)
L1.config(text=str(R1))
  

Комментарии:

1. Тот же ответ получен за 6 минут до вашей публикации. Пожалуйста, избегайте повторяющихся ответов.

Ответ №4:

Я не знаю контекста, но вы можете реализовать функцию, подобную этой:

 def text_configuration(L1, R1):
    if R1 in range(1,16):
        L1.config(text=str(R1))
    else:
        raise Exemption
  

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

 def random_text_configuration(L1):
    R1=randint(1,16)
    L1.config(text=str(R1))
  

Комментарии:

1. Зацикливание на значениях от 0 до 15, пока вы не дойдете до значения, которое вы уже знаете, бесполезно. Ваш последний фрагмент кода является копией предыдущего ответа.

2. вы правы, я удалил первый ответ, я открыл редактор до того, как появился другой ответ…