[英]How to convert a sum into binary
我的任務是創建一個 GUI 程序,允許我輸入我的名字和姓氏。 該程序應該將每個字母轉換為字母表中對應的數字位置,將每個字母相加,然后將總和轉換為二進制。 我在啟動算法時遇到問題,將不勝感激。 我創建了 GUI,我的代碼如下。
import tkinter as tk
numbers = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5,'f':6,'g':7,'h':8, 'i':9, 'j':10,\
'k':11,'l':12, 'm':13, 'n':14, 'o':15, 'p':16, 'q':17, 'r':18, 's':19,\
't':20, 'u':21, 'v':22,'w':23, 'x':24, 'y':25, 'z':26,}
class NameGUI:
def __init__(self):
self.main_window = tk.Tk()
self.top_frame = tk.Frame(self.main_window)
self.middle_frame = tk.Frame(self.main_window)
self.name1_frame = tk.Frame(self.main_window)
self.name2_frame = tk.Frame(self.main_window)
self.bottom_frame = tk.Frame(self.main_window)
self.fname_label = tk.Label(self.top_frame, text = 'Enter your first name: ')
self.fname_entry = tk.Entry(self.top_frame, width = 10)
self.lname_label = tk.Label(self.middle_frame, text = 'Enter your last name: ')
self.lname_entry = tk.Entry(self.middle_frame, width = 10)
self.fname_label.pack(side = 'left')
self.fname_entry.pack(side = 'left')
self.lname_label.pack(side = 'left')
self.lname_entry.pack(side = 'left')
self.value = tk.StringVar()
self.dis1_label = tk.Label(self.name1_frame, text = 'First Name and Distance: ')
self.name1_label = tk.Label(self.name1_frame, textvariable = self.value)
self.dis2_label = tk.Label(self.name2_frame, text = 'Last Name and Distance: ')
self.name2_label = tk.Label(self.name2_frame, textvariable = self.value)
self.dis1_label.pack(side = 'left')
self.name1_label.pack(side = 'left')
self.dis2_label.pack(side = 'left')
self.name2_label.pack(side = 'left')
self.ok_button = tk.Button(self.bottom_frame, text = 'OK')
self.quit_button = tk.Button(self.bottom_frame, text = 'QUIT', command = self.main_window.destroy)
self.ok_button.pack(side = 'left')
self.quit_button.pack(side = 'left')
self.top_frame.pack()
self.middle_frame.pack()
self.name1_frame.pack()
self.name2_frame.pack()
self.bottom_frame.pack()
tk.mainloop()
name = NameGUI()
1/“程序應該將每個字母轉換為字母表中對應的數字位置,將每個字母相加”您可以使用python中字符串的列表屬性來執行該操作。
ListAlphaBet = 'abcdefghijklmnopqrstuvwxyz'
Entry = 'example'
number=0
for i in Entry:
number += ListAlphaBet.index(i)
print(number)
2/ "然后將總和轉換為二進制" 您可以使用標准類型轉換 bin() 在 python 中將任何數字轉換為二進制
>>> a=5
>>> b=bin(a)
>>> b
'0b101'
所以在第一個前面的代碼中,只需添加最后一行:
print(bin(number))
- - - - - - - - -
要回答您的要求:
import tkinter as tk
def computeEntry():
inp = entry.get()
if inp == ' ':
return 0
ListAlphaBet = 'abcdefghijklmnopqrstuvwxyz'
number=0
for i in inp:
number += ListAlphaBet.index(i)
print(inp,number)
return number
window = tk.Tk() # create the window
# next create the var containing the number computed to print it afterward
var=tk.IntVar()
# next create the entry area
entry = tk.Entry(window)
entry.pack()
# the button command will call the set method on the var as a lambda expression,
# with the var value (var.get) that will take the value computed in the function 'computeEntry'
tk.Button(window, text="Compute", command=lambda:var.set(computeEntry())).pack()
# the label's textvariable is set to the value of 'var'
tk.Label(window, textvariable=var).pack()
tk.mainloop() # main loop of the window
現在,您已經擁有通過完整注釋來回答您的問題的所有元素,如果您真的願意,只需將此代碼放入面向對象的代碼中即可。
你確實有兩個問題:
索爾回答了第一個問題。 以下是對第二個的一些見解:
class NameGUI:
def __init__(self):
# Some code
self.ok_button = tk.Button(self.bottom_frame, text = 'OK', command = self.command_ok)
# Some more code
def command_ok(self):
first_name = self.fname_entry.get()
last_name = self.lname_entry.get()
# Do whatever you want
self.value.set(first_name + "-" + last_name)
我沒有給出廣泛的解決方案,我讓您嘗試我的代碼塊並將其與 sol 的答案結合起來。 特別是,您可能希望在command_ok
內的某處調用他的函數computeEntry
一次或兩次。 此外,您可能需要為self.name1_label
和self.name2_label
設置不同的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.