使用Python获取类型错误

时间:2014-01-29 18:27:33

标签: 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。

非常感谢!

5 个答案:

答案 0 :(得分: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. 您需要将货币值和转换系数都转换为浮动。或者,您需要将转换因子列表重写为浮点数列表而不是字符串列表

答案 1 :(得分: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]

答案 2 :(得分:1)

你不能在python中乘以字符串并获得算术响应。您需要将字符串转换为整数。更改以下行:

USD = [0.60,102.20,0.73]

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

答案 3 :(得分: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!")

答案 4 :(得分:0)

您尝试将字符串乘以另一个字符串。

试试这个:

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

user_input [3]是'GBP'一个字符串,我想你想说0.60