如何在Python 3中将浮点字符串转换为整数

时间:2014-11-20 20:11:33

标签: python python-3.x data-conversion floating-point-conversion

我是整个编码的新手......所以这里有。 只是想写一个简单的猜数游戏,还要做输入验证。因此只接受整数作为输入。我已经弄清楚如何清除字母字符,所以我可以将数字转换为整数。当我输入一个浮点数时,我遇到了麻烦。我无法让它将浮点数转换为整数。任何帮助表示赞赏。正如我所说,我正在谈论这个编码的第3天,所以试着理解我的小知识。提前谢谢。

这是我的主程序中的功能。

def validateInput():
    while True:
        global userGuess
        userGuess = input("Please enter a number from 1 to 100. ")
        if userGuess.isalpha() == False:
            userGuess = int(userGuess)
            print(type(userGuess), "at 'isalpha() == False'")
            break
        elif userGuess.isalpha() == True:
            print("Please enter whole numbers only, no words.")
            print(type(userGuess), "at 'isalpha() == True'")
    return userGuess

如果我使用4.3(或任何浮动)作为输入,这是我得到的错误。

Traceback (most recent call last):
File "C:\\*******.py\line 58, in <module>
validateInput()
File "C:\\*******.py\line 28, in validateInput
userGuess = int(userGuess)
ValueError: invalid literal for int() with base 10: '4.3'

4 个答案:

答案 0 :(得分:7)

实际上int()函数需要整数字符串 float ,而不是浮点字符串。如果给出了浮点字符串,则需要先将其转换为float,然后再转换为int

int(float(userGuess))

答案 1 :(得分:0)

首先,为什么想要将float字符串转换为整数?您是否希望将4.7视为用户猜到4的含义?还是5?或合法但自动无效的猜测?或者实际上是值4.7(在这种情况下你根本不需要整数)?还是...?


其次,你接近这个的方式是错误的。 userGuess.isalpha()仅告诉您猜测完全由字母组成。这意味着你仍然会将"Hello!"视为一个数字,因为它至少有一个非字母。

如果您想知道字符串是否是有效整数,只需在其上调用int,并使用try / except来处理不是:

def validateInput():
    while True:
        global userGuess
        userGuess = input("Please enter a number from 1 to 100. ")
        try:
            userGuess = int(userGuess)
            print(type(userGuess), "after int succeeeded")
            break
        except ValueError:
            print("Please enter whole numbers only, no words.")
            print(type(userGuess), "after int failed")
    return userGuess

如果您想以不同于其他类型的失败来处理实际单词,例如,您可以打印更具体的错误消息,那么您可以在isalpha子句中检查except

如果你想要检查它是否是一个浮点数,所以你可以给出一个不同的错误,在try子句内做同样的事情 - float(userGuess)来调用except。或者,如果要截断浮点数,请将int(userGuess)更改为int(float(userGuess))

即使在try部分内,您可能还需要进行其他一些检查。例如,如果他们输入-23178怎么办?这些是整数,但它们不是1到100之间的数字。

显然,您需要的验证越多,所需的代码就越多,因为每个测试都是另一行代码。因此,您可能需要考虑将验证从循环输入转移到单独的函数,以使其更具可读性。

答案 2 :(得分:0)

请勿使用isalpha来屏蔽输出。 EAFP - 转换它并处理该异常。 ValueError正是您想要的,因为您可以处理它并告诉用户更正他们的输入。或者出于某种奇怪的原因,你想要默默地纠正来自&#34; 4.3&#34;到&#34; 4&#34;。

def validateInput():
    while True:
        global userGuess
        userGuess = input("Please enter a number from 1 to 100. ")
        try:
            int(userGuess)
            return userGuess # you shouldn't really keep this string...
        except ValueError as e:
            print("Please enter whole numbers only, no words.")

答案 3 :(得分:0)

您可以使用字符串操作和类型转换。

int(userGuess.split('.')[0])