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 += 1for 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. 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. |