我目前正在用python编写一个基于文本的游戏,在该游戏中,根据对某些问题的回答,叙述的开头会有所不同。第一个问题很简单,一个名字。提示后,我似乎无法在正确的文本选项中显示输入。
我尝试使用
“如果名称为True”
和
“如果名称为str”
但是它们都跳到else选项,而不是在输入后显示正确的选项。
while True:
try:
# This will query for first user input, Name.
name = str(input("Please enter your name: "))
except ValueError:
print("Sorry, I didn't understand that.")
# No valid input will restart loop.
continue
else:
break
if name is str:
print("Ah, so " + name + " is your name? Excellent.")
else:
print("No name? That's fine, I suppose.")
因此,如果我输入John作为我的名字,我希望输出为“ Ah,John是你的名字吗?太好了。”
但是相反,我输入John并输出:
请输入您的姓名:John
没有名字?我想那很好。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:-1)
不需要input
周围的异常处理,因为input
函数始终返回一个字符串。如果用户未输入值,则返回空字符串。
因此您的代码可以简化为
name = input("Please enter your name: ")
# In python an empty string is considered `False` allowing
# you to use an if statement like this.
if name:
print("Ah, so " + name + " is your name? Excellent.")
else:
print("No name? That's fine, I suppose.")
进一步使用is
:
is
用于比较身份,因为两个变量引用同一对象。更常见的用途是测试变量是否为None
,例如if name is None
(None
始终是同一对象)。如前所述,您可以使用type(name)
来获取变量 name 的类型,但是不建议使用此变量代替内置检查isinstance
。
==
比较等于if name == "Dave"
的相等性。
isinstance
不仅可以检查特定类型,还可以处理继承的类型。
答案 1 :(得分:-1)
问题是您要检查name是否为str,而不是type(name)是否为str。
if type(name) is str:
答案 2 :(得分:-1)
使用isinstance
代替is
。
而且,您不需要使用str(input())
,因为input
返回str
。
while True:
try:
# This will query for first user input, Name.
name = input("Please enter your name: ")
except ValueError:
print("Sorry, I didn't understand that.")
# No valid input will restart loop.
continue
else:
break
if isinstance(name, str):
print("Ah, so " + name + " is your name? Excellent.")
else:
print("No name? That's fine, I suppose.")
结果是:
Please enter your name: John
Ah, so John is your name? Excellent.
但是,如果要检查string.isalpha()
是否是由字母组成的实名,则必须使用name
。
if name.isalpha():
print("Ah, so " + name + " is your name? Excellent.")
else:
print("No name? That's fine, I suppose.")