2015-06-20 59 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