Python没有检测到单个字母,但检测到两个字母很好
这是我用来检测字符串是否包含字母的代码。如果没有检测到,它允许程序将字符串转换为浮点数。这个想法是,我可以在尝试将字符串转换为浮点数后停止程序崩溃。Python没有检测到单个字母,但检测到两个字母很好
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
Python中的字符串是基于0。测试从不检查字符串中的第一个字符。
for i in range(0, len(argument)):
备案的知识了,在回答来自所示和@DeepSpace的@helmbert蟒蛇方式(for char in argument
)似乎更清洁。
这似乎已修复它。谢谢! –
你有return
命令后print
线,所以他们将永远不会被执行。将print
移动到return
以上。
您也可以使你的代码更Python,更具可读性:
for char in argument:
return char.isalpha()
在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
当然,你可以把所有的逻辑放到一个函数中,以防你需要在你的程序中多次执行它。 玩得开心!
其他和最后都不需要。 –
当然。我特意添加了他们的行为以便他/她能够正确地设计她/他的代码。 – Pynchia
请不要发布*纯文本输出*的图像。将输出复制到您的帖子中。 – usr2564301
只需使用try/except并捕获ValueError –