如何将浮点字符串转换为python中的整数3

问题描述:

我是新来的整个编码的东西......所以这里。 只是试图写一个简单的数字猜测游戏,但也做输入验证。所以只有整数才被接受为输入。我已经想出了如何去除字母字符,所以我可以将数字转换为整数。当我输入一个浮点数时,我遇到了麻烦。我无法得到它将浮点数转换为整数。任何帮助表示赞赏。正如我所说的,我正在谈论这个编码事物的第3天,所以试着理解我的小知识。提前致谢。如何将浮点字符串转换为python中的整数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' 
+0

您可以尝试使用try-except来链接转换。如果你的int()转换产生一个ValueError异常,你可以尝试使用float()转换输入,然后将你的浮点值舍入或截断为整数。 – nullop 2014-11-20 20:24:16

+0

几个方面的说明:你几乎从不想检查'如果垃圾邮件==假:',只是'如果不是垃圾邮件:'。在'elif'中,你不需要重新检查'if'测试的反面 - 你已经知道'isalpha'是真的,因为你知道它不是假的。所以,只需使用'else:'。如果你从这个函数返回'userGuess',你几乎可以肯定不需要它是'global'。最后,你不需要为了“返回”而“休息”;你可以在'if'块中直接返回'userGuess'。 – abarnert 2014-11-20 20:27:39

实际上int()函数需要一个整数字符串浮子,但不是一个浮子串。如果浮动字符串给你需要将其转换为float第一再到int为:

int(float(userGuess)) 

首先,你为什么要浮动字符串转换为整数?您是否想将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 

如果你想处理与其他类型故障不同的实际字词,例如,因此您可以打印更具体的错误信息,然后您可以在except子句中检查isalpha

如果要处理检查它是否为浮点数,以便发出不同的错误,请执行同样的操作-以调用float(userGuess)-位于except子句的内部。或者,如果要截断浮动,请将int(userGuess)更改为int(float(userGuess))

即使在try零件中也可能需要其他检查。例如,如果他们输入-23178会怎么样?这些都是整数,但他们不是1和100

显然之间的数字,你需要更多的验证,更多的代码需要,因为每个测试是另一行代码。因此,您可能需要考虑将验证移出循环输入的单独函数,以使其更具可读性。

请勿使用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.")