определение, является ли ввод четными или нечетными числами

1
Здравствуйте, я пытаюсь написать программу в python, которая просит пользователя ввести набор чисел из 1 и 0, и я хочу, чтобы программа сообщила мне, есть ли у меня и даже количество нулей или нечетное число нулей или вообще нет нуля. Спасибо за вашу помощь!
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
    Что у тебя до сих пор?
Показать ещё 7 комментариев
Теги:

4 ответа

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])

Edit:

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
    ха-ха, я пытаюсь создать конечный автомат для своего инженерного класса, и это прекрасно работает, но мой учитель хочет, чтобы пользователь ввел цепочку чисел, такую как: 01010100, и затем вывел, если этот список чисел имеет четное или странные нули в нем.
  • 3
    @Richie: знаешь, это могло бы быть полезной информацией в первоначальном вопросе ...
Показать ещё 1 комментарий
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
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

Это звучит как домашнее задание или, что еще хуже, вопросы интервью, но это поможет вам начать.

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

не забывайте эту часть здесь

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'

если вы вызываете домашнее задание и даете ему строку чисел, он вернет вам число 0

homework('101110101')

теперь, когда вы знаете, сколько 0s вам нужно вызвать 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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню