2015-06-20 34 views
0

这是我用来检测字符串是否包含字母的代码。如果没有检测到,它允许程序将字符串转换为浮点数。这个想法是,我可以在尝试将字符串转换为浮点数后停止程序崩溃。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

+0

请不要发布*纯文本输出*的图像。将输出复制到您的帖子中。 – usr2564301

+0

只需使用try/except并捕获ValueError –

回答

2

Python中的字符串是基于0。测试从不检查字符串中的第一个字符。

for i in range(0, len(argument)): 

备案的知识了,在回答来自所示和@DeepSpace的@helmbert蟒蛇方式(for char in argument)似乎更清洁。

+0

这似乎已修复它。谢谢! –

3

你有return命令后print线,所以他们将永远不会被执行。将print移动到return以上。

您也可以使你的代码更Python,更具可读性:

for char in argument: 
    return char.isalpha() 
1

在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 
    # ... 
1

好吧,如果你试图找出可以将字符串或没有,你为什么不使用功能是这样的:

def convertable(value): 
    try: 
     float(value) 
     return True 
    except ValueError: 
     return False 
0

如果你想要的是防止你的程序崩溃,异常是你的朋友:

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 

当然,你可以把所有的逻辑放到一个函数中,以防你需要在你的程序中多次执行它。 玩得开心!

+0

其他和最后都不需要。 –

+0

当然。我特意添加了他们的行为以便他/她能够正确地设计她/他的代码。 – Pynchia