Search code examples
pythontkinterrandompycharm

My program is returning an error message saying that the module random doesn't have an attribute called randint


from tkinter import *
import random
from collections import Counter


root = Tk()
root.title("Random")
root.geometry("600x400")
root.resizable(False, False)


def open_gn():
    gn_wn = Tk()
    gn_wn.title("Random App - Generate a number")
    gn_wn.geometry("600x400")
    gn_wn.resizable(False, False)

    Label(gn_wn, text='                                                          ').grid(row=0, column=0)
    inst_gn = Label(gn_wn, text='Enter a minimum and maximum value')
    inst_gn.config(font=("Yu Gothic UI", 12))
    inst_gn.grid(row=0, column=1)

    Label(gn_wn, text=" Enter a minimum value: ").place(x=295, y=100)
    entry_min = Entry(gn_wn)
    entry_min.place(x=450, y=100)

    Label(gn_wn, text=" Enter a maximum value: ").place(x=295, y=200)
    entry_max = Entry(gn_wn)
    entry_max.place(x=450, y=200)

    Label(gn_wn, text="Random value is: ").place(x=40, y=40)

    def generate_number():
        min_ = int(entry_min.get())
        max_ = int(entry_max.get())

        random_num = random.randint(min_, max_)
        d_rn = Label(gn_wn, text=random_num)
        d_rn.config(font=("Yu Gothic UI", 14))
        d_rn.place(x=40, y=80)

    Button(gn_wn, text="Generate", padx=220, pady=25, command=generate_number).place(x=25, y=280)

    gn_wn.mainloop()


def open_coin():
    c_wn = Tk()
    c_wn.title("Random App - Flip a Coin")
    c_wn.geometry("600x400")
    c_wn.resizable(False, False)

    Label(c_wn, text="                                                                                ").grid(row=0,
                                                                                                              column=0)
    Label(c_wn, text="Flip the coin below!", font=("Yu Gothic UI", 12)).grid(row=0, column=1)

    Label(c_wn, text='                    ').grid(row=1, column=1)

    coin_label = Label(c_wn, text="")
    coin_label.place(relx=0.5, rely=0.2, anchor='s')

    def flip():
        coin_values = ["Heads", "Tails"]
        coin_face = random.choice(coin_values)
        if coin_face == "Heads":
            coin_label.config(text="Coin: Heads")
        else:
            coin_label.config(text="Coin: Tails")

    coin = Button(c_wn, text='coin', padx=100, pady=90, command=flip)
    coin.place(relx=0.5, rely=0.5, anchor=CENTER)

    c_wn.mainloop()


def open_average():
    avg_wn = Tk()
    avg_wn.title("Random App - Averages")
    avg_wn.geometry("840x300")

    Label(avg_wn, text="              ").grid(row=0, column=0)
    avg_instruct = Label(avg_wn, text="Enter your values below to get the averages in mean, median, and mode(put a "
                                      "space between commas")
    avg_instruct.config(font=("Yu Gothic UI", 10))
    avg_instruct.grid(row=0, column=1)

    Label(avg_wn, text="                                     ").grid(row=1, column=0)
    entry = Entry(avg_wn)
    entry.grid(row=2, column=1)

    def calculate():
        list_data = entry.get().split(', ')
        list_data = [float(i) for i in list_data]
        mean = sum(list_data) / len(list_data)
        Label(avg_wn, text='Mean').grid(row=5, column=0)
        Label(avg_wn, text=str(mean)).grid(row=6, column=0)

        list_data_len = len(list_data)
        list_data.sort()

        if list_data_len % 2 == 0:
            median1 = list_data[list_data_len // 2]
            median2 = list_data[list_data_len // 2 - 1]
            median = (median1 + median2) / 2
        else:
            median = list_data[list_data_len // 2]
        Label(avg_wn, text='Median: ').grid(row=5, column=1)
        Label(avg_wn, text=median).grid(row=6, column=1)
        list_data_for_mode = Counter(list_data)
        get_mode = dict(list_data_for_mode)
        mode = [k for k, v in get_mode.items() if v == max(list(list_data_for_mode.values()))]

        if len(mode) == list_data_len:
            get_mode = ["No mode found"]
        else:
            get_mode = [str(i) for i in mode]

        Label(avg_wn, text="Mode: ").grid(row=5, column=2)
        Label(avg_wn, text=get_mode[0]).grid(row=6, column=2)

    Label(avg_wn, text="                                     ").grid(row=3, column=0)

    Button(avg_wn, text='Enter', command=calculate).grid(row=4, column=1)


Label(root, text="                                                          ").grid(row=0, column=0)

title = Label(root, text="Welcome to Random")
title.config(font=("Yu Gothic UI", 24))
title.grid(row=0, column=1)

button1 = Button(root, text="Generate a random number", padx=80, pady=25, command=open_gn)
button1.place(x=2.25, y=100)

button2 = Button(root, text="Calculate mean, mode, median, and range", padx=20, pady=25, command=open_average)
button2.place(x=325, y=100)

button3 = Button(root, text="Flip a Coin", padx=125, pady=25, command=open_coin)
button3.place(x=2.25, y=200)

button4 = Button(root, text="Create a graph to analyze", padx=66, pady=25)
button4.place(x=325, y=200)

root.mainloop()

I am trying to make an application that can do a bunch of statistics-related stuff and in it, I am trying to make a function that can generate a random number(go to the def open_gn() part. Thats where the error is.) However, when I try to run it, the program returns an error saying:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\redde\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:/Learn_python (2)/random app/main.py", line 37, in generate_number
    random_num = random.randint(min_, max_)
AttributeError: module 'random' has no attribute 'randint'

I tried copying and pasting the code where I use the randint attribute but it also recieved an error. Please help.


Solution

  • Did you happen to name your Python script random.py? This thread suggests that that might be the cause of your issue. If it is, rename the script to something that is not a keyword and try again (for example, random_app.py).