Python: заменить числовое значение на строку - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь заменить введенное пользователем значение строкой, чтобы сделать вывод более чистым

Я думал, что выражение 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 toNum

main()

Что я пытаюсь получить: если пользователь введет 5 в качестве своего числа и 2 в качестве преобразования.Вывод будет: «5 в двоичном виде: 101»

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Попробуйте

 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»).Затем вы можете использовать эту переменную в своем выводе.

0 голосов
/ 25 декабря 2018

Кроме того, похоже, что ваше базовое преобразование на самом деле не будет делать то, что вы хотите.Вы должны взглянуть на Как преобразовать целое число в любом основании в строку? , чтобы правильно выполнить преобразование (в шестнадцатеричном виде есть буквы AF, например, они не обрабатываются вашим кодом).

Чтобы принять имя вместо числа, вам нужно изменить эту строку кода:

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

Что здесь происходит?input() берет строку из стандартного ввода.В интерактивном случае это означает, что пользователь что-то набирает (возможно, число), а затем нажимает клавишу ввода.Мы получили эту строку.Затем int преобразует эту строку в число.

Ваш convert ожидает, что base будет числом.Вы хотите, чтобы вводы типа "binary" соответствовали base = 2.Один из способов добиться этого - с помощью диктанта.Он может отображать строки в числа:

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 не является ключом в dict.Таким образом, вы хотите обработать это (что, если пользователь вводит "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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...