2015-05-06 53 views
-1

因此,在處理我的程序時,我正在嘗試讀取文件,並將所有包含的信息帶回。而另一個函數分割列表,隨機產生一個包含的字符串。如果它不是字符串,請重試。只讀取文件中的str對象

不幸的是,當我這樣做時,我的程序被翻轉出來,完全拒絕服從或者只是給了我一個錯誤或是,拋出。

所以現在我正在尋找一種方法來只讀取字符串對象,所以我可以跳過它檢查它是否是整數的整個部分。

import random 
from random import randrange 
def readfile(file): 
    try: 
     f = open(file, 'r') 
     fil = f.readlines() 
     f.close() 
     return fil 
    except IOError: 
     print('fil finns inte') 
     return None 

def chooseword(lista): 
    while True: 
     lista = random.choice(lista) 
     ordet = lista.split() 
     x = randrange(len(ordet)) 
     ord = ordet[x] 
     try: 
      if ord.isalpha: 
       return ord 
     except: 
      print("none") 

print(chooseword(readfile("file.txt"))) 

我試着用random.choice而不是randrange,這沒什麼區別。

那麼,我將如何前進只導入字符串對象,如:巴南,而不是123或¤%&。

感謝

感謝

+0

你的程序在第一次通過while循環的時候會拋出所有行而不是一個;那麼你不再有可供選擇的行列表。我的建議:不要個性化你的程序。它不會翻出來,你是。瞭解python在做什麼,因爲它不會改變;你必須改變你的理解和你的程序。 – alexis

回答

2

你有很多事情錯在你的代碼。最明顯的問題是你的chooseword功能。如果您讀取的第一個字符串不是字母字符串,則會產生無限循環,因爲您用隨機元素的值覆蓋lista,因此,當您重複循環時,您將一遍又一遍讀取相同的元素,永遠不要退出循環。

檢查字符串是否只包含字母是一個函數調用,所以你必須調用.isalpha()。另外,如果你打了一個非alpha字符串,那麼我懷疑你打算除了(比如說5次快:)以及打印'none' ...這絕對不會發生在你的代碼中。只需使用if, else條件。

您的固定代碼:

import random 
from random import randrange 
_file = file 

def readfile(file): 
    with open(file, 'rb') as f: 
     try: 
      return f.readlines() 
     except: 
      print('fil finns inte') # not sure what your trying to catch here 

def chooseword(lista): 
    while True: 
     dont_overwrite_lista = random.choice(lista) 
     ordet = dont_overwrite_lista.split() 
     x = randrange(len(ordet)) 
     ord = ordet[x] 
     if ord.isalpha(): 
      return ord 
     else: 
      print('none') 


print(chooseword(readfile("file.txt"))) 

PS

這是罕見的代碼 「不服」)。記住計算機是愚蠢的,並且完全按照我們告訴他們要做的。

+0

哈哈我知道它應該服從就好,如果我知道更多如何編碼。但我是一個新手,不知道它被覆蓋。解釋一些和永無止境的循環肯定會響起一個鐘聲。 一些代碼很亂,主要是爲了理解我做了什麼,在物流工作的時候將會得到更好的解決。 我會嘗試你的固定代碼,並希望最好!非常感謝 – Karl