如何在输入中允许整数和字符串?

时间:2017-11-12 19:39:12

标签: python string input integer

我刚刚开始学习Python一周前,对于我的第一个项目之一,我构建了一个非常简单的随机数猜测游戏作为我所在课程的一部分。但是,我尝试添加一个扩展名我的代码,如果单词" no"输入是输入,即使输入只接受我的代码中的整数。在之前的一个问题中,我了解到如果发生错误,可以使用try / except来打印某些内容(例如通过输入" no"而不是整数),以下模板:

enter image description here

反过来,我的代码看起来像这样:

enter image description here

当我输入no时我得到的输出看起来像这样:

输入1到21之间的数字:否

Traceback (most recent call last):
  File "C:/Users/camer/Desktop/Python/randomintproject.py", line 3, in <module>
    guess = int(input("Enter a number between 1 and 21: "))
ValueError: invalid literal for int() with base 10: 'no'

如果模板代码有效,那么我做错了什么?

2 个答案:

答案 0 :(得分:1)

您试图通过int {/ 1>包裹input()来将所有输入转换为int()

试试这个:

inp = input('enter a number...')

if inp.isnumeric():  # checks if input is numeric, i.e. 2, 39, 4592 etc
    inp = int(inp) 
else:  # Was not numeric, i.e. was a letter, word or some character
    print "OK forget it" 

另一种方式是:

inp = input('enter a number...')
    try:  # checks if input is numeric, i.e. 2, 39, 4592 etc
        inp = int(inp) 
    except(ValueError):  # Was not numeric, i.e. was a letter, word or some 
character
        try:
            inp = float(inp)  # Let's try again, could be user entered 3.5 or some other float value.
        except(ValueError):
            print("OK forget it")

这将涵盖@schwobaseggl在此问题的评论中提到的案例。

另外请不要拍摄您的代码,但请将其粘贴到此处。

答案 1 :(得分:0)

您的代码:

random n = random.randint(1,21)
guess = int(input("Enter a number between 1 and  21: ")) 
try:
    while guess != n:
      print ("WRONG!")
      guess = int(input("Enter a number between 1 and 24: ")) 
      if guess == n: 
        print ("RIGHT!")
except ValueError:
    if guess == "no":
      print ("OK forget it") 
   else: 
      print ("no idea what you want") 

```

这里的问题是第一个guess = int(input("Enter a number between 1 and 24: "))try子句之前,因此不被它覆盖,因此当它出错时它没有被捕获。只需删除该行,它就可以正常工作!

P.S我刚刚意识到这一点,每次运行程序时都会说“错!”在你开始之前。最简单的解决方法是添加布尔值first,如果它是true,则不要打印“错误!”,然后在第一次迭代后将其设置为false。或者(但在我看来更丑陋),为第一个输入创建第二个try except子句