(Python) 验证和输入适用于二进制,但不适用于其他基数系统

我是大学 IT 的一年级学生,我们的教授要求我们制作一个数字系统转换器。我们不允许使用任何会自动转换为数字系统的方法。


我使用此代码来验证二进制输入:


 def base2():

    s = {'0','1'}

    y = input('Allowed numbers are "0-1", Enter your whole number: ')

    val = set(y)

    

    while not (s == val or val == {'0'} or val == {'1'}):

        y = input('Allowed numbers are "0-1", Enter your whole number: ')

        val = set(y)

    return y

对于 base-2 以上的其他数字系统,我只是添加了缺少的验证。


例如在 base-3 中:


def base3():

    s = {'0','1','2'}

    y = input('Allowed numbers are "0-2", Enter your whole number: ')

    val = set(y)

    

    while not (s == val or val == {'0'} or val == {'1'} or val == {'2'}):

        y = input('Allowed numbers are "0-2", Enter your whole number: ')

        val = set(y)

    return y

我只是添加到每个验证的结尾。但出于某种原因,它要求验证所有数字或允许的数字之一的重复。


输入输出:


Allowed numbers are "0-2", Enter your whole number: 20

Allowed numbers are "0-2", Enter your whole number: 111

['1', '1', '1']

The decimal value of    " 111 "   base- 3  is 13


Allowed numbers are "0-2", Enter your whole number: 211

Allowed numbers are "0-2", Enter your whole number: 210

['2', '1', '0']

The decimal value of    " 210 "   base- 3  is 21

将不胜感激任何帮助 <3


喵喵时光机
浏览 67回答 1
1回答

慕盖茨4494581

使用以下条件:while&nbsp;any(x&nbsp;not&nbsp;in&nbsp;s&nbsp;for&nbsp;x&nbsp;in&nbsp;val):代替:while&nbsp;not&nbsp;(s&nbsp;==&nbsp;val&nbsp;or&nbsp;val&nbsp;==&nbsp;{'0'}&nbsp;or&nbsp;val&nbsp;==&nbsp;{'1'}&nbsp;or&nbsp;val&nbsp;==&nbsp;{'2'})当您转换为集合时,我们无法保证它的顺序,因为集合本身没有排序。因此,检查s == val可能并不总是如您所想的那样有效。此外,用户可以输入任意数字组合。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python