为什么我的输入功能不受支持?

时间:2014-11-11 05:02:32

标签: python while-loop

def main():
    pennies = get_input("Enter pennies : ")
    nickels = get_input("Enter nickels: ")
    dimes = get_input("Enter dimes: ")
    quarters = get_input("Enter quarters: ")

    print("You Entered : ")
    print("\tPennies : " , pennies)
    print("\tNickels :" , nickels)
    print("\tDimes :" , dimes)
    print("\tQuarters:" , quarters)

    total_value = get_total(pennies, nickels, dimes, quarters)
    dollars = get_dollars(pennies, nickels, dimes, quarters)
    left_over_cents = get_left_over_cents(pennies, nickels, dimes, quarters)

    print("Total = $",total_value, sep="")
    print("You Have", dollars, "dollars and", left_over_cents, "cent(s)")

我一直收到错误,指出TypeError:*支持的操作数类型*:' float'和' NoneType。我在这个网站上浏览了与此错误相关的答案,但没有找到任何可以帮助我的内容。用户输入四个数字后,程序在尝试执行下一部分代码后给出错误。

def get_input(message):
    get_input = int(input(message))
    while get_input <= 0:
        print("Error")
        return get_input 

在这部分。如果用户输入数字0或更低,则while循环应该返回到函数,但它只是写下0。我很抱歉这些可能是非常简单的解决方案,但我在我的介绍课程中,这对我来说相当困难。

def get_total(pennies, nickels, dimes, quarters):
    pennies = (.01 * pennies);
    nickels = .05 * nickels;
    dimes = .10 * dimes;
    quarters = .25 * quarters;
    total_value =  pennies + nickels + dimes + quarters
    return total_value

def get_dollars(pennies, nickels, dimes, quarters):
    total_value = get_total(pennies, nickels, dimes, quarters)
    dollars = format(total_value // 1, ".0f")
    return dollars

def get_left_over_cents(pennies, nickels, dimes, quarters):
    total_value = get_dollars(pennies, nickels, dimes, quarters)
    left_over_cents = total_value
    return left_over_cents
main()

2 个答案:

答案 0 :(得分:1)

首先,我认为您的输入功能是错误的:

def get_input(message):
    get_input = int(input(message))
    while get_input <= 0 :
        print("Error")
        return get_input

不应该这样:

def get_input(message):
    get_input = int(input(message))
    while get_input <= 0:
        print("Error")
        get_input = int(input(message))
    return get_input 

大多数(强大的)编译器甚至不会编译它,因为它们会将程序转换为跟踪,并注意到程序有可能返回而没有给出任何值。

由于Python是弱类型的,所以这不是问题:如果没有提供return语句,它只返回任何内容,但结束方法。

因此,当您输入有效数据时,您的方法不会返回任何内容,因此无法处理结果。

这是强类型语言优于Python之类的弱类型语言的优势之一,尽管我承认还有其他参数支持Python而不是Java。

答案 1 :(得分:1)

您的问题出在get_input函数中:

def get_input(message):
    get_input = int(input(message))
    while get_input <= 0:
        print("Error")
        return get_input

如果您输入的内容小于或等于0,则只返回一个值,显然不是所需的输入。相反,您应该移动while语句的返回外部,或者考虑改进它,以便只有在输入大于0时它才会返回:

def get_input(message):
    get_input = -1
    while get_input <= 0:
        print("Enter a number greater than 0")
        get_input = int(input(message))
    return get_input

这样:

>>> var = get_input('Enter: ')
Enter a number greater than 0
Enter: -4
Enter a number greater than 0
Enter: 0
Enter a number greater than 0
Enter: 5
>>> var
5
>>> 

之前,您没有返回任何内容,因此您的便士价值存储为None。 Python试图乘以penniesNone,因此您的错误:

>>> def get_input(message):
...     get_input = int(input(message))
...     while get_input <= 0:
...         print("Error")
...         return get_input 
... 
>>> pennies = get_input('Enter: ')
Enter: 9
>>> print(0.1*pennies)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'