首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python3 -识别对象类型时出现问题

Python3 -识别对象类型时出现问题
EN

Stack Overflow用户
提问于 2018-07-29 03:56:24
回答 2查看 64关注 0票数 0

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

生成一个介于1和9(包括1和9)之间的随机数。让用户猜测数字,然后告诉他们是猜得太低、太高,还是猜对了。保持游戏运行,直到用户键入“exit”

到目前为止,我得到了这样的结论:

代码语言:javascript
复制
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的错误消息。我原以为程序会识别用户是否写了一个字符串,这将触发以下代码:

代码语言:javascript
复制
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.")

或一个整数,其中它将执行以下操作:

代码语言:javascript
复制
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的数字或'exit‘。谢谢”。我注释掉了关于字符串的代码,仍然得到了这个答案,然后我注释掉了字符串代码和"else“代码,这使得它在输入数字后退出程序。

此时此刻,我的结论是,程序将所有输入解释为字符串。在之前的"y“变量中,我把它写成这样:

代码语言:javascript
复制
int(input("I thought of a number between 0 and 100. Try to guess what it was! "))

我将其更改为当前的手写字符串和整数形式。因为我在写“exit”的时候收到了这个错误信息:

代码语言:javascript
复制
ValueError: invalid literal for int() with base 10: 'exit'

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2018-07-29 04:02:57

代码语言:javascript
复制
int()

获取浮点数或字符串值,并使其成为整数,例如,1.0 ->1“1”->1,依此类推。当你输入"exit“时,计算机必须取它的整数,但"exit”当然不是整数,所以它会返回那个错误。

做你想做的事,很简单。

代码语言:javascript
复制
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.")

附注,在顶部你说

代码语言:javascript
复制
random.randint(0,10)

但是对于您的输入,假设是一个介于1和100之间的数字

票数 2
EN

Stack Overflow用户

发布于 2018-07-29 04:05:48

python中的input()总是返回str。你不能这样做:

代码语言:javascript
复制
int(input("I thought of a number between 0 and 100. Try to guess what it was! "))

因为如果用户输入的字符串不是数字,程序就不能将其转换为int,因此会抛出错误。

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

这是工作程序。

代码语言:javascript
复制
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.")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51574778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档