Python3-识别对象类型的问题

时间:2018-07-28 19:56:24

标签: python

我应该在开始我的问题之前说我是Python的新手(3天),没有编程经验,因此,如果我不立即理解答案,请耐心等待。 我正在使用Python 3.5.3,并尝试做以下练习(https://www.practicepython.org):

  

生成1到9(包括1到9)之间的随机数。让用户猜测数字,然后告诉他们猜测的数字是否太低,太高或完全正确。   继续进行游戏,直到用户键入“退出”

到目前为止,我知道了:

import random
import sys

value=random.randint(0, 10)
x=value
y=input("I thought of a number between 0 and 100. Try to guess what it was! ")
z=type(y)

if z==int:
    if y<x:
        print("too low!")
    elif y>x:
        print("too high!")
    elif y==x:
        print("right!")
    elif y==z:
        print("thank you for playing!")
        sys.exit(0)
elif z==str:
    if y=="exit":
        print("thank you for playing!")
        sys.exit(0)
    elif y !="exit":
        print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")
else:
    print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")

我创建了“ z”变量来存储有关输入类型的信息,以便在它是整数或字符串的情况下进行不同的操作。我觉得这是必要的,因为我遇到了很多关于将str混合为int的错误消息。 我希望程序能够识别用户是否写了一个字符串,这将触发以下代码:

elif z==str:
    if y=="exit":
        print("thank you for playing!")
        sys.exit(0)
    elif y !="exit":
        print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")

或整数,它将在其中执行此操作:

if z==int:
    if y<x:
        print("too low!")
    elif y>x:
        print("too high!")
    elif y==x:
        print("right!")
    elif y==z:
        print("thank you for playing!")
        sys.exit(0)

实际上,发生的事情是,每当我输入一个输入(无论是数字还是单词)时,我只会收到以下消息:“请仅输入1到10或'退出'的数字。谢谢。” 我注释掉了有关字符串的代码,但仍然得到了这个答案,然后注释掉了字符串代码和“ else”代码,这使它在输入数字后退出程序。

目前,我的结论是程序将所有输入解释为字符串。以前在“ y”变量中,我将其编写为:

int(input("I thought of a number between 0 and 100. Try to guess what it was! "))

我将其更改为当前形式的handlig字符串和整数。因为我在写“退出”时收到此错误消息:

ValueError: invalid literal for int() with base 10: 'exit'

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

int()

采用浮点或字符串值并将其设为整数,例如1.0 ---> 1“ 1” ---> 1,依此类推。当您输入“ exit”时,计算机必须采用该整数,但是“ exit”当然不是整数,因此它将返回该错误。

要做您想做的事情很简单。

try:
    a = int(y)
    if a<x:
        print("too low!")
    elif a>x:
        print("too high!")
    elif a==x:
        print("right!")
    elif a==z:# i dont understand what this is doing, but i will leave it
        print("thank you for playing!")
        sys.exit(0)
except ValueError:
   if y=="exit":
       sys.exit(0)
   else:
       print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")

旁注,在顶部您说

random.randint(0,10)

但请输入1到100之间的数字

答案 1 :(得分:2)

python中的

input()始终返回str。 您不能这样做:

int(input("I thought of a number between 0 and 100. Try to guess what it was! "))

由于用户输入的字符串(即非数字)不能被转换为整数,因此会引发错误。

不过,您可以使用value.isdigit()来检查value(字符串中)是否为有效数字,但是仍然需要将其强制转换为int以便以后在程序中使用。

这是工作程序。

import random
import sys

value=random.randint(0, 10)
x=value
y=input("I thought of a number between 0 and 100. Try to guess what it was! ")

if y.isdigit():
    y = int(y)
    if y<x:
        print("too low!")
    elif y>x:
        print("too high!")
    elif y==x:
        print("right!")
    elif y==z:
        print("thank you for playing!")
        sys.exit(0)
else:
    if y=="exit":
        print("thank you for playing!")
        sys.exit(0)
    elif y !="exit":
        print("Please write only numbers from 1 to 10 or 'exit'. Thank you.")