这是我的代码:
def get_user_list(message, datatype):
while True:
str_input = input(message)
if str_input == '':
print('Error: Received no input.')
for i in range(str_input - 1):
if datatype == 'int':
try:
return int(str_input)
except ValueError:
print("Error: Element '" + str_input[i] + "' is not of type " + datatype + ".")
elif datatype == 'float':
try:
return float(str_input)
except ValueError:
print("Error: Element '" + str_input[i] + "' is not of type " + datatype + ".")
else:
return str_input
我无法弄清楚它有什么问题... somone请帮助......谢谢
答案 0 :(得分:3)
作为input()
的返回值,str_input
是一个字符串。 (您可能已经想到了这一点,因为您相应地命名了变量。)在表达式range(str_input - 1)
中,您尝试从此字符串中减去一个整数,这是不可能的。您还需要先将输入转换为整数,例如range(int(str_input) - 1)
。请注意,您的错误检查不足以解决此问题,因为并非每个非空字符串都可以转换为整数。 (此外,当您检测到空字符串时,您只需打印错误消息并继续,这将无效。)
答案 1 :(得分:1)
抱歉,这段代码有点混乱。
range
仅将整数作为参数,并且您传递的是字符串。如果您尝试遍历字符串的所有字符,则应传递字符串的 length ,如下所示:range(len(str_input))
。如果您尝试遍历输入中的所有单词,则必须先将其拆分为一个序列,如下所示:words = str_input.split(); for i in range(len(words)):: ...
。它仍然不会是非常pythonic,但你可能不关心它。type(myvar) == int
。请注意类型名称周围没有引号。datatype
永远不会被定义。请注意,从str_input获得的字符或单词将始终为str类型;如果你想要其他类型,你必须明确地转换它们,那时类型比较将是无用的(你已经知道了类型,对吧?)。如果你试图检查一些字符串是否代表int或float,你会做这样的事情:
try:
myvar = int(word)
except ValueError:
print('this is not an integer')
在错误消息中,您只传递输入的一个字符。这可以;但是,如果你真的在处理单个字符,那么比较类型没有任何意义:单个字符只能是int或字母,它永远不能是float(float有小数;你怎么能用一个字符表示小数?)。如果你真的对单个字符感兴趣,你可以使用他们的方法:
>>> "a".isdigit()
False
>>> "1".isdigit()
True
如果这是一个学校练习,你必须更好地考虑你真正想要完成的事情。
答案 2 :(得分:0)
请按照上述帖子更正您的代码。
如果你想要变量的类型只需写
x=10
print (x.__class__)
x = "My Name"
type(x)
这将为您提供变量的类型,您可以轻松识别方法中导致问题的原因。