首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Python)验证和输入适用于二进制,但不适用于其他基数系统

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

Stack Overflow用户
提问于 2020-06-28 16:45:35
回答 1查看 27关注 0票数 0

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

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

代码语言:javascript
复制
 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

对于基数2以上的另一个数字系统,我只是添加了缺少的验证。

以base-3为例:

代码语言:javascript
复制
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

我只是在每个验证的末尾添加了一些。但由于某些原因,它需要所有数字或允许的数字之一的重复才能进行验证。

输入/输出:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-28 17:02:44

使用以下条件:

代码语言:javascript
复制
while any(x not in s for x in val):

而不是:

代码语言:javascript
复制
while not (s == val or val == {'0'} or val == {'1'} or val == {'2'})

当您转换为set时,我们不能保证它的顺序,因为set本身是无序的。因此,检查s == val可能并不总是如您所想的那样工作。此外,用户可以输入数字的任意组合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62620228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档