簡體   English   中英

如何將總和轉換為二進制

[英]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

現在,您已經擁有通過完整注釋來回答您的問題的所有元素,如果您真的願意,只需將此代碼放入面向對象的代碼中即可。

你確實有兩個問題:

  • 計算字母的二進制和
  • 將其集成到您的 GUI 中

索爾回答了第一個問題。 以下是對第二個的一些見解:

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_labelself.name2_label設置不同的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM