为了账号安全,请及时绑定邮箱和手机立即绑定

Python:用字符串替换数值

Python:用字符串替换数值

湖上湖 2021-09-25 09:33:49
我正在尝试用字符串替换用户输入的值以使输出更清晰我认为 if 语句会有所帮助,但我不确定它如何与我的预期输出相关联 def main() :    number = int(input("Enter your number: "))    base = int(input("Convert to\n" \    "   Binary[2] - Octal[8] - Hexadecimal[16]: "))    if base == 2 :        "binary"     elif base == 8 :        "octal"    else:        "hexadecimal"    print("\n"+str(number) +" in "+ str(base) + " is: " + str(convert(number, 10, base)))  def convert(fromNum, fromBase, toBase) :    toNum = 0    power = 0    while fromNum > 0 :        toNum += fromBase ** power * (fromNum % toBase)        fromNum //= toBase        power += 1    return toNummain()我想要得到的是:如果用户输入 5 作为他们的数字和 2 作为转换。输出将是:“二进制中的 5 是:101”
查看完整描述

6 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

顺便说一句,看起来您的基本转换实际上不会做您想要的。您应该查看如何将任何基数中的整数转换为字符串?正确地进行转换(例如,十六进制中有字母 AF,这些不是由您的代码处理的)。


要接受名称而不是数字,您需要更改这行代码:


base = int(input("Convert to\n   Binary[2] - Octal[8] - Hexadecimal[16]: "))

这里发生了什么事?input()从标准输入中取出一行。在交互式情况下,这意味着用户输入一些东西(希望是一个数字)然后按回车键。我们得到那个字符串。然后int将该字符串转换为数字。


你的convert期望base是一个数字。你想输入等"binary"以对应base = 2。实现这一目标的一种方法是使用 dict。它可以将字符串映射到数字:


base_name_to_base = {'binary': 2, 'octal': 8, 'hexadecimal': 16}

base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]

请注意,如果不是字典中的键,则base_name_to_base[x]可能会失败(raise KeyError)x。所以你想处理这个(如果用户输入"blah"怎么办?):


while True:

    try:

        base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]

        break

    except KeyError:

        pass

这将循环直到我们遇到中断(这仅在索引base_name_to_base不会引发键错误时发生。


此外,您可能希望处理不同的情况(例如"BINARY")或任意空格(例如"  binary  ")。您可以通过调用.lower()和.strip()返回的字符串来做到这一点input()。


查看完整回答
反对 回复 2021-09-25
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

尝试


 def main() :

    number = int(input("Enter your number: "))

    base = int(input("Convert to\n" \

    "   Binary[2] - Octal[8] - Hexadecimal[16]: "))

    base_string = "None"        


    if base == 2 :

        base_string = "binary"

     elif base == 8 :

        base_string = "octal"

    else:

        base_string = "hexadecimal"


    print("\n {} in {} is: {}".format(str(number), base_string, str(convert(number, 10, base))))



  def convert(fromNum, fromBase, toBase) :

    toNum = 0

    power = 0


    while fromNum > 0 :

        toNum += fromBase ** power * (fromNum % toBase)

        fromNum //= toBase

        power += 1

    return toNum


main()

您的问题是 if 语句中的“二进制”部分。它对您的代码和输出几乎没有影响。您必须将文字表示(“二进制”,...)存储在某个变量(“base_string”)中。然后你可以在你的输出中使用这个变量。


查看完整回答
反对 回复 2021-09-25
  • 6 回答
  • 0 关注
  • 370 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信