Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2017 11:19:54

APSYHEA
Зарегистрирован: 2017-03-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Конвертация строки в число.

 usd = 26.8875027
eur = 28.8570123
rub = 0.467923209
setup = ['usd','eur','rub']
if 'usd' is setup[0]:
    print (int(input()) * usd)
elif 'eur' is setup[1]:
    print (int(input()) * eur)
elif 'rub' is setup[2]:
    print (int(input()) * rub)
else:
    print ('Error')
Ошибка:
Traceback (most recent call last):
File “/root/calc.py”, line 7, in <module>
print (int(input()) * usd)
ValueError: invalid literal for int() with base 10: ‘usd’

Отредактировано APSYHEA (Март 21, 2017 11:20:45)

Офлайн

#2 Март 21, 2017 18:24:23

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Конвертация строки в число.

 int(input())
ожидает ввода целого числа для корректной работы, а вы подаете строку… Вообще, более конкретно опишите задачу. Непонятно чего хотите. Если при вводе usd получать значение, то ваш код этого не выполнит…

Офлайн

#3 Март 21, 2017 18:32:59

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Конвертация строки в число.

APSYHEA
Traceback (most recent call last):
File “/root/calc.py”, line 7, in <module>
print (int(input()) * usd)
ValueError: invalid literal for int() with base 10: ‘usd’
Конечно, такая ошибка и будет появляться, потому что ваша программа разрешает пользователю вводить строки вместо цифр. Например, я ввел ‘usd’ и получил ошибку в таком же точно виде:



При вводе цифр (например “100”) программка хоть и работает, но неправильно, вам надо все переделать.
1. У вас в if все условия выполняются, поэтому срабатывает только 1-е для ‘usd’, исполнение остальных просто никогда не происходит.
2. Оператор is здесь не годится, он служит для проверки того, что две ссылки указывают на один и тот же объект.

Офлайн

#4 Март 22, 2017 05:42:16

APSYHEA
Зарегистрирован: 2017-03-20
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Конвертация строки в число.

Решил данную проблему, переписав код. Конечно с int я тупанул, но там проблема была не только в этом.
Вобще я сидел занимался другим кодом, и вдруг понял что это можно применить к этой задаче с конвертером. Я только начинаю свой путь изучения языка, забавно осознавать что фикс я нашел именно таким способом.

 '''
usd = 26.8875027
eur = 28.8570123
rub = 0.467923209
'''
setup = ['usd','eur','rub']
print ('------------------------------------\nКонвертер валют UAH > USD, EUR, RUB \n------------ by APSYHEA ------------\n')
print ('Конвертировать в (usd, eur, rub)?')
str_input = str(input())
int_input = int(input())
if str_input == setup[0]:
    print ((int_input * 26.8875027),'USD')
elif str_input == setup[1]:
    print ((int_input * 28.8570123),'EUR')
elif str_input == setup[2]:
    print ((int_input * 0.467923209),'RUB')
else:
    print ('Ошибка! Неправильный тип валюты.')

Офлайн

#5 Март 22, 2017 18:31:09

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Конвертация строки в число.

По моему мнению в данном случае лучше использовать словарь вместо списка… Например, как-то так

 exchange_rates = {
                  'usd': 26.8875027,
                  'eur': 28.8570123,
                  'rub': 0.467923209,
                }
try:
    str_input = input('Enter currency:').lower()
    int_input = int(input('Amount of currency'))
    uah = exchange_rates.get(str_input) * int_input
    print('{0} {1} = {2} UAH'.format(int_input, str_input.upper(), uah))
except (ValueError, TypeError):
    print('error')

Офлайн

#6 Март 26, 2017 18:33:19

python335
Зарегистрирован: 2016-10-19
Сообщения: 88
Репутация: +  -8  -
Профиль   Отправить e-mail  

Конвертация строки в число.

“Оператор” is тут необязателен. Его можно было заменить на ==. Это более рационально.
Ну и в конце концов все это неправильно написано. Проверьте свое творение..

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version