Python Forum
Help with define a def function - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Help with define a def function (/thread-29803.html)



Help with define a def function - Omer_ - Sep-20-2020

Hi,
I have this code:
ordinal = ['2nd','3rd','4th','5th','6th','7th','8th','9th','10th','11th','12th']

ratio = [1.222223, 1.25, 1.33,4.3,1.23,2.323]

i = 0

freq=int(input("Enter a fundamental frequency: "))
print(f"the fundumental frequency is: {freq}")

while i < len(ratio):

    nfreq=freq*(ratio[i])
    print(f"{ordinal[i]} note is: " + str(round(nfreq,3)))
    i += 1
for hours now I try to convert the above code to a def function so I can use it with gui interface(or call it when ever I need it)
I just can't get it.
can someone help me with convert the above? I cant figure what I'm missing.

Thanks


RE: Help with define a def function - ndc85430 - Sep-20-2020

What have you tried? Also the term is just "function"; def is just the keyword used to, well, define a function.


RE: Help with define a def function - deanhystad - Sep-20-2020

My first impulse is this:
def weird_function():
    ordinal = ['2nd','3rd','4th','5th','6th','7th','8th','9th','10th','11th','12th']
    ratio = [1.222223, 1.25, 1.33,4.3,1.23,2.323]

    freq=int(input("Enter a fundamental frequency: "))
    print(f"the fundumental frequency is: {freq}")
     
    for r, ord in zip(ratio, ordinal):
        print(f"{ord} note is: " + str(round(freq*r,3)))

weird_function()
But as the name implies, I think this is a weird function. It is unusual for a function to contain "input" and "print" commands. Maybe this makes perfect sense in this case, but you mentioned using this in a gui interface and "input" and "print" don't work for those. I would be inclined to write this as a function that takes a frequency and returns a list of notes.
def weird_function(note):
    ratios = [1.0, 1.222223, 1.25, 1.33,4.3,1.23,2.323]
    return [note * ratio for ratio in ratios]

freq = int(input("Enter a fundamental frequency: "))
print(*weird_function(freq))



RE: Help with define a def function - Omer_ - Sep-20-2020

import tkinter as tk


HEIGHT = 500
WIDTH = 600


def multiple(fund):
    ratio = [1.222223, 1.25, 1.33, 4.3, 1.23, 2.323]
    i = 0
    for i in range (len(ratio)):
        nfreq = fund * (ratio[i])
        print(f"{i} note is: " + str(round(nfreq, 3)))
        i += 1

scale= multiple(int(input("Enter a fund: ")))
print(scale)

root = tk.Tk()

canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()

frame = tk.Frame(root, bg='#80c1ff', bd=5)
frame.place(relx=0.5, rely=0.3, relwidth=0.5, relheight=0.1, anchor='n')

entry = tk.Entry(frame, font=40)
entry.place(relwidth=0.65, relheight=1)


button = tk.Button(frame, text="Get scale", font=40, command=lambda:multiple(entry.get()))
button.place(relx=0.7, relheight=1, relwidth=0.3)

root.mainloop()
this is one try,

(Sep-20-2020, 06:48 PM)deanhystad Wrote: But as the name implies, I think this is a weird function. It is unusual for a function to contain "input" and "print" commands. Maybe this makes perfect sense in this case, but you mentioned using this in a gui interface and "input" and "print" don't work for those. I would be inclined to write this as a function that takes a frequency and returns a list of notes.
def weird_function(note):
    ratios = [1.0, 1.222223, 1.25, 1.33,4.3,1.23,2.323]
    return [note * ratio for ratio in ratios]

freq = int(input("Enter a fundamental frequency: "))
print(*weird_function(freq))

Thanks for this. So I try to continue this method like that:
import tkinter as tk


HEIGHT = 500
WIDTH = 600


def weird_function(note):
    ratios = [1.0, 1.222223, 1.25, 1.33, 4.3, 1.23, 2.323]
    return [note * ratio for ratio in ratios]


freq = int(input("Enter a fundamental frequency: "))
print(*weird_function(freq))

root = tk.Tk()

canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()


#background_image = tk.PhotoImage(file='')
#background_label = tk.Label(root,image=background_image)
#background_label.place(relwidth=1,relheight=1)

frame = tk.Frame(root, bg='#80c1ff', bd=5)
frame.place(relx=0.5, rely=0.3, relwidth=0.5, relheight=0.1, anchor='n')

entry = tk.Entry(frame, font=40)
entry.place(relwidth=0.65, relheight=1)

button = tk.Button(frame, text="Get scale", font=40, command=lambda:weird_function(entry.get()))
button.place(relx=0.7, relheight=1, relwidth=0.3)


root.mainloop()
how can I run this program successfully so first thing that come up is the canvas and when I enter the frequency at the entry it will return the function weird_function.