为什么我的Validation()函数不运行?

时间:2016-10-24 15:11:23

标签: python function validation

这是我编写的代码,用于尝试显示一个人是否能够投票,在考虑年龄和选举类型之后,但在我输入选举类型之后,它停止了。 有人可以帮忙吗? 这是我的代码:

def Validation():
if election == 'EU' or election == 'UK':
    if age < 110 and age > 18:
        print('You are eligable to vote in this election')
    else:
        print('You are not eligable to vote in this election')

    if election is 'Scottish' or election is'local':
        if age < 110 and age > 16:
            print('You are eligable to vote in this election')
        else:
            print('You are not eligable to vote in this election')

3 个答案:

答案 0 :(得分:2)

==代替is。另请注意,==应匹配每个字符才能成为真实(这有点不可思议,但只记得你),所以如果你有一个名为&#的选择34;的 OCAL&#34;并且你试图与&#34; l ocal&#34;进行比较,它不一样。

您的代码应如下所示:

def Validation():
    if election == 'EU' or election == 'UK':
        if age < 110 and age > 18:
            print('You are eligable to vote in this election')
        else:
            print('You are not eligable to vote in this election')

        if election == 'Scottish' or election == 'local':
            if age < 110 and age > 16:
                print('You are eligable to vote in this election')
            else:
                print('You are not eligable to vote in this election')

答案 1 :(得分:1)

除了@Fusseldieb写的内容之外,考虑将配置与验证功能分开。

规则可以这样表达:

rules = {
    'UK': {'min-age': 18, 'max-age': 110},
    'EU': {'min-age': 18, 'max-age': 110},
    'Scottish': {'min-age': 16, 'max-age': 110},
    'local': {'min-age': 16, 'max-age': 110},
}

通过这种方式,验证功能变得更短,与当前方法相比,如果规则集变大,则不需要进行任何更改。

def Validation(election):
    if election in rules:
        rule = rules[election]
        if age >= rule['min-age'] and age <= rule['max-age']:
            print('You are eligible to vote in this election')
        else:
            print('You are not eligible to vote in this election')
    else:
        print('No rules configured for this country')

答案 2 :(得分:0)

免责声明:以下不是我通常做的事情,也不是本网站上经常发生的事情。它到目前为止超出了问题范围,几乎可以归结为101或教程。

您的代码存在多个问题,通过发现错误并指向您,可以轻松修复这些问题。需要从头开始重新解决问题的整个方法。您尝试同时处理许多事情,这总是导致代码具有互锁问题。

让我们分解您的尝试。

  1. 询问用户他的年龄,该年龄必须是0到110之间的整数。
  2. 向他们询问他们所在的地区,这必须是一组有限的选择
  3. 告知他们他们的年龄是否允许他们在所在地区投票
  4. 更基本的是,你想要这样做:

    1. 向用户询问值
    2. 确保该值符合某个标准(例如&#34;是数字&#34; &#34;是x和y之间的数字&#34;
    3. 重复,直到用户输入合规值
    4. 这些步骤可以用伪代码表示:

      def input_value():
          while True:
              value = input('Please enter a value: ')
              if value == 'valid':
                  return value
      

      所以我们有一个无限循环,一直询问用户一个值,只有当值正常时我们才会返回它。

      要求一个整数,该函数可能如下所示:

      def input_int():
          while True:
              value = input('Please enter a number: ')
              if value.isdigit():
                  return int(value)
      

      要求一个属于某个范围的整数,如年龄值,我们可以使用相同的模式并使用input_int()函数:

      def input_int_in_range(min, max):
          while True:
              value = input_int()
              if value >= min and value <= max:
                  return value
              else:
                  print('Please input values between %i and %i.' % (min, max))
      

      注意else:分支在第一次错误输入后如何通知用户有效范围。

      现在假设我们有dict投票规则,如我的其他答案所示:

      regions = {
          'UK': {'min-age': 18, 'max-age': 110},
          'EU': {'min-age': 18, 'max-age': 110},
          'Scottish': {'min-age': 16, 'max-age': 110},
          'Local': {'min-age': 16, 'max-age': 110},
      }
      

      我们可以编写另一个函数,让用户通过键选择其中一个。该函数很好地遵循既定模式:

      def input_choose(dict):
          while True:
              value = input('Please input your choice: ')
              if value in dict:
                  return dict[value]
              else:
                  print('Valid choices are: %s'  % ', '.join(dict.keys()))
      

      现在我们已经准备好所有基本部件并将它们组合在一起:

      # main program
      while True:
          print("\nPlease enter your age.")
          age = input_int_in_range(0, 110)
      
          print("\nPlease enter the election you are voting for.")
          rule = input_choose(rules)
      
          if age >= rule['min-age'] and age <= rule['max-age']:
              print("\nYou are eligible to vote in this election.\n")
          else:
              print("\nYou are not eligible to vote in this election.\n")
      

      作为练习,您可以创建验证功能,但每个输入步骤设计的方式都是自我验证的,因此最终验证步骤并非真正必要。