首页 > 解决方案 > (Python)验证有效,但变量保存第一个输入,而不是更正的输入

问题描述

我们的教授让我们做一个数字系统转换器。我目前正在进行二进制到十进制的转换。我们不允许使用会自动转换为任何数字系统的方法。

def base2():
    validate_x = ('0','1')
    x = int(input('Allowed numbers are "0-1", Enter your whole number: '))
    y = str(x)
    val = set(y)
    s = {'0','1'}
    if s == val or val == {'0'} or val == {'1'}:
        pass
    else:
        base2()
    return y

验证按原样工作,但每当它输出答案时,它表明第一个输入用于计算而不是更正的输入。

输出是:

Allowed numbers are "0-1", Enter your whole number: 6
Allowed numbers are "0-1", Enter your whole number: 5
Allowed numbers are "0-1", Enter your whole number: 1
The decimal value of  6 . 0  is 6.0

标签: pythonvalidation

解决方案


您正在递归调用base2(),因此当输入正确时,您只需返回并返回并返回,直到您到达第一次调用base2(),然后将用户输入的号码返回给呼叫者(在本例中为 6)。更改您的代码,而不是递归调用base2(),而是在一个循环中while循环,直到您对输入感到满意:

def base2():
    validate_x = ('0','1')
    s = {'0','1'}
    x = int(input('Allowed numbers are "0-1", Enter your whole number: '))
    y = str(x)
    val = set(y)
    
    while not (s == val or val == {'0'} or val == {'1'}):
        x = int(input('Allowed numbers are "0-1", Enter your whole number: '))
        y = str(x)
        val = set(y)

    return y

推荐阅读