为什么不支持我的输入函数?

2024-06-23 19:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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”的操作数类型。我在这个网站上浏览了与这个错误相关的答案,但是没有找到任何可以帮助我的东西。在用户输入四个数字后,程序在尝试执行下一部分代码后给我错误。在

^{pr2}$

在这一部分。如果用户输入一个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()

Tags: inputgetvaluedefleftovertotalprint
2条回答

您的问题出在您的get_input函数中:

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

如果输入的值小于或等于0,显然不是所需的输入,则返回值。相反,您应该将return移到while语句的之外,或者考虑改进它,使它只在输入大于0时返回:

^{pr2}$

因此:

^{3}$

之前,您没有返回任何内容,所以您的便士值被存储为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'

首先,我认为您的输入函数是错误的:

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

这不应该是:

^{pr2}$

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

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

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

这是强类型语言与弱类型语言(如Python)相比的优势之一,尽管我承认还有其他一些论据支持Python而不是Java。在

相关问题 更多 >

    热门问题