Teshiklarni bo'sh joy bilan qanday o'zgartirish mumkin

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
new_s = ''
for i in s:
    if i not in punc_list:
        new_s += i
return new_s.lower()

Agar kirish bo'lsa

s = ("Hey! M'y nam;e i's")

Men chiqishni xohlayman:

s = ('hey  m y name e i s') 

Punkni bo'sh joy bilan almashtirishda muammolar mavjud

0
Bu uy vazifasi, yoki muntazam ifodalarni ishlata olasizmi? Bundan tashqari, faqat to'liq tinish belgisi yoki all maxsus belgilar?
qo'shib qo'ydi muallif tobias_k, manba
Kvadrat qavslarni unutdingizmi [] ?
qo'shib qo'ydi muallif JazZ, manba
else filialida bo'sh joy qo'shing.
qo'shib qo'ydi muallif DyZ, manba
Yon eslatma sifatida o'zingizning punct_list o'rniga string.punctuation dan foydalanishingizni tavsiya qilaman.
qo'shib qo'ydi muallif DyZ, manba
@tobias_k Ha bu uy vazifasi. Men barcha maxsus belgilarni o'ylayapman
qo'shib qo'ydi muallif Mar, manba
@DYZ ohh OK ishlaydi! rahmat!
qo'shib qo'ydi muallif Mar, manba

6 javoblar

Belgilar tinish belgisi bo'lsa, siz bo'sh joy qo'shishni unutgansiz. '' . Bundan tashqari, punc_list aslida ro'yxat bo'lishi shart emas; faqat bitta uzun mag'lubiyatni yaratishingiz mumkin va belgilarni yineleyebilir, yoki izohlarda qayd etilganidek, faqat string.punctuation dan foydalaning. Va qidirish tezligini oshirish uchun siz uni to'siq qilishingiz mumkin, lekin bu holatda, albatta, juda muhim emas:

punc_list = set('.;:!?/\\,#@$&)(\'"')  # or use string.punctuation

def no_punc(s):
    new_s = ''
    for i in s:
        if i not in punc_list:
            new_s += i
        else:
            new_s += ' '
    return new_s.lower()

Yoki biroz qisqartirilsin, uchinchi ifoda yordamida ... if ... boshqa ... :

def no_punc(s):
    new_s = ''
    for i in s:
        new_s += i if i not in punc_list else ' '
    return new_s.lower()

Yoki undan ham qisqa, str.join <// a>:

def no_punc(s):
    return ''.join(i if i not in punc_list else ' ' for i in s).lower()

Yoki hatto ham qisqa,

o'tilganlik sanasi kodi> :

import re
def no_punc(s):
    return re.sub("\W", " ", s).lower()
2
qo'shib qo'ydi

Uy vazifasi savol loops haqida bilishingizga yordam berishi kerakmi? Diktlarni o'rganish va tarjima qilish juda foydalidir.

t = str.maketrans(dict.fromkeys(punc_list, " "))
new_s = s.lower().translate(t)
1
qo'shib qo'ydi

str.translate dan foydalaning. punc_list ichidagi barcha belgilarni bo'shliqlarga aylantirish uchun.

>>> punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
>>> s = "Hey! M'y nam;e i's"
>>> s.translate({ord(p): " " for p in punc_list})
'Hey  M y nam e i s'

Siz har qanday punktuatsiya belgilarini ( ord funktsiyasidan foydalangan holda) bo'sh joyga keltiradigan dict tushunish yordamida tezda lug'at xaritalashini yaratishingiz mumkin.

1
qo'shib qo'ydi
Nima uchun faqatgina {ord (x): punc_list ning x ning punkti uchun )?
qo'shib qo'ydi muallif John La Rooy, manba
juda ham oddiy rahmat
qo'shib qo'ydi muallif Paul Rooney, manba

Kod faqatgina punc_list da bo'lmasa, uchun kodini qo'shishni istayman: kod shu tarzda ko'rinadi:

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
new_s = ''
for i in s:
    if i not in punc_list:
        new_s += i
    else:
        new_s += ' '

return new_s.lower()

Bularning barchasi shunday deydi: Belgilar tinish belgilarida bo'lmasa, uni yangi string ga qo'shing. Agar u punktuatsiya ro'yxatida bo'lsa, buning o'rniga yangi string ga bo'shliqni qo'shing.

0
qo'shib qo'ydi

Ushbu kodni ko'rib chiqaylik, 2 ko'chadan foydalanib:

punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
s = "Hey! M'y nam;e i's"
new_s = ''

for x in punc_list:
  for i in s:
    if i==x:
        s=s.replace(i,new_s)


print(s)
0
qo'shib qo'ydi

@DYZ kabi, maxsus belgilarni bo'shliqlar bilan almashtirilgan boshqa shartli so'zga ehtiyoj bor:

def func(s):
    punc_list = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","'","\""]
    new_s = ''
    for i in s:
        if i not in punc_list:
            new_s += i
        else:
            new_s += ' '
    return new_s.lower()

s = ("Hey! M'y nam;e i's")
new_s = func(s)
print (new_s)

Output would look like what you wanted: hey m y nam e i s

0
qo'shib qo'ydi
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming