2014-04-11 2 views
1

엡실론 전환을 사용하여 비 결정적 유한 유한 자동화를 만들어야합니다. 저는 C#, 자바 스크립트 녀석입니다. 그러나 대학에서는 파이썬이 어떤 이유로 갈 수있는 유일한 방법이라고 생각합니다. 그래서 오늘 파이썬을 배웠지 만 분명히 충분하지 않습니다.Python 비 결정적 엡실론 authomaton : 객체가 반복 가능하지 않습니다.

어쨌든. 문제는 "automaton"기능입니다. 하나의 요소 (stanje1)와 오토 마톤이 읽어야하는 문자들의 배열 (inputArrays[0])과 트랜지션 함수를 정의하는 사전 (사전 키는 문자열 currentState,inputCharacter이고 값은 다음 상태의 배열)을 가진 초기 상태 목록으로 호출합니다.

첫 번째 반복은 잘 실행,하지만 난 재귀 적으로 다음 문자에 대한 엡실론 전환을 통해 내가 가진 모든 상태를 검사 할 때 오류 얻을 :

TypeError: 'NoneType' object is not iterable 

기계적으로 재귀가 상위 호출로 similarely 정의 된 모든 인수로 호출을 , 그러나 오류는 어떻게 든 그냥 뛰어 내린다.

여기에 link to my code이고, defines automaton 인 테스트 파일 (myScript.py < automaton.txt처럼 실행해야 함)입니다. 또한, 여기에 전체 오류 보고서는 다음과 같습니다

C:\Users\Jinx\Desktop\UTRLabos1>sim.py < test.txt 
['stanje1'] 
['st6'] 
Traceback (most recent call last): 
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 50, in <module> 
    print(automaton(['stanje1'], inputArrays[0], transitionFunction)) 
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 45, in automaton 
    if estates : other = automaton(estates, ir[1:], fn) 
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 37, in automaton 
    states += eNKA(s, ir[0], fn) 
TypeError: 'NoneType' object is not iterable 

답변

4

힌트가 충돌이 줄에 발생하는 경우 : eNKA 함수 내에서

states += eNKA(s, ir[0], fn) 

하지 깊은. 이 행의 내용이 반복 가능이 아닌 None이라고 의심 될 수 있습니다. ir은 그 가능성을 이전에 확인했기 때문에 None 일 수 없습니다. 따라서 eNKA의 반환 값이 None 인 경우가되어야하며 실제로는 states += None입니다.

실제로이 경우입니다. eNKA은 모든 가능한 경우 값이 return이 아니므로 기본값 None이 반환 될 수 있습니다.

따라서 eNKA의 모든 if 조건이 실패한 이유를 확인하고 적절하게 수정하거나 모든 조건이 실패 할 경우 더 적절한 것으로 반환하십시오.

+0

정말인가요? 그것은 iterable에 관한 것이고, 이것은 덧셈과 관련이 없습니다. 차라리 '없다'는 것이 'ir'일 것입니다. –

+0

효과가있었습니다. 내가 왜 그런 식으로 내 코드에 영향을 미칠지 모르겠지만. eNKA의 가치를 반복하지 않습니다. 감사! – Jinx

+2

'states'는 목록입니다. 'somelist + = x'는리스트를 확장하기 위해'x'를 반복해야합니다. (그게 네가하고 싶은 일인지 나는 잘 모르겠다.하지만 iteration은 어떻게 연관되어 있나.) – DSM

관련 문제