【问题标题】:My input keeps reading as a string instead of an int how can I solve this issue我的输入一直读取为字符串而不是 int 我该如何解决这个问题
【发布时间】:2018-06-08 07:25:41
【问题描述】:
amount = input  ("enter amount: ")

hundredDollar = amount / 100
amount = amount % 100

fiftyDollar = amount / 50
amount = amount % 50

twentyDollar = amount / 20
amount = amount % 20

tenDollar = amount / 10
amount = amount % 10

fiveDollar = amount / 5
amount = amount % 5

oneDollar = amount / 1
amount = amount % 1

quarter = amount / .25
amount = amount % .25

dime = amount / .10
amount = amount % .10

nickel = amount / .05
amount = amount % .05

penny = amount / .01
amount = amount % .01

print(int(hundredDollar) + " hundred dollar bills")
print(int(fiftyDollar) + " fifty dollar bills")
print(int(twentyDollar) + " twenty dollar bills")
print(int(tenDollar) + " ten dollar bills")
print(int(fiveDollar) + " five dollar bils")
print(int(oneDollar) + " one dollar bills")
print(int(quarter) + " quarters")
print(int(dime) + " dimes ")
print(int(nickel) + " nickels")
print(int(penny) + " pennies")

所以这个程序的目标是输出最大数量的符合金额的美元钞票,然后是最大数量的一百、五十美元钞票, 然后是 20,然后是 10、5 和 1。之后,显示最大的四分之一数、一角硬币、五分硬币和一分硬币的数量。

例如,100 美元可以显示为 10000 便士,或 2 张 50 美元钞票或 5 张 20 美元钞票。但正确答案是100元钞票的最大数量:1张一百元钞票。如果面额不为零,则仅显示面额的数量。

我遇到的这个问题是我的输入一直读取为字符串而不是 int 我该如何解决这个问题

【问题讨论】:

  • 问题出在输入行;其他细节是多余的。

标签: python python-3.x


【解决方案1】:

您可以使用内置函数int()float() 在适当的情况下分别将字符串返回为int 或float。

例如:

amount = float(input("Enter amount:"))

amount 设置为根据用户输入构造的浮点数。

其他改进

查看您提供的代码,您可以进行的其他改进如下:

使用// 对数字进行除法运算。

例如:

hundredDollar = amount // 100

将百元设置为一个整数,表示 100 进入金额的最大次数。因此,如果金额为 150,则由于该金额由一整张百元钞票组成,所以百元将被设置为 1。

将数字与字符串连接时使用str()

当您将数字与字符串连接(组合)并且数字在前时,您需要先将数字转换为字符串。例如:

str(hundredDollar) + " hundred dollar bills."

当使用浮点数并且您希望输出显示为 int 即 2 而不是 2.0 时,您可以使用 int() 函数或格式化输出。例如:

print( int(hundredDollar), "hundred dollar bills." ) 

为用户输入添加验证

当接收到来自用户的输入时,建议添加一些验证来检查用户输入的数据是否符合预期 - 在这种情况下,是一个有效的数量。这可以使用tryexcept 块作为数据类型和if 语句来检查数据是否在有效范围内或满足其他要求。

【讨论】:

  • 在问题 int 的情况下是合适的。 float 不能与 // 一起使用,运算符 / 将产生一个浮点值而不是所需的 int。
  • print(hundredDollar, "hundred Dollar bills.") 比较简单
  • @ArpadHorvath 我建议 float 更适合在这里使用货币,因为在问题中它表明金额可以有便士、镍等。浮点数将与 // 一起使用并返回所需的整数。在输出方面,float可以格式化为int。
  • @ArpadHorvath 您对打印语句的建议在打印时是合适的。在将数字与字符串连接时,在所有情况下都需要我建议的方法。我已经更新了答案以更清楚地反映这一点。
  • 实际上,float 和 int 都不适合与货币一起使用。正确的类型是定点,在 Python 中可以通过 decimal 访问。
【解决方案2】:

您的输入一直读取为string 而不是int 的原因是因为input() 返回一个字符串对象(自从他们从Python 2 中删除raw_input() 函数并制作input() 函数取而代之)。

使用int() 函数将字符串更改为整数,如下所示:

amount = int(input("Enter amount: "))

(这也适用于float() 函数。)

但是,如果用户输入一个字符串,这将产生错误。为避免这种情况,请将转换为整数包装在 try...except 块中:

try:
  amount = int(input("Enter amount: "))
except ValueError:
  #Perhaps prompt the user to try again here

(再一次,这将与float() 函数一起使用)

【讨论】:

    【解决方案3】:

    使用这个

    amount = eval(input  ("enter amount: "))
    

    它将字符串从输入转换为int

    如果你想要浮动

    amount = float(input  ("enter amount: "))
    

    【讨论】:

    • Eval 不会“将字符串转换为 int”。它执行作为 python 表达式输入的字符串。现在,如果用户输入一个数字,那么您将得到一个数字——但他们也可以做各种其他事情。在您彻底清理参数之前,切勿调用 eval。
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2020-02-14
    相关资源
    最近更新 更多