Pytanie: Napisz funkcję Pythona, która akceptuje ciąg i oblicza liczbę wielkich liter i małych liter. Przykładowy ciąg: "Witaj Mr. Rogers, jak się masz w ten wtorek?" Oczekiwane wyjście: Liczba wielkich liter: 4 Liczba małych liter: 33

Funkcjonować:

def up_low(s):
  for a in s:
    u = u.count(a.isupper())
    l = l.count(a.islowwer())
  print(u, l)

Dlaczego ten nie działa?

2
a81884855 28 czerwiec 2017, 07:16

7 odpowiedzi

Najlepsza odpowiedź

Możesz użyć kompensacji listy i funkcji sum, aby uzyskać całkowitą liczbę wielkich i małych liter.

def up_low(s):      
    u = sum(1 for i in s if i.isupper())
    l = sum(1 for i in s if i.islower())
    print( "No. of Upper case characters : %s,No. of Lower case characters : %s" % (u,l))

up_low("Hello Mr. Rogers, how are you this fine Tuesday?")

Wyjście: Liczba wielkich liter: 4, nie. małych liter: 33

6
Bharath 28 czerwiec 2017, 05:50
def up_low(s):
    u, l = [], []
    for a in s:
        if a.isupper():
            u.append(a)
        else:
            l.append(a)
    print(len(u), len(l))
-1
Rahul 28 czerwiec 2017, 04:23

Trochę późno na imprezę, ale ze względu na kompletność:

import string

def up_low(s):
    return (sum(map(s.count, string.ascii_uppercase)),
            sum(map(s.count, string.ascii_lowercase)))

I przetestować:

u, l = up_low('Hello Mr. Rogers, how are you this fine Tuesday?')
print("No. of Upper case characters : {}\nNo. of Lower case Characters : {}".format(u, l))

Co daje:

No. of Upper case characters : 4
No. of Lower case Characters : 33

Ręczna pętla i liczba jest prawdopodobnie szybsza, tho.

0
zwer 28 czerwiec 2017, 05:03

Jeśli ludzie publikują kod ...

def up_low(s):
    up = filter(str.isupper, s)
    low = filter(str.islower, s)
    return len(up), len(low)

W Pythonie 3 każdy filtr musi zostać przekonwertowany na listę lub rzucony do wyrażenia sum(1 for _ in ...):

def up_low(s):
    counter = lambda f: sum(1 for c in s if f(c))
    return counter(str.upper), counter(str.lower)
1
Jared Goguen 28 czerwiec 2017, 04:47

Problem

Dlaczego ten nie działa?

Wraz z posiadaniem błędów składniowych i błędy w czasie wykonywania Logika kodu jest dość sposobu wyłączenia. Nie jesteś rzeczywisty, co pytasz o pytanie. Wydaje się, że próbujesz policzyć liczbę wielkich liter w jednym charakterze. To nieprawidłowe.

Spójrzmy na pytanie, aby poprawnie wdrożyć:

Napisz funkcję Python , która akceptuje ciąg i oblicza liczbę wielkich liter i małych liter . Przykładowy ciąg: 'Hello Mr. Rogers, how are you this fine Tuesday?' Oczekiwane wyjście: Liczba wielkich liter: 4 Liczba małych liter: 33.

OK, więc mamy jasną definicję naszego problemu. Biorąc pod uwagę pojedynczy łańcuch, policz liczbę małych liter, które zawiera ciąg, a wielkie litery, które zawiera ciąg. Zacznijmy pisać naszą funkcję.

Najpierw powinniśmy zdefiniować funkcję:

def count_upper_and_lower(string):

Wiem, że będziemy potrzebować dwóch zmiennych; W jaki sposób? Ponieważ potrzebujemy jednego, aby policzyć wielkie litery, a jeden do policzenia małych liter. Więc zainicjujmy te:

def count_upper_lower(string):
    lowercase_letter_count = 0
    uppercase_letter_count = 0

Co teraz potrzebujemy? Cóż, problem mówi do policz każdej litery w ciągu . Brzmi to tak, jak musimy iterować na każdej postaci w ciągu. Powinniśmy więc użyć pętli for:

def count_upper_lower(string):
    lowercase_letter_count = 0
    uppercase_letter_count = 0

    for letter in string:

OK, więc jaką logikę potrzebujemy w naszej pętli? Cóż, musimy najpierw sprawdzić, czy litera jest wielką literą. Jeśli tak, musimy zwiększyć uppercase_letter_count. Jeśli nie, przetestujemy, jeśli postać jest małą literą. Jeśli tak, przykręcimy lowercase_letter_count. W przeciwnym razie nic nie zrobimy. Oto, jak wyglądałoby w Kodeksie:

if letter.isupper():
    uppercase_letter_count += 1
elif letter.islower():
    lowercase_letter_count += 1

Dodajmy to do naszego for pętla:

def count_upper_lower(string):
    lowercase_letter_count = 0
    uppercase_letter_count = 0

    for letter in string:
        if letter.isupper():
            uppercase_letter_count += 1
        elif letter.islower():
            lowercase_letter_count += 1

I zostały zrobione. To wszystko, co pozostało, to wydrukować wartości na końcu funkcji:

def count_upper_lower(string):
    lowercase_letter_count = 0
    uppercase_letter_count = 0

    for letter in string:
        if letter.isupper():
            uppercase_letter_count += 1
        elif letter.islower():
            lowercase_letter_count += 1

    print uppercase_letter_count, lowercase_letter_count

Próbny

def count_upper_lower(string):
    lowercase_letter_count = 0
    uppercase_letter_count = 0

    for letter in string:
        if letter.isupper():
            uppercase_letter_count += 1
        elif letter.islower():
            lowercase_letter_count += 1

    print uppercase_letter_count, lowercase_letter_count


count_upper_lower("Hello Mr. Rogers, how are you this fine Tuesday?")
# Output: 4 33
count_upper_lower("The FAT Cat Moaned AlL day!")
# Output: 8 13
1
Christian Dean 28 czerwiec 2017, 04:41

Rozumiesz niewłaściwą funkcję liczenia, liczbę, przede wszystkim, jest funkcją łańcuchową, a jak parametr wziąć ciąg, zamiast tego robić, możesz po prostu zrobić:

def up_low(string):
  uppers = 0
  lowers = 0
  for char in string:
    if char.islower():
      lowers += 1
    elif char.isupper():
      uppers +=1
    else: #I added an extra case for the rest of the chars that aren't lower non upper
      pass
  return(uppers, lowers)

print(up_low('Hello Mr. Rogers, how are you this fine Tuesday?'))

4 33.

2
Damián Rafael Lattenero 28 czerwiec 2017, 05:17

Myślę, że jest to najłatwiejsze podejście do początkującego.

def up_low(s):
    a=list(s)       
    u=[]
    l=[]
    for x in a:
        if x.isupper():
            u.append(x)
        elif x.islower():
            l.append(x)
        else:
            pass  
    return u, l

u, l = up_low(s)        
print(f'No. of Upper case characters: {len(u)}')
print(f'No. of Lower case Characters: {len(l)}')
0
Tom Carrick 26 maj 2020, 15:53