如果从数字到无穷大

时间:2018-12-22 15:12:22

标签: python

我正在编写一个包含字符串的代码,然后将其拆分为字符,然后根据列表长度执行某些操作。问题是我不知道怎么写:

如果长度(以字符为单位)= 1、4、7、10 ...(最大为'infinity'),则执行x代码

如果长度(以字符为单位)= 2、5、8、11 ...(最大为“无穷大”),则执行y代码

如果长度(以字符为单位)= 3、6、9、12 ...(最大为'infinity'),则执行x代码

我对无穷大的意思是无穷大或足够大的数字以至于没有人会写

我使用python已经有一段时间了,我了解循环/ if语句的工作原理,但是我从来不需要提供这样的条件,条件本身包含一定范围的特定数字,直至无穷大。一种解决方案是写三个包含很多数字的列表,但我想知道这样做是否更轻松,更省力。

decoded是分配给输入的变量(在代码的后面) 对于第一个语句,其数学表达式为1 + 3n,对于第二个语句,2 +3n,对于第三条语句,3 +3nn,是介于0和无穷大

decodedl = list(decoded)
if len(decodel) == 1 #rest of the stament here
    #execute x chunk of code
if len(decodel) == 2 #rest of the stament here
    #execute y chunk of code
if len(decodel) == 3 #rest of the stament here
    #execute z chunk of code

预期结果如下:

如果我输入例如:“你好,你好吗”,那么代码应该执行代码块y,因为生成的列表的长度为17:但是现在,它不会像长度那样做列表中的1、2或3都不是。

4 个答案:

答案 0 :(得分:4)

这是要解决的逻辑难题。无需检查所有数字的隶属关系,只需观察您所说的模式(1 + 3n,2 + 3n和3+ 3n)并从中建立逻辑即可。被3整除的数字的余数为0。

if decodel: #make sure you eliminate empty string case
    if len(decodel)%3 == 1: #1 + 3n
        pass
    elif len(decodel)%3 == 2: #2 + 3n
        pass
    else: #3n
        pass

答案 1 :(得分:2)

要获得请求的行为,可以对参数3使用取模运算符(%)。这将尽可能多地从中删除数字3,并在变为负数之前停止。剩下的总是第一组为1,第二组为2,最后一组为0。因此在代码中:

if len(decodel)%3 == 1:
    #The length of decodel is either 1, 4, 7, 10.....
elif len(decodel)%3 == 2:
    #The length of decodel is either  2, 5, 8, 11... 
elif len(decodel)%3 == 0:
    #The length of decodel is either 3, 6, 9, 12...

答案 2 :(得分:2)

正如您所说,您需要的是一个数学表达式,在第一种情况下匹配1 + 3n,在第二种情况下匹配2 + 3n,在最后一种情况下匹配3 + 3n

为此,您可以通过以下方式思考问题:

  1. 第一组数字将由除以3后的余数为1(例如1、4、7、10 ...)的所有数字组成
  2. 第二组数字将由除以3后的余数为2(例如2、5、8、11 ...)的所有数字组成
  3. 第三组数字将由除以3后的余数为0(例如3、6、9、12 ...)的所有数字组成

因此,既然您已经找到了如何对这些数字进行“分类”,那么我们所缺少的是数学运算符,该运算符可以为您提供A除以B后的余数。

该数学运算符称为modulo (more info here)。在python中,我们使用的符号是%

例如13 % 3 = 181 % 3 = 0

总而言之,您可以采取以下措施解决问题:

if len(decodel) % 3 == 1:
    #Numbers with remainder 1 when dividing by 3 (i.e. 1, 4, 7...)
elif len(decodel) % 3 == 2:
    #Numbers with remainder 2 when dividing by 3 (i.e. 2, 5, 8...)
elif len(decodel) % 3 == 0:
    #Numbers that have no remainder when dividing by 3 (i.e. 3, 6, 9...)

作为一个旁注,您在编程时不需要知道这一点,但是在离散数学"congruence class modulo n"中,我们在这里找到的内容被称为,在我们的例子中,这是3个可能的同余类模3 < / em>:[0][1][2]

答案 3 :(得分:1)

如果要删除非字母字符,这将很有用。

此外,我们不必在每个if检查中都计算余数!

        struct TaskElement
    {
        int id;
        std::function<void()> func;

        void operator()()
        {
            func();
        }
    };

    int main()
    {

        MyMath* myMathElement = new MyMath();

        myMathElement->Print_1();

        Queue<TaskElement> myQueue;


        TaskElement t1;
        t1.id = 1;
        t1.func = myMathElement->Print_1;

        TaskElement t2;
        t2.id = 2;
        t2.func = &myMathElement->Print_2;


        myQueue.push(t1);     Error !!! &': illegal operation on bound member function expression
        myQueue.push(t2);     Error !!! &': illegal operation on bound member function expression

        auto rec1 = myQueue.pop();

        rec1();



        std::cin.get();
    }

输出:

import re
a= 'how good is this?'

a = re.sub("[^a-zA-Z ]","", a)
print(a)

#compute the remainder
rem=len(a)%3

if rem == 1: 
    print('2 + 3n')
elif rem == 2: 
    print('2 + 3n')
else: 
    print('3n')