2014-01-29 79 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}

然后转换给定的输入​​:

(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. 您需要将货币值和转换因子都转换为浮动。另外,您需要重新写你的转换系数列表作为花车的列表,而不是字符串
+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转换为整数时您将面临错误。 '无效文字为int()与基地10' – Abhijit

+0

只是看到它,因为你评论:) – jramirez

+0

这工作,非常感谢! – user3143129

1

不能在蟒蛇繁殖字符串,并得到一个算术响应。您需要将字符串转换为整数。更改以下行:

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]是“英镑”的字符串,我认为你想说0.60