2014-01-29 4 views
-1

Я вроде как новый для Python, и мне было интересно, как это исправить. Я пытаюсь сделать конвертер валют для школьного проекта для своего вычислительного класса, однако я получаю сообщение об ошибке.Получение ошибки типа с Python

Вот код:

## Currency conversion calculator Mk.2 ## 

# USD, JPY, EUR 
GBP = ["1.66","169.14","1.21"] 
# GBP, JPY, EUR 
USD = ["0.60","102.20","0.73"] 
# GBP, USD, EUR 
JPY = ["0.0059","0.0098","0.0072"] 
# GBP, USD, JPY 
EUR = ["0.82","1.36","139.70"] 
# Inputs and outputs 
user_input = -1 
output = -1 

while True: 
    print("") 
    print("----------------------------------------------------") 
    print("Example: 14 GBP to USD") 
    print("") 
    user_input = input("How much would you like to convert? ") 
    user_input = user_input.split() 


    if user_input[1] == "GBP": 
     if user_input[3] == "USD": 
      output = user_input[3] * USD[0] 
      print(output) 
     elif user_input[3] == "JPY": 
      print("Filler text") 
     elif user_input[3] == "EUR": 
      print("Filler text") 

    elif user_input[1] == "USD": 
     if user_input[3] == "GBP": 
      print("Filler text") 
     elif user_input[3] == "JPY": 
      print("Filler text") 
     elif user_input[3] == "EUR": 
      print("Filler text") 

    elif user_input[1] == "JPY": 
     if user_input[3] == "GBP": 
      print("Filler text") 
     elif user_input[3] == "USD": 
      print("Filler text") 
     elif user_input[3] == "EUR": 
      print("Filler text") 

    elif user_input[1] == "EUR": 
     if user_input[3] == "GBP": 
      print("Filler text") 
     elif user_input[3] == "USD": 
      print("Filler text") 
     elif user_input[3] == "JPY": 
      print("Filler text") 


    else: 
     print("Please input it as something like '15 GBP to USD' remembering capitals!") 

Это ошибка я получил:

Traceback (most recent call last): 
    File "C:\Users\Kieran\Desktop\converter.py", line 27, in <module> 
    output = user_input[3] * USD[0] 
TypeError: can't multiply sequence by non-int of type 'str' 

Я на Python 3.3.3, кстати.

Большое спасибо!

+0

Каковы ваши ожидаемые входы и выходы? – thegrinner

+1

Почему вы используете строки для числовых значений? Используйте поплавок или десятичный тип. – geoffspear

+0

Почему вы вызываете 'split' на входе? Чего вы ожидаете от пользователей? – IanAuld

ответ

1

Я хотел бы предложить использовать словари вместо списков, чтобы сделать вашу жизнь проще:

# USD, JPY, EUR 
GBP = ["1.66","169.14","1.21"] 

в

currencies ={"GBP" : {"USD": 1.66, "JPY": 169.14, "EUR": 1.21}, "USD": {blah, blah}

затем преобразовать данный вход 14 GBP to USD:

(start_cur, end_cur) = user_input[1], user_input[3] # for readabilities sake 
converted = user_input[0] * currencies[start_cur][end_cur] 

Вся программа:

## Currency conversion calculator Mk.3 ## 

currencies = { 
    "GBP" : {"USD": 1.66, "JPY": 169.14, "EUR": 1.21}, 
    "USD" : {"GBP": 0.60, "JPY": 102.20, "EUR": 0.73}, 
    "JPY" : {"GBP": 0.0059, "USD": 0.0098, "EUR": 0.0072}, 
    "EUR" : {"GBP": 0.82, "USD": 1.36, "JPY": 139.70} 
       } 

while True: 
    print("") 
    print("----------------------------------------------------") 
    print("Example: 14 GBP to USD") 
    print("") 

    try: 
     user_input = input("How much would you like to convert? ").split() 
     (start_cur, end_cur) = user_input[1], user_input[3] # for readabilities sake 
     converted = float(user_input[0]) * currencies[start_cur][end_cur] 
     print(converted) 

    except ValueError: 
     print("Please input it as something like '15 GBP to USD' remembering capitals!") 
+0

Спасибо. Я не хотел чрезмерно усваивать его, но я обязательно буду изучать это. – user3143129

+0

Таким образом, вам не нужна какая-либо логика if/else, которая может стать беспорядочной. например, если вам нужно добавить 5 или 6 типов валют. Это сэкономит вам несколько головных болей. – IanAuld

+0

Спасибо большое! Я, вероятно, буду использовать это, очень ценю! – user3143129

2

Изменение линии

output = user_input[3] * USD[0] 

в

output = float(user_input[0]) * float(USD[0]) 

Примечание

Как подсказывает ошибки, вы пытаетесь умножить последовательность (здесь строку) со строкой can't multiply sequence by non-int of type 'str' , По всей видимости, здесь есть две проблемы:

  1. Вы указали неправильный элемент. Из ваших данных ясно, что значение валюты находится на 0-м индексе
  2. Вам необходимо преобразовать как значение валюты, так и коэффициент преобразования в float. Кроме того, вы должны повторно написать свой список фактор преобразования в списке поплавков, а не список строк
+0

Попадает с другой ошибкой: Traceback (последний последний звонок): Файл «C: \ Users \ Kieran \ Desktop \ converter.py ", строка 27, в output = int (user_input [0]) * int (USD [0]) ValueError: недействительный литерал для int() с базой 10: '0.60' – user3143129

+0

@ user3143129: Пожалуйста, перечитайте мой ответ. Вы поймали меня, когда я обновлял свой ответ. – Abhijit

1

Вы обвязочных умножить две строки вместе

user_input[3] = "USD"

и

USD[0] = "0.60"

output = user_input[3] * USD[0] 

Возможно, вы имели в виду:

output = float(user_input[0]) * float(USD[0]) 

Кстати вы, вероятно, следует сделать все эти целые числа вместо строк

USD = ["0.60","102.20","0.73"] в USD = [0.60,102.20,0.73]

+0

Вы столкнетесь с ошибками при преобразовании float в integer. 'invalid literal для int() с базой 10' – Abhijit

+0

просто видел это, как вы комментировали :) – jramirez

+0

Это сработало, спасибо большое! – user3143129

1

Вы не можете умножить строки в Python и получить арифметический ответ. Вам нужно преобразовать строки в ints. Измените следующие строки:

USD = [0.60,102.20,0.73] 

и

output = float(user_input[0]) * USD[0]) 
+0

USD [0] также представляется в виде строки. – Abhijit

0

Вы пытались умножить строку на другую строку.

Попробуйте это:

output = float(user_input[0]) * float(USD[0]) 

user_input [3] является «GBP» строка, я должен вам хочу сказать, 0,60

Смежные вопросы