假设两个变量varA和varB被赋值,可以是数字或字符串。
编写一段Python代码,打印出以下消息之一:
"字符串涉及"如果varA或varB是字符串
"大"如果varA大于varB
"等于"如果varA等于varB
"较小"如果varA小于varB
假设已定义varA
和varB
,请在以下框中编写代码。
我的代码是
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
if int(varA)>int(varB):
print "bigger"
elif (int(varA)<int(varB)):
print "smaller"
else:
print "equal"
测试值:varA = -7
,varB = adieu
输出是:
ValueError: invalid literal for int() with base 10: 'adieu'
为什么我得到这个输出?如何解决这个问题?
答案 0 :(得分:1)
如果第一次测试成立,则需要跳过第二次测试。你的一个参数是一个字符串,并且该字符串不能转换为整数,因为Adieu
由字母而不是数字组成。
您可以使用elif
代替if
:
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
elif int(varA)>int(varB):
print "bigger"
elif (int(varA)<int(varB)):
print "smaller"
else:
print "equal"
你根本不需要将varA
和varB
转换为整数,因为你的第一个测试已经确定它们都不是字符串,我碰巧知道你正在做的任务只传递字符串或整数:
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
elif varA > varB:
print "bigger"
elif varA < varB:
print "smaller"
else:
print "equal"
接下来,当您可以使用type('s')
直接引用该测试的结果时,您不必使用str
;如果你要使用type()
,你应该在这里测试身份而不是相等:
if type(varA) is str or type(varB) is str:
print "string involved"
elif int(varA)>int(varB):
print "bigger"
elif (int(varA)<int(varB)):
print "smaller"
else:
print "equal"
使用isinstance()
测试类型几乎总是更好,因为这也允许子类通过测试:
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
elif varA > varB:
print "bigger"
elif varA < varB:
print "smaller"
else:
print "equal"
接下来,当您可以使用type('s')
直接引用该测试的结果时,您不必使用str
;如果你要使用type()
,你应该在这里测试身份而不是相等:
if isinstance(varA, str) or isinstance(varB, str):
print "string involved"
elif varA > varB:
print "bigger"
elif varA < varB:
print "smaller"
else:
print "equal"
我强烈怀疑你的作业要求你创建一个返回结果的函数,而不是打印。在这种情况下,您需要使用return
语句:
if isinstance(varA, str) or isinstance(varB, str):
return "string involved"
elif varA > varB:
return "bigger"
elif varA < varB:
return "smaller"
else:
return "equal"