如何在python中把浮动字符串转换成整数 3

问题描述 投票:-1回答:0

我对整个编码的事情是个新手......所以这里开始了.只是想写一个简单的数字猜测游戏,但也做输入验证。因此,只有整数才会被接受为输入。 我已经想好了如何剔除字母字符,所以我可以把数字转换成整数。 当我输入一个浮点数时,我遇到了麻烦。 我不能让它把浮点数转换成整数。 感谢任何帮助。 我说过,我对这个编码的事情大约是第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'
python string list int
14
投票

其实 int() 函数期待一个 整数字符串浮动但不是 浮子串. 如果给定的是一个浮动字符串,你需要将其转换为 float 再到 int 作为。

int(float(userGuess))

0
投票

首先,你为什么 想要 来将浮动字符串转换为整数?你想把 4.7 意思是用户已经猜到 4? 抑或 5? 还是一个合法但自动无效的猜测?或者作为实际的价值 4.7 (在这种情况下,你根本不想要整数)? 还是...?


第二,你的方法是错误的。userGuess.isalpha() 只告诉你,猜测完全是由字母构成的。这意味着你还是要把,比如说,。"Hello!" 作为一个数字,因为它至少有一个非字母。

如果你想知道一个字符串是否是有效的整数,只要调用 int 上,并使用 tryexcept 来处理不是的情况。

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 子句,如果你想处理检查是否是浮点,从而给出一个不同的错误,做同样的事情。

如果你想处理检查它是否是一个float,这样你就可以给出一个不同的错误,做同样的事情--。try 呼叫 float(userGuess)-在内部 except 子句。或者,如果你想截断浮点数,可以将该句改为 int(userGuess)int(float(userGuess)).

你可能还想要一些其他的检查,甚至在里面的 try 部分。例如,如果他们输入 -23178? 这些都是整数,但它们不是1和100之间的数字。

很明显,你想要的验证越多,需要的代码就越多,因为每个测试都是另一行代码。所以,你可能要考虑把验证移到一个单独的函数中,而不是在输入上进行循环,以使其更易读。


0
投票

不要使用 isalpha 以筛选输出。 EAFP -- 转换它并处理该异常。 要么是 ValueError 正是你想要的,因为你可以处理它并告诉用户纠正他们的输入。 或者出于一些奇怪的原因,你想默默地把他们的输入从 "4.3 "改成 "4"。

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.")

0
投票

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

int(userGuess.split('.')[0])
© www.soinside.com 2019 - 2024. All rights reserved.