Локальная переменная, определенная в охватывающей области, на которую ссылаются до присвоения - PullRequest
0 голосов
/ 01 августа 2020

Почему я получаю эту ошибку?

import random
import tkinter as tk
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
random.shuffle(items)
answer = ''
a_count = 0
b_count = 0

for i in range(4):
    answer += str(items[i])
 
def isUnique(str):
    n = len(str)
    i = 0
    while i != n:
        if str[i] in str[i + 1:]:
            return False
        i += 1
    return True

win = tk.Tk()
number = tk.StringVar()
count = tk.IntVar()
wintop = tk.Frame(win)
wintop.pack()
win.title('Number Guessing Game (1A2B)')
win.geometry('550x400')
title = tk.Label(wintop, text='Welcome to Number Guessing Game!', font=('Bitter', 18, 'bold'))
title.grid(row=0, column=0, padx=15, pady=10)
winmid = tk.Frame(win, height=280)
winmid.pack()
winbottom = tk.Frame(win)
winbottom.pack()
ques = tk.Label(winbottom, text='Enter the number here:', font=('Bitter', 12)).grid(row=0, column=0, padx=10)
number = tk.Entry(winbottom, width=38).grid(row=0, column=1)

def send():
    while(True):
        if not (number.get()).isdigit():
            l_invalid = tk.Label(winmid, text='Invalid input.\n', font=('Bitter', 12))
            l_invalid.pack()
        elif isUnique(number) == False or len(number) != 4:
            l_invalid = tk.Label(winmid, text='Invalid input.\n', font=('Bitter', 12))
            l_invalid.pack()
        else:
            count += 1
            if number.get() == answer:
                l_exl = tk.Label(winmid, text='Excellent! You guess the correct number!', font=('bitter', 12))
            for i in range(4):
                for j in range(4):
                    if i == j and number.get()[i] == answer[j]:
                        a_count += 1
                    elif number.get()[i] == answer[j]:
                        b_count += 1
            l_ab = tk.Label(winmid, text='Ronud {0}: {1}A{2}B.'.format(count, a_count, b_count))
            a_count = 0
            b_count = 0
            
button = tk.Button(winbottom, text='SEND', font=('Bitter', 10), command=send).grid(row=0, column=2, padx=10)
   
win.mainloop()

Это программа python, которую я хочу использовать tkinter для создания игры по угадыванию чисел.

Правило:

Компьютер случайным образом выдаст игроку число 4-di git, например, если? > компьютер выдает число «4567» (эти 4 цифры не должны иметь одинаковых чисел), и игрок может угадать, какое это число на самом деле. Если игрок> угадает «3576», компьютер выдаст игроку код «1A2B». ". «A» означает, что позиция номера правильная, как и в ответе «3576», «5» имеет правильную позицию, поэтому игрок получил одну «A» (1A); для сравнения, в ответе «3576», «6» и «7» только правильное число, но позиция неверна (в «4567» «6» должно быть на 3-м месте, а «7» должно быть на 4-м.), поэтому игрок получил две четверки (2B).

...