Python 确定输入是偶数还是奇数

Python 确定输入是偶数还是奇数,python,Python,您好,我正在尝试用python编写一个程序,要求用户输入一组1和0的数字,我希望程序告诉我是否有偶数个零或奇数个零或根本没有零。谢谢你的帮助 forstate = "start" curstate = "start" trans = "none" value = 0 print "Former state....:", forstate print "Transition....:", trans print "Current state....", curstate while c

您好,我正在尝试用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
forstate=“开始”
curstate=“开始”
trans=“无”
值=0
打印“前州…”,forstate
打印“转换…”,trans
打印“当前状态…”,光标状态
当你草草写的时候!=“您有偶数个零”:
trans=原始输入(“输入a 1或a 0:”)
如果trans==“0”且值=2:
curstate=“您有偶数个零”
打印“前州…”,forstate
打印“转换…”,trans
打印“当前状态…”,光标状态

听起来像是家庭作业,或者更糟的是面试问题,但这会让你开始

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')
现在,您已经知道需要使用该号码调用多少个0(奇数、偶数或零)

odd_or_even_or_none(23)
所以解决方案是这样的

txt = input('Feed me numbers:  ')
counter = str( homework(txt) )
print odd_or_even_or_none(counter)

看起来你想做一个有限状态机

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]

解决问题的简单方法就是数零,然后打印一条合适的消息
num\u zeros=input\u 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

到目前为止你有什么?第三次伤害!到目前为止,你得到了什么?**到目前为止,这是我得到的,但只有当用户一次输入一个数字时,这才有效。我想在这样的用户可以输入大量的数字。此外,这只适用于两个零,我希望它适用于并限定零的数量。forstate=“start”curstate=“start”trans=“none”value=0 print“前状态…”,forstate print“转换…”,trans print“当前状态…”,curstate@Richie点击“编辑”链接在你原来的问题的正下方,将代码放在那里。哈哈,是的,我正试图为我的工程课做一个有限状态机,这很好,但我的老师希望用户输入一组数字,如:01010100,然后如果该数字列表中有偶数或奇数零,则输出。@Richie:y'know,这可能是原始问题中有用的信息。。。
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