Posts: 6
Threads: 5
Joined: Jul 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
Posts: 1,838
Threads: 2
Joined: Apr 2017
What have you tried? Also the term is just "function"; def is just the keyword used to, well, define a function.
Posts: 6,798
Threads: 20
Joined: Feb 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))
Posts: 6
Threads: 5
Joined: Jul 2020
Sep-20-2020, 06:59 PM
(This post was last modified: Sep-20-2020, 07:12 PM by Omer_.)
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.
|