Не меняет переменную - PullRequest
0 голосов
/ 26 мая 2020

Я изучаю python и пытаюсь сделать другой калькулятор. Когда я пытаюсь запустить его, первые несколько команд работают, но когда я перехожу к строке 6, он говорит: TypeError: can only concatenate str (not "int") to str Код здесь:

if user_input==' squares':
    first_number=input(str(inp_words))
    second_number=input(str(sec_inp_words))
    f_num=str(first_number)
    s_num=str(second_number)
    answer=int(first_number)**int(second_number)
    print('the answer to '+str(f_num)+'to the power of'+str(s_num)+'is'+answer)
    print(str(words))
    sys.exit()

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вот способ использования форматированной строки:

print(f'the answer to {f_num} to the power of {s_num} is {answer}.')

Когда вы добавляете f или F перед вашей строкой, строка называется форматированной строкой, например, когда вы добавляете .format ( ) до конца строки.

С форматированными строками вам не нужно беспокоиться о преобразовании типов.

В фигурных скобках вы можете поместить в них любые допустимые python выражения, например функции, потому что f-строки вычисляются во время выполнения.
0 голосов
/ 26 мая 2020

Ответ от @AnnZen должен решить вашу непосредственную проблему (+1). Но у вас, похоже, есть большая проблема, связанная с int и str и запоминание, какая переменная есть какая:

second_number=input(str(sec_inp_words))
s_num=str(second_number)
answer=int(first_number)**int(second_number)
print('the answer to '+str(f_num)+'to the power of'+str(s_num)+'is'+answer)

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

inp_words_str = "Please enter the first number: "
sec_inp_words_str = "Please enter the second number: "
words_str = "Goodbye!"

# ...

if user_input_str == 'squares':
    first_number_str = input(inp_words_str)
    second_number_str = input(sec_inp_words_str)

    first_number_int = int(first_number_str)
    second_number_int = int(second_number_str)

    answer_int = first_number_int ** second_number_int

    print(f'The answer to {first_number_str} to the power of {second_number_str} is {answer_int}.')
    print(words_str)

Таким образом вы будете знать, что не следует вызывать str() для *_str переменной и не вызывать int() для переменной *_int(), et c. Вы также можете использовать в калькуляторе float вместо int.

...