如何在python中创建一个打印出大写单词的函数

时间:2015-11-03 21:34:11

标签: python

我对使用python编程非常陌生,但我真的很愿意学习它。我的讲师强烈建议这个社区,所以我试试看。

好吧所以我有一个带大写和小写单词的句子,我想编写一个只打印出以大写字母开头的单词的函数。

这是我到目前为止所得到的:

s = """Hey! Hast du schon gesehen,
    wie einfach es ist, in Python zu programmieren?
    Es ist viel einfacher als on den meisten
    anderen Sprachen, die man so kennt."""

def print_all_Uppercased(s):
    for word in s:
        if word[0].isupper():
            print word

print_all_Uppercased(s)

事情是,这只打印出单个大写字母。我哪里做错了?

2 个答案:

答案 0 :(得分:5)

你非常接近。

for word in s.split():
    if word[0].isupper()

你不会迭代单词,而是字母。 split首先获得所需的结果。

你也可以将这个功能从一个函数修改为一个list comprehension

[word for word in s.split() if word[0].isupper()]

如果您想要做的不仅仅是立即将它们打印出来,那将是非常方便的。

答案 1 :(得分:5)

你真的如此亲密!这里的问题是for word in s遗憾地只选择s中的每个字符,而不是s中的每个字

如果您在其上运行此循环并拥有print内容,则您会看到结果只是字符。

for word in s: print word

# Prints:
H
e
... # (omitting the rest of the characters)

所以你的函数只是检查每个单独的字符检查该字符是否为if word[0].isupper():大写(记住每个字符可以被认为是带有一个元素的列表),然后打印它。 / p>

要解决此问题,您需要首先从字符串list中制作s个字词。

这可以通过使用split() s轻松完成,http://sqlfiddle.com/#!9/a981f/1 isupper()将空格上的字符串拆分并返回包含单词的列表。然后,您可以应用def print_all_Uppercased(s): for word in s.split(): if word[0].isupper(): print word 来检查列表中的每个字词。

Hey!
Hast
Python
Es
Sprachen,

现已成功打印:

#include <stdio.h>
#include <io.h>
#include <winsock2.h>  
#define snprintf _snprintf


static void sendmail_write(
    const int  sock,
    const char *str,
    const char *arg
    ) {
    char buf[4096];

    if (arg != NULL)
        snprintf(buf, sizeof(buf), str, arg);
    else
        snprintf(buf, sizeof(buf), str);

    send(sock, buf, strlen(buf), 0);
}

static int sendmail(
    const char *from,
    const char *to,
    const char *subject,
    const char *body,
    const char *hostname,
    const int   port
    ) {

    struct hostent *host;
    struct sockaddr_in saddr_in;
    int sock = 0;


    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        return -1;
    }


    sock = socket(AF_INET, SOCK_STREAM, 0);
    host = gethostbyname(hostname);

    saddr_in.sin_family = AF_INET;
    saddr_in.sin_port = htons((u_short)port);
    saddr_in.sin_addr.s_addr = 0;

    memcpy((char*)&(saddr_in.sin_addr), host->h_addr, host->h_length);

    if (connect(sock, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) == -1) {
        return -2;
    }



    sendmail_write(sock, "HELO %s\n", "Testname");    // greeting****************

    sendmail_write(sock, "MAIL FROM: %s\n", from);    // from

    sendmail_write(sock, "RCPT TO: %s\n", to);      // to    

    sendmail_write(sock, "DATA\n", NULL);    // begin data

    // next comes mail headers
    sendmail_write(sock, "From: %s\n", from);


    sendmail_write(sock, "To: %s\n", to);


    sendmail_write(sock, "Subject: %s\n", subject);

    sendmail_write(sock, "\n", NULL);

    sendmail_write(sock, "%s\n", body);    // data

    sendmail_write(sock, ".\n", NULL);    // end data
    sendmail_write(sock, "QUIT\n", NULL);    // terminate

    closesocket(sock);//*******************************

    return 0;
}


int main(int argc, char *argv[]) {

    int ret = sendmail(
        "support@mydomain.com",  // from - put an email address here
        "atomail", // to - put an email address here
        "test",
        "this would be cool if it worked!",
        "iputmyisphere",//this is my ISP -use your own
        25
        );

    if (ret != 0)
        fprintf(stderr, "Failed to send mail (code: %i).\n", ret);
    else
        fprintf(stdout, "Mail successfully sent.\n");

    return ret;
}