变量在循环时改变值

时间:2013-08-09 20:31:59

标签: python while-loop

我昨天开始使用python进行编程,所以我是一个新手!

我有这个功能,必须检查

  1. 如果插入的值是数字
  2. 如果数字不大于31(见下面的代码)
  3. 在调试过程中,我发现了这个我不明白的错误:

    1. 我故意选择大于31的数字,例如45
    2. 它再次提示我,我选择了一个正确的数字,例如7
    3. 在代码中,我要求两次打印voto变量(在评论中我称之为'POINT A'和'POINT B')
    4. 我得到的输出中的
    5. 7

      45

    6. 我又被要求输入一个不同的号码。

      我不明白为什么变量在while循环开始后就改变了它的值。

      请用非常简单的词语向我解释一下吗? (< - 请,请记住我是初学者!:D)

      提前谢谢!

      def controlla_voto(voto_lett):
          flag=1
          while flag:
              for y in voto_lett:
                  if (ord(y) in range(48,58))==0:
                      voto_lett=raw_input("Invalid charachters, try again: ")
                      flag=1
                      break
                  else: flag=0
          voto=int(voto_lett)
          print voto   # POINT A
          while (voto in range(32))==0:
             print voto #POINT B
             voto_lett=raw_input("Invalid number, try again: ")
             controlla_voto(voto_lett)
          return voto
      

1 个答案:

答案 0 :(得分:2)

这很完美!你忘记了递归电话的回报。

def controlla_voto(voto_lett):
flag=1
while flag:
    for y in voto_lett:
        if (ord(y) in range(48,58))==0:
            voto_lett=raw_input("Invalid charachters, try again: ")
            flag=1
            break
        else: flag=0
voto=int(voto_lett)
print voto   # POINT A
while (voto in range(32))==0:
    print voto #POINT B
    voto_lett=raw_input("Invalid number, try again: ")
    return controlla_voto(voto_lett)
return voto

另一种解决方案是:

voto = controlla_voto(voto_lett)

但是需要一些东西来摆脱while循环。