基本代码
def convert_to_decimal(number,base):
decimal_number= int(str(number),base)
return decimal_number
def convert_from_decimal(decimal_number,target_base):
convert_number=''
while decimal_number>0:
remainder=decimal_number%target_base
convert_number=str(remainder)+convert_number
decimal_number//=target_base
return convert_number
def main():
print("欢迎使用进制转换器!")
while True:
try:
number=input("请输入转换的数字:")
base=int(input("请输入数字的当前进制(2,8,10,16):"))
decimal_number=convert_to_decimal(number,base)
print(f"{number}的十进制表示为:{decimal_number}")
target_base=int(input("请输入目标进制(2,8,10,16):"))
converted_number=convert_from_decimal(decimal_number,target_base)
print(f"{decimal_number}的{target_base}进制表示为:{converted_number}")
except ValueError:
print("无效输入,请更改!")
choice=input("是否继续转换(y/n):")
if choice.lower()!='y':
break
if __name__=="__main__":
main()
核心
-
convert_to_decimal
函数接受两个参数,一个是要转换的数字number
,另一个是该数字的当前进制base
。它使用内置的int
函数将给定进制的数字转换为十进制,并返回结果。 -
convert_from_decimal
函数接受两个参数,一个是已转换为十进制的数字decimal_number
,另一个是目标进制target_base
。它使用循环和取余运算将十进制数字转换为目标进制,并返回结果。 -
main
函数是主要的程序入口。它使用一个循环来持续接受用户输入,并调用上述两个函数来进行进制转换。
代码片段
converted_number = ""
while decimal_number > 0:
remainder = decimal_number % target_base
converted_number = str(remainder) + converted_number
decimal_number //= target_base
return converted_number
-
converted_number = ""
: 初始化一个空字符串,用于存储最终转换后的结果。 -
while decimal_number > 0:
: 这是一个循环,只要decimal_number
大于零,就会一直执行循环体内的操作。 -
remainder = decimal_number % target_base
: 计算decimal_number
除以target_base
的余数,这是当前进制下的一位数字。 -
converted_number = str(remainder) + converted_number
: 将余数转换为字符串,然后将其添加到converted_number
的前面。这是因为余数是从低位到高位计算的,所以在结果中应该是从前往后排列。 -
decimal_number //= target_base
: 将decimal_number
除以target_base
的结果赋值给decimal_number
,这是为了进行下一轮的循环,处理下一位数字。
循环会一直执行,直到 decimal_number
不再大于零,也就是直到所有的位都被转换完毕。最终,函数返回的 converted_number
就是给定十进制数字在目标进制下的表示形式。
改进
将控制台应用程序转换为图形用户界面(GUI)应用程序,使用Python中的tkinter库。
import tkinter as tk
from tkinter import messagebox
import tkinter.ttk as ttk
def convert_to_decimal(number, base):
try:
return int(str(number), base)
except ValueError:
messagebox.showerror("错误", "无效的输入或进制!")
return None
def convert_from_decimal(decimal_number, target_base):
if decimal_number is None:
return ''
convert_number = ''
while decimal_number > 0:
remainder = decimal_number % target_base
convert_number = str(remainder) + convert_number
decimal_number //= target_base
return convert_number
def convert():
number = entry_number.get()
base = combo_base.get()
target_base = combo_target_base.get()
try:
base = int(base)
target_base = int(target_base)
decimal_number = convert_to_decimal(number, base)
converted_number = convert_from_decimal(decimal_number, target_base)
label_result.config(text=f"{number}的{target_base}进制表示为:{converted_number}")
except ValueError:
messagebox.showerror("错误", "请输入有效的进制!")
# 创建主窗口
root = tk.Tk()
root.title("进制转换器")
# 创建输入框,下拉菜单和标签
tk.Label(root, text="请输入转换的数字:").grid(row=0, column=0)
entry_number = tk.Entry(root)
entry_number.grid(row=0, column=1)
tk.Label(root, text="请输入数字的当前进制(2,8,10,16):").grid(row=1, column=0)
combo_base = tk.ttk.Combobox(root, values=[2, 8, 10, 16])
combo_base.grid(row=1, column=1)
tk.Label(root, text="请输入目标进制(2,8,10,16):").grid(row=2, column=0)
combo_target_base = tk.ttk.Combobox(root, values=[2, 8, 10, 16])
combo_target_base.grid(row=2, column=1)
button_convert = tk.Button(root, text="转换", command=convert)
button_convert.grid(row=3, column=1)
label_result = tk.Label(root, text="")
label_result.grid(row=4, column=1)
# 运行主循环
root.mainloop()
图形化界面
持续完善
1. 输入验证:确保用户输入的数字和进制是有效的。
2. 用户体验:提供默认值,清晰的错误信息,以及一个用户友好的界面。
3. 代码组织:将逻辑分离到函数中,使得代码更加模块化和易于维护。
import tkinter as tk
from tkinter import messagebox
import tkinter.ttk as ttk
def convert_to_decimal(number, base):
try:
return int(str(number), base)
except ValueError:
messagebox.showerror("错误", "无效的输入或进制!")
return None
def convert_from_decimal(decimal_number, target_base):
if decimal_number is None:
return ''
convert_number = ''
while decimal_number > 0:
remainder = decimal_number % target_base
convert_number = str(remainder) + convert_number
decimal_number //= target_base
return convert_number or '0'
def convert():
number = entry_number.get()
base = combo_base.get()
target_base = combo_target_base.get()
if not number or not base or not target_base:
messagebox.showerror("错误", "所有字段都需要填写!")
return
try:
base = int(base)
target_base = int(target_base)
if base not in [2, 8, 10, 16] or target_base not in [2, 8, 10, 16]:
messagebox.showerror("错误", "请输入有效的进制(2,8,10,16)!")
return
decimal_number = convert_to_decimal(number, base)
converted_number = convert_from_decimal(decimal_number, target_base)
label_result.config(text=f"{number}的{target_base}进制表示为:{converted_number}")
except ValueError:
messagebox.showerror("错误", "请输入有效的数字和进制!")
# 创建主窗口
root = tk.Tk()
root.title("进制转换器")
# 创建输入框,下拉菜单和标签
tk.Label(root, text="请输入转换的数字:").grid(row=0, column=0)
entry_number = tk.Entry(root)
entry_number.grid(row=0, column=1)
tk.Label(root, text="请输入数字的当前进制(2,8,10,16):").grid(row=1, column=0)
combo_base = ttk.Combobox(root, values=[2, 8, 10, 16])
combo_base.grid(row=1, column=1)
combo_base.set(10) # 设置默认值
tk.Label(root, text="请输入目标进制(2,8,10,16):").grid(row=2, column=0)
combo_target_base = ttk.Combobox(root, values=[2, 8, 10, 16])
combo_target_base.grid(row=2, column=1)
combo_target_base.set(2) # 设置默认值
button_convert = tk.Button(root, text="转换", command=convert)
button_convert.grid(row=3, column=1)
label_result = tk.Label(root, text="")
label_result.grid(row=4, column=1)
# 运行主循环
root.mainloop()