我正在编写一个包含字符串的代码,然后将其拆分为字符,然后根据列表长度执行某些操作。问题是我不知道怎么写:
如果长度(以字符为单位)= 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 +3n
为n
,是介于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都不是。
答案 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
。
为此,您可以通过以下方式思考问题:
因此,既然您已经找到了如何对这些数字进行“分类”,那么我们所缺少的是数学运算符,该运算符可以为您提供A除以B后的余数。
该数学运算符称为modulo
(more info here)。在python中,我们使用的符号是%
。
例如13 % 3 = 1
和81 % 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')