鱼C论坛

 找回密码
 立即注册
查看: 1854|回复: 18

[已解决]python

[复制链接]
发表于 2021-9-3 14:07:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
假设 s = '李晓明城'
输入 李晓明 或者 明城 总之如果输入的是这个s的一部分,就把s打印出来,
我不知道该咋办。


我知道我写的是错误的。
while True:
    simi = input('请输入名字的一部分:')
    for i in ls1:#ls1是姓名组成的列表
        if simi in i:
            print(i)
我就是想找相似的名字
最佳答案
2021-9-3 14:31:10
  1. s = '李晓明城'
  2. k = True
  3. simi = input('请输入名字的一部分:')
  4. for i in simi:
  5.     if i not in s:
  6.         k = False
  7. if k:
  8.     print(s)
复制代码

输入的字符,都是s的一部分就会打印s,出现不是s的部分就不会打印s
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-3 14:16:47 | 显示全部楼层
本帖最后由 louxinghao 于 2021-9-3 14:18 编辑

可以直接用 in 来判断
  1. s = '李晓明城'

  2. while True:
  3.     simi = input('请输入名字的一部分:')
  4.     if simi in s:
  5.         print(s)
  6.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 14:18:11 | 显示全部楼层
这个逻辑没啥问题
  1. s = '李晓明城'
  2. ls1 = [s]
  3. while True:
  4.     simi = input('请输入名字的一部分:')
  5.     for i in ls1:#ls1是姓名组成的列表
  6.         if simi in i:
  7.             print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 14:21:19 | 显示全部楼层
逃兵 发表于 2021-9-3 14:18
这个逻辑没啥问题

s = '李晓明城'
>>> if '李城' in s:
        print(True)
else:
        print(False)

       
False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 14:21:52 | 显示全部楼层
赵从文芜湖123 发表于 2021-9-3 14:21
s = '李晓明城'
>>> if '李城' in s:
        print(True)

名字的部分可能不会挨着
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 14:26:49 | 显示全部楼层
  1. s = '李晓明城'

  2. while True:
  3.     simi = input('请输入名字的一部分:')
  4.     for i in simi:
  5.         print(i)
  6.         if i in s:
  7.             print(s)
复制代码

输入只要有一个字在s里就打印s
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 14:31:10 | 显示全部楼层    本楼为最佳答案   
  1. s = '李晓明城'
  2. k = True
  3. simi = input('请输入名字的一部分:')
  4. for i in simi:
  5.     if i not in s:
  6.         k = False
  7. if k:
  8.     print(s)
复制代码

输入的字符,都是s的一部分就会打印s,出现不是s的部分就不会打印s
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 14:32:42 | 显示全部楼层
灰晨 发表于 2021-9-3 14:26
输入只要有一个字在s里就打印s

可是我感觉我想的是有几个字,在s中,才打印出来。
因为我在核对名单,有些名字,名单中没有,我需要一个一个去找。核对的名单中,比如李红珠(造的),名单中就没有,只有李无珠和李有珠(造的),所以我想的是,输入李红或者李珠或者红珠来搜索。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-9-3 14:37:58 | 显示全部楼层
灰晨 发表于 2021-9-3 14:31
输入的字符,都是s的一部分就会打印s,出现不是s的部分就不会打印s

wow  好像 很有道理哎
我去试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 14:44:09 | 显示全部楼层
本帖最后由 灰晨 于 2021-9-3 14:46 编辑
赵从文芜湖123 发表于 2021-9-3 14:32
可是我感觉我想的是有几个字,在s中,才打印出来。
因为我在核对名单,有些名字,名单中没有,我需要一 ...

  1. s = ['李无珠','李有珠','红猪']
  2. x = input('输入名字的一部分')

  3. for i in s:
  4.     for j in x:
  5.         if j in i:
  6.             print(i)
  7.             break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 14:53:55 | 显示全部楼层
  1. s = '李晓明城'
  2. ls1 = [s]
  3. while True:
  4.     simi = input('请输入名字的一部分:')
  5.     for i in ls1:#ls1是姓名组成的列表
  6.         if set(simi) <= set(i):
  7.             print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 15:21:13 | 显示全部楼层
names = ['17','18','19','20']
ls = []
ls1 = []
for name in names:
    fi = open(name + '级学生汇总.csv','r')
    for line in fi:
        line = line.replace('\n','')
        ls.append(line.split(','))#把csv转化成列表
for i in ls:
    ls1.append(i[1])#所含全部的学生姓名.
while True:
    ls2 = []
    flag = False
    simi = input('请输入名字的一部分:')
    for i in ls1:
        n = 0
        for k in simi:
            if k in i :
                n = n + 1
            if n == len(simi):
                ls2.append(i)
            
    if len(ls2) == 0:
        print('没有找到相似的名字.')
    if len(ls2) != 0:
        print('相似的名字为{}'.format(ls2))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 15:21:43 | 显示全部楼层
费了老鼻子劲了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 15:22:41 | 显示全部楼层
赵从文芜湖123 发表于 2021-9-3 15:21
names = ['17','18','19','20']
ls = []
ls1 = []

这是我自己弄得,我感觉比较好的解决了这个问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 15:23:50 | 显示全部楼层
可以考虑一下使用正则表达式
  1. import re
  2. re.match(pattern, string)  # pattern是匹配的正则表达式,string是要匹配的字符串
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-3 15:28:28 | 显示全部楼层
洛阳城 发表于 2021-9-3 15:23
可以考虑一下使用正则表达式

没学过,哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 23:31:54 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-3 23:32 编辑
Python 簡單就是美,為何複雜化呢?
2行代碼
  1. s = '李晓明城'
  2. if all([bool(i in s) for i in input('请输入名字的一部分:')]): print(s)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-9-8 14:51:52 | 显示全部楼层

这是哪方面?因为我是初学的,不大懂。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-8 16:07:18 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-8 16:21 编辑
赵从文芜湖123 发表于 2021-9-8 14:51
这是哪方面?因为我是初学的,不大懂。


這是有關判斷符與布林值運用方法(in,all(),bool())
  1. # bool() 返回布林值
  2. print(bool(1 == 3)) # False

  3. # in 如字面上意思,判斷元素是否在數組裡,列表裡或字符串裡等等
  4. arr = [1, 2, 3, 4]
  5. print(3 in arr) # True

  6. # all() 判斷數組裡/列表裡全部元素是否為 真(True),否則返回 假(False)
  7. res = [True, True, True, False, True]
  8. print(all(res)) # False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 22:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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