2011-02-09 16 views
1

こんにちは私は、1と0の数のセットを入力するようにユーザーに求めているプログラムをPythonで書こうとしています。ゼロまたは奇数のゼロまたは全くゼロのゼロのいずれかである。ご協力いただきありがとうございます!!入力が偶数か奇数かを判断する

forstate = "start" 
curstate = "start" 
trans = "none" 
value = 0 


print "Former state....:", forstate 
print "Transition....:", trans 
print "Current state....", curstate 
    while curstate != "You hav and even number of zeros": 
     trans = raw_input("Input a 1 or a 0: ") 
     if trans == "0" and value <2: 
      value = value + 1 
      forstate = curstate 
     elif trans == "1" and value < 2: 
      value = value + 0 
      forstate = curstate 
     curstate = str(value) + " zeros" 
     if value >= 2: 
      curstate = "You have and even number of zeros" 
     print "former state ...:", forstate 
     print "Transition .....:", trans 
     print "Current state....", curstate 
+4

あなたはこれまでに何を得ていますか? –

+0

あなたはこれまで何を持っていますか? – OscarRyz

+0

Thirdtimes arm!あなたはこれまでに何を得ましたか? –

答えて

0

のように見えますか?

try: 
    inp = raw_input 
except NameError: 
    inp = input 

def getInt(msg): 
    while True: 
     try: 
      return int(inp(msg)) 
     except ValueError: 
      pass 

START, ODD, EVEN = range(3) 
state_next = [ODD, EVEN, ODD] 
state_str = ['no zeros yet', 'an odd number of zeros', 'an even number of zeros'] 

state = START 
while True: 
    num = getInt('Enter a number (-1 to exit)') 

    if num==-1: 
     break 
    elif num==0: 
     state = state_next[state] 

    print 'I have seen {0}.'.format(state_str[state]) 

編集:

try: 
    inp = raw_input 
except NameError: 
    inp = input 

START, ODD, EVEN = range(3) 
state_next = [ODD, EVEN, ODD] 
state_str = ['no zeros yet', 'an odd number of zeros', 'an even number of zeros'] 

def reduce_fn(state, ch): 
    return state_next[state] if ch=='0' else state 

state = reduce(reduce_fn, inp('Enter at own risk: '), START) 
print "I have seen " + state_str[state] 
+0

haha​​はい私は工学的クラスの有限状態マシンをしようとしています。ユーザは:01010100のような数字のストランドを入力し、その数字のリストに偶数または奇数の0が含まれている場合に出力してください。 –

+3

@リッチー:元の質問の*有用な情報*でした。 .. –

+0

sry manでもありがとう! –

0

これは宿題のように聞こえるかもしれませんが、面接の質問は悪くなりますが、これが始まります。

def homework(s): 
counter = 0 
if '0' in s: 
    for i in s: 
    if i == '0': 
     counter = counter + 1 
return counter 

あなたは宿題を呼び出し、それを数字の文字列を与えた場合、それは今0

homework('101110101') 

の数をあなたにお返しします

def odd_or_even_or_none(num): 
    if num == 0: 
    return 'This string contains no zeros' 
    if num % 2 == 0 
    return 'This string contains an even amount of zeros' 
    else: 
    return 'This string contains an odd amount of zeros' 

こっちこの部分を忘れてはいけませんあなたはその番号でodd_or_even_or_noneを呼び出す必要がある数がどれくらいあるか知っています

odd_or_even_or_none(23) 

そのソリューションは、有限状態マシンをやろうとしているように見えます。この

txt = input('Feed me numbers: ') 
counter = str(homework(txt)) 
print odd_or_even_or_none(counter) 
0
try: 
    inp = raw_input 
except NameError: 
    inp = input 

zeros = sum(ch=='0' for ch in inp('Can I take your order? ')) 

if not zeros: 
    print "none" 
elif zeros%2: 
    print "odd" 
else: 
    print "even" 
0

あなたの問題への簡単な解決策は、単に、適切なメッセージを印刷し、その後、ゼロをカウントすることです。 num_zeros = input_stream.count('0')

あなたが書き方を学ぶために有限状態マシンを構築しようとするなら、あなたは一般的なFSMを書くことを学び、それを使ってあなたの特定の問題を解決します。ここに私の試み - ゼロを数えるためのすべてのロジックは、状態とその遷移で符号化されていることに注意してください。

class FSMState(object): 
    def __init__(self, description): 
     self.transition = {} 
     self.description = description 
    def set_transitions(self, on_zero, on_one): 
     self.transition['0'] = on_zero 
     self.transition['1'] = on_one 

def run_machine(state, input_stream): 
    """Put the input_stream through the FSM given.""" 
    for x in input_stream: 
     state = state.transition[x] 
    return state 

# Create the states of the machine. 
NO_ZEROS = FSMState('No zeros') 
EVEN_ZEROS = FSMState('An even number of zeros') 
ODD_ZEROS = FSMState('An odd number of zeros') 

# Set up transitions for each state 
NO_ZEROS.set_transitions(ODD_ZEROS, NO_ZEROS) 
EVEN_ZEROS.set_transitions(ODD_ZEROS, EVEN_ZEROS) 
ODD_ZEROS.set_transitions(EVEN_ZEROS, ODD_ZEROS) 

result = run_machine(NO_ZEROS, '01011001010') 
print result.description 
関連する問題