2014-12-15 3 views
0

Это код программы, в которой я пытаюсь получить случайные координаты для рисования случайной формы, теперь случайный цвет работает, но когда я запускаю программу, я получаю эту ошибку :Как генерировать случайные пуринаты для случайных фигур в python

(Traceback (most recent call last): 
    File "/home/04danielbrew/Desktop/Python/Random Coloured Square.py", line 9, in <module> 
    randomh=random.randint(1,1080) 
AttributeError: 'builtin_function_or_method' object has no attribute 'randint) 

И спасибо заранее, и мне не нужен самый продвинутый код, поскольку я занимаюсь только наукой о GCSE.

from tkinter import* 
from random import* 
####Set veriables 
colors=["mintcream","orangered","gold","coral","red", "orange", "yellow", "green", "blue","violet","midnightblue"] 
canvas_height=1080 
canvas_width=1920 
canvas_colour='black' 
line_width=1 
randomh=random.randint(1,1080) 
randomw=random.randint(1,1920) 
randomh2=random.randint(1,1080) 
randomw2=random.randint(1,1920) 
####Define function 
def square(self): 
    canvas.create_line(randomh,randomw,randomh2,randomw2, width=line_width,   fill=random.choice(colors)) 
    canvas.create_line(300,100,400,100, width=line_width, fill=random.choice(colors)) 
    canvas.create_line(400,100,400,200, width=line_width, fill=random.choice(colors)) 
    canvas.create_line(400,200,300,200, width=line_width, fill=random.choice(colors)) 
###Main program 
window=Tk() 
window.title("Daniel Random Amazballs lines") 
canvas=Canvas(bg=canvas_colour,height=canvas_height,width=canvas_width, highlightthickness=0) 
canvas.pack() 
###Click in window to start 
window.bind("<Button-1>",square) 
window.mainloop() 
+1

Это поможет вам >>> http://stackoverflow.com/questions/14985798/python-random-function –

+1

by 'from random import *' вы вводите функцию «random» и функцию «randint» в Пространство имен. Ваш 'random' не относится к модулю, а к функции random(). – Jasper

ответ

3

В качестве лучшей практики, а также для вещего кода, делать не from <module> import *.

В этом случае вместо этого вы можете использовать from random import randint, choice.

Тогда ваши звонки будут выглядеть примерно так: randomh = randint(1,1080) и choice(colors)

Дело в том, что from <module> import * почти всегда неправильный путь - это загрязняет пространство имен верхнего уровня с всех от <module>.

Explicit is better than implicit

Это не о расширенном коде, это про научиться писать код, который четко выражает свое намерение.

+0

все еще не работает ошибка, я получаю is is Exception в обратном вызове Tkinter Traceback (последний последний звонок): Файл «/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/tkinter/__init__. py ", строка 1487, в __call__ return self.func (* args) Файл«/home/04danielbrew/Desktop/Python/Random Colored Square 0.2.py », строка 16, в квадрате canvas.create_line (randomh, randomw , randomh2, randomw2, width = line_width, fill = random.выбор (цвета)) NameError: имя «случайный» не определен »и черный экран, на котором отображаются строки, поэтому я просто не получаю строки –

+0

@ DanielBrew - см. обновленный ответ – gomad

+0

он все еще не работает, получая такую ​​же ошибку и спасибо за всю помощь, которую вы получили много. –

1

Поскольку вы импортируете все из случайного, вам не нужно называть random.randint(), вам просто нужно вызвать randint() прямо.

так:

randomh = randint(1,1080) 
randomw = randint(1,1920) 
randomh2 = randint(1,1080) 
randomw2 = randint(1,1920) 

Как сказал GOMAD, это не очень хорошая практика импорта все из модуля, особенно если вы используете только один метод.

Кроме того, случайный предполагается использовать только с импортом. Чувствуете разницу в:

import random 
random.choice([1,2,3,4]) 

и

from random import choice 
choice([1,2,3,4]) 

Первый ясно, что он делает, он выбирает один из элементов в массиве. Хотя второе неясно, он выбрал массив как что-то? Представляет ли он выбор пользователю?

Смежные вопросы