鱼C论坛

 找回密码
 立即注册
查看: 3270|回复: 7

[已解决]小小智商题

[复制链接]
发表于 2023-8-20 21:37:28 | 显示全部楼层 |阅读模式
10鱼币
#在字符串中寻找斐波那契数列,若有一数字不满足此条件,则跳过这一数字,此数字不输出(用正则表达式求解)
斐波那契数列为[1,1,2,3,5,8,13,......]
目标字符串为"21123hsdas34211235111111",则输出结果是"1123112351111"
目标字符串为"111" ,则输出结果是"11"
有哪位勇士能解出这道题,悬赏悬赏



最佳答案
2023-8-20 21:37:29
在上面回答基础上改了下

  1. import re

  2. def generate_fibonacci(n):
  3.     fibonacci = [1, 1]
  4.     while len(fibonacci) < n:
  5.         fibonacci.append(fibonacci[-1] + fibonacci[-2])
  6.     return fibonacci

  7. def find_fibonacci_numbers(s):
  8.     fibonacci_numbers = generate_fibonacci(len(s))
  9.     pattern ='('+'('.join(map(str, fibonacci_numbers))+')?'*(len(s)-1)+')\d?'
  10.     result = [each[0] for each in re.findall(pattern, s)]
  11.     return ''.join(result)

  12. # 示例1
  13. target_string1 = "21123hsdas34211235111111"
  14. output1 = find_fibonacci_numbers(target_string1)
  15. print(output1) #输出值为1123112351111

  16. # 示例2
  17. target_string2 = "111"
  18. output2 = find_fibonacci_numbers(target_string2)
  19. print(output2) #输出值为11
复制代码

最佳答案

查看完整内容

在上面回答基础上改了下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-20 21:37:29 | 显示全部楼层    本楼为最佳答案   
在上面回答基础上改了下

  1. import re

  2. def generate_fibonacci(n):
  3.     fibonacci = [1, 1]
  4.     while len(fibonacci) < n:
  5.         fibonacci.append(fibonacci[-1] + fibonacci[-2])
  6.     return fibonacci

  7. def find_fibonacci_numbers(s):
  8.     fibonacci_numbers = generate_fibonacci(len(s))
  9.     pattern ='('+'('.join(map(str, fibonacci_numbers))+')?'*(len(s)-1)+')\d?'
  10.     result = [each[0] for each in re.findall(pattern, s)]
  11.     return ''.join(result)

  12. # 示例1
  13. target_string1 = "21123hsdas34211235111111"
  14. output1 = find_fibonacci_numbers(target_string1)
  15. print(output1) #输出值为1123112351111

  16. # 示例2
  17. target_string2 = "111"
  18. output2 = find_fibonacci_numbers(target_string2)
  19. print(output2) #输出值为11
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-20 21:37:49 | 显示全部楼层
import re

def find_fibonacci_numbers(string):
    pattern = r"(?=(\d{1,2}))(?=(\d{1,2}))"
    matches = re.findall(pattern, string)
    result = ""
    for match in matches:
        if int(match[0]) + int(match[1]) == int(match[2]):
            result += match[0] + match[1]
    return result

target_string = "21123hsdas34211235111111"
output = find_fibonacci_numbers(target_string)
print(output)  # 输出结果是"1123112351111"

target_string = "111"
output = find_fibonacci_numbers(target_string)
print(output)  # 输出结果是"11"
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-20 21:38:16 | 显示全部楼层
非常感谢您提供的智商题!以下是使用正则表达式在字符串中寻找满足斐波那契数列条件的数字的示例代码:

  1. import re

  2. def generate_fibonacci(n):
  3.     fibonacci = [1, 1]
  4.     while len(fibonacci) < n:
  5.         fibonacci.append(fibonacci[-1] + fibonacci[-2])
  6.     return fibonacci

  7. def find_fibonacci_numbers(s):
  8.     fibonacci_numbers = generate_fibonacci(len(s))
  9.     pattern = '|'.join(map(str, fibonacci_numbers))
  10.     result = re.findall(pattern, s)
  11.     return ''.join(result)

  12. # 示例1
  13. target_string1 = "21123hsdas34211235111111"
  14. output1 = find_fibonacci_numbers(target_string1)
  15. print(output1)  # 输出:1123112351111

  16. # 示例2
  17. target_string2 = "111"
  18. output2 = find_fibonacci_numbers(target_string2)
  19. print(output2)  # 输出:11
复制代码


在上面的代码中,我们首先定义了一个generate_fibonacci()函数来生成斐波那契数列。然后,在find_fibonacci_numbers()函数中,我们根据目标字符串的长度生成相应长度的斐波那契数列,并将其转换为正则表达式的模式。最后,我们使用re.findall()函数找到目标字符串中满足斐波那契数列条件的数字,并将其连接成一个结果字符串。

希望以上代码能够满足您的需求!如果还有任何问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-21 12:55:08 | 显示全部楼层
有一个1不满足此条件
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-21 17:14:03 | 显示全部楼层
用了个复杂的方法,不过勉强能用
  1. def fib():
  2.     a,b=0,1
  3.     while True:
  4.         yield a
  5.         a,b=b,a+b



  6. list1 = []
  7. for i in fib():
  8.     list1.append(i)
  9.     if len(list1)==100:
  10.         break
  11. w='01235wer0112365601'
  12. def check(string):
  13.     list_inner=[]
  14.     for i in  string:
  15.         try:
  16.             list_inner.append(int(i))
  17.         except:
  18.             pass
  19.     return list_inner
  20. number=0
  21. n=0
  22. w=check(w)
  23. list_finally=[]
  24. while True:
  25.     if w[number]==list1[n]:
  26.         list_finally.append(w[number])
  27.         number+=1
  28.         n+=1
  29.     else:
  30.         number+=1
  31.         n=0
  32.     if number==len(w):
  33.         break
  34. print(list_finally)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-21 17:15:39 | 显示全部楼层
好吧 不是正则表达式
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-28 09:41:04 | 显示全部楼层
VPython999 发表于 2023-8-21 13:51
在上面回答基础上改了下

这运行显示结果是没错的,是不是有更简单的解决方法啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 04:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表