3

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

我有这个功能,必须检查

  1. 如果插入的值是数字
  2. 如果数字不大于 31(请参见下面的代码)

在调试过程中,我发现了这个我不明白的错误:

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

    7

    45

我再次被要求输入一个不同的数字。

我不明白为什么变量会在 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
4

1 回答 1

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循环。

于 2013-08-09T20:49:20.967 回答