Python 未检测到单个字母,但检测到两个字母正常
Python not detecting a single letter, but detects two letters fine
这是我用来检测字符串是否包含字母的代码。如果检测到 none,它允许程序将字符串转换为浮点数。我的想法是,我可以在尝试将带有字母的字符串转换为浮点数后阻止程序崩溃。
for i in range(1, len(argument)):
if argument[i].isalpha():
return False
print("Ran option 1")
else:
return True
print("Ran option 2")
打印行只是为了帮助我查看正在执行的部分。事实证明,他们都不是。
http://puu.sh/ivVI7/8598b82fe8.png
这是输出的屏幕截图。在前半部分,它检测到 "aa" 字符串并且没有使代码崩溃。然而,在后半部分,它未能检测到单个 "a" 并尝试将其转换为浮点数,从而导致程序崩溃。如果有人能伸出援手,将不胜感激。
如果有帮助,剩下的代码在这里:http://pastebin.com/Cx7HbM4c
您在 return
命令之后有 print
行,因此它们永远不会被执行。将 print
移到 return
上方。
您还可以使您的代码更符合 pythonic 和更具可读性:
for char in argument:
return char.isalpha()
Python 字符串是从 0 开始的。测试从不检查字符串中的第一个字符。
for i in range(0, len(argument)):
将这些知识归档,@DeepSpace 和@helmbert 的回答中显示的 python 方式 (for char in argument
) 似乎更清晰。
在 Python 中,数组 零索引 。这意味着,您需要从 0 开始迭代,而不是 1!
您只需在循环体中添加 print(argument[i])
即可轻松重现:
def func(argument):
for i in range(1, len(argument)):
print(argument[i])
func("a") # Prints nothing
func("ab") # Prints "b"
尽可能接近原始代码,只需从 0 而不是 1 开始迭代:
for i in range(0, len(argument):
# ...
更简单,您还可以直接迭代字符串:
for character in argument:
print(character) # Will print every single character
# ...
好的,如果你想知道你能不能转换字符串,你为什么不使用这样的函数:
def convertable(value):
try:
float(value)
return True
except ValueError:
return False
如果您只想防止程序崩溃,那么您的朋友们除外:
argument = "abc"
try:
value = float(argument)
except ValueError as e:
print e, "is unacceptable"
else:
print value, "is acceptable as a float"
finally:
print "alright"
输出:
could not convert string to float: abc is unacceptable
alright
然而,如果 argument = "3.14"
它输出:
3.14 is acceptable as a float
alright
当然,您可以将所有这些逻辑放入一个函数中,以防您需要在整个程序中多次执行它。
玩得开心!
这是我用来检测字符串是否包含字母的代码。如果检测到 none,它允许程序将字符串转换为浮点数。我的想法是,我可以在尝试将带有字母的字符串转换为浮点数后阻止程序崩溃。
for i in range(1, len(argument)):
if argument[i].isalpha():
return False
print("Ran option 1")
else:
return True
print("Ran option 2")
打印行只是为了帮助我查看正在执行的部分。事实证明,他们都不是。
http://puu.sh/ivVI7/8598b82fe8.png
这是输出的屏幕截图。在前半部分,它检测到 "aa" 字符串并且没有使代码崩溃。然而,在后半部分,它未能检测到单个 "a" 并尝试将其转换为浮点数,从而导致程序崩溃。如果有人能伸出援手,将不胜感激。
如果有帮助,剩下的代码在这里:http://pastebin.com/Cx7HbM4c
您在 return
命令之后有 print
行,因此它们永远不会被执行。将 print
移到 return
上方。
您还可以使您的代码更符合 pythonic 和更具可读性:
for char in argument:
return char.isalpha()
Python 字符串是从 0 开始的。测试从不检查字符串中的第一个字符。
for i in range(0, len(argument)):
将这些知识归档,@DeepSpace 和@helmbert 的回答中显示的 python 方式 (for char in argument
) 似乎更清晰。
在 Python 中,数组 零索引 。这意味着,您需要从 0 开始迭代,而不是 1!
您只需在循环体中添加 print(argument[i])
即可轻松重现:
def func(argument):
for i in range(1, len(argument)):
print(argument[i])
func("a") # Prints nothing
func("ab") # Prints "b"
尽可能接近原始代码,只需从 0 而不是 1 开始迭代:
for i in range(0, len(argument):
# ...
更简单,您还可以直接迭代字符串:
for character in argument:
print(character) # Will print every single character
# ...
好的,如果你想知道你能不能转换字符串,你为什么不使用这样的函数:
def convertable(value):
try:
float(value)
return True
except ValueError:
return False
如果您只想防止程序崩溃,那么您的朋友们除外:
argument = "abc"
try:
value = float(argument)
except ValueError as e:
print e, "is unacceptable"
else:
print value, "is acceptable as a float"
finally:
print "alright"
输出:
could not convert string to float: abc is unacceptable
alright
然而,如果 argument = "3.14"
它输出:
3.14 is acceptable as a float
alright
当然,您可以将所有这些逻辑放入一个函数中,以防您需要在整个程序中多次执行它。 玩得开心!