【问题标题】:For loop appending wrong ValueFor循环附加错误的值
【发布时间】:2021-04-18 20:34:29
【问题描述】:

嘿,伙计们,我在这里遗漏了一些东西,如果两个值匹配,我想在我的答案中附加“a”和“b” 如果他们不这样做,但它总是附加'b'

所以单词前的数字应该等于单词的长度

import re

def is_a_valid_message(message):
answers = []
x = re.findall(r"([0-9]+)([a-zA-Z]+)", message)    
for k  in x:
    y = len(k[1])
    z = k[0]
    if y == z:
        answers.append('a')
        print(k[0], k[1])   
    else:
        answers.append('b')
        print(k[0], len(k[1]))   
print(answers)

第一个测试字符串是“3hey5hello2hi”

哪个输出

3 3
5 5
2 2
['b', 'b', 'b']

【问题讨论】:

  • 是否有可能将字符串“z”与整数“y”进行比较?这就是为什么 if 条件总是错误的原因?
  • "3" == 3 为假
  • 啊,伙计,我现在看到了,我想我假设当我用表达式抓取数字时,它是一个 int

标签: python-3.x loops if-statement


【解决方案1】:

试试这个。您需要将字符串与字符串进行比较。

import re

def is_a_valid_message(message):
    answers = []
    x = re.findall(r"([0-9]+)([a-zA-Z]+)", message)    
    for k  in x:
        y = str(len(k[1]))
        z = k[0]
        if y == z:
            answers.append('a')
            print(k[0], k[1])   
        else:
            answers.append('b')
            print(k[0], len(k[1]))   
    print(answers)

【讨论】:

  • 这无疑让我离我想去的地方更近了,谢谢!还有一些其他的事情要改变。为什么比较两个明显相同的值没有附加到列表中?
  • 好吧,k[0] 返回“3”,它是一个包含字符“3”的文本。 len(k[1]) 返回值为 3 的整数。Python 无法将文本与数字进行比较。您需要将数字转换为文本,然后将文本与文本进行比较。或将文本转换为数字并将数字与数字进行比较。
  • 知道了,谢谢,我猜我从来没有这样想过,因为它们在输出中看起来是一样的。这对我在其他方面也有很大帮助,谢谢
猜你喜欢
  • 2021-10-15
  • 2021-04-07
  • 2016-07-17
  • 2021-06-24
  • 2017-12-27
  • 2016-01-31
  • 2019-06-14
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多