使用Python编写一个简单的进制转换器

基本代码

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()

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值