用于计算Python中一个或多个元音的单词的函数?

时间:2016-12-05 23:45:45

标签: python dictionary python-3.4

在下面的代码中,问题13a要求让函数计算字符串中有多少个元音。 (我不必在我的作业中调用这个功能。)但我打电话给它测试它,那部分是完全正确的,它的工作原理。字符串可以是大写和小写,没有标点符号。

问题13b要求创建字典。关键是字符串中的单词(字符串有多个单词)。值是该单个单词中的元音数量。问题是这样:如果单词具有至少元数量的元音,则将其附加到字典中(带有元音量的单词)此函数有两个参数。第一个是没有标点符号的字符串。第二个参数表示必须将单词添加到字典中的元音数量。教授希望我将函数13a称为算法的一部分。话虽如此,问题13a的输出是该问题中的密钥(单个单词)的值。我对这个问题遇到了麻烦,因为我不能让Python将13a的输出(一个单词的元音数)附加到字典键上。

而且在下面的代码中,我还没有在我应该使用变量i的部分工作。

这是我的代码:

    print("Question 13a")
    def vowelCount(s):
        vowels = 'aeiou'
        countVowels = 0
        for letter in s.lower():
            if letter in vowels:
                countVowels += 1
        print(countVowels)

    print("Question 13b")
    def manyVowels(t, i):
        my_string = t.split()
        my_dict = {}
        for word in my_string:
            number = vowelCount(word)
            my_dict[word].append(number)
        print(my_dict)    
    print(manyVowels('they are endowed by their creator with certain unalienable rights', 2))

如果您无法理解这个问题,那么这里是教授的指示:

问题13a(10分) 字母a,e,i,o和u是元音。没有其他字母是元音。 编写一个名为vowelCount()的函数,它将一个字符串s作为参数并返回 包含的元音数量。字符串s可以包含大写和小写字符。 例如,函数调用vowelCount(' Amendment')应返回整数3,因为 有三次出现的字母' A'和'。

问题13b(10分) 编写一个名为manyVowels()的函数,它接受一个text,t和一个整数i,as 参数。文本t仅包含小写字母和空格。 manyVowels()应该返回一个字典,其中的键都是t中包含至少i的所有单词 元音。对应于每个键的值是其中的元音数。为了充分的信用, manyVowels()必须从问题11a中调用辅助函数vowelCount()来确定 每个单词中的元音数量。例如,如果输入文本包含单词" hello",则 "你好"应该是字典中的一个键,它的值应该是2,因为有2个元音 "你好&#34 ;. 输入: 1. t,由小写字母和空格组成的文本 2. i,元音的阈值数量 返回:键值对的字典,其中键是包含至少i的t中的单词 元音和每个键的值是它包含的元音数量。 例如,以下是正确的输出。

text = 'they are endowed by their creator with certain unalienable rights' print(manyVowels(text, 3)) {'certain': 3, 'unalienable': 6, 'creator': 3, 'endowed': 3}

3 个答案:

答案 0 :(得分:1)

添加条件以仅添加具有足够音阶的单词

def vowelCount(s):
    vowels = 'aeiou'
    countVowels = 0
    for letter in s.lower():
        if letter in vowels:
            countVowels += 1
    return countVowels

def manyVowels(t, i):
    my_string = t.split()
    my_dict = {}
    for word in my_string:
        number = vowelCount(word)
        if number >= i:
            my_dict[word] = number
    return my_dict 

my_dict[word] = number行将vowelCount(word)的结果添加到您的词典中。但只有当浊音的数量至少为i

答案 1 :(得分:0)

您的代码需要进行一些调整:

第一个函数应该返回一个不打印它的值:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package chat;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
/**
 *
 * @author Allura
 */
public class ChatServer extends JFrame {
    ArrayList StreamOutput;
    Socket mainSocket;
    
    public class ClientHandler implements Runnable
    {
        Socket sock;
        BufferedReader reader;
        public ClientHandler(Socket clientSock)
        {
            try
            {
                sock = clientSock;
                InputStreamReader input = new InputStreamReader(sock.getInputStream());
                reader = new BufferedReader(input);
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
        }
        public void run()
        {
            String message;
            try
            {
                while((message = reader.readLine()) != null)
                {
                    sendToAll(message);
                }
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
        }
    }
    public static void main(String[] args)
    {
        new ChatServer().go();
    }
    public void go()
    {
        StreamOutput = new ArrayList();
        try
        {
            ServerSocket serverSock = new ServerSocket(5000);
            while(true)
            {
                mainSocket = serverSock.accept();
                PrintWriter writer = new PrintWriter(mainSocket.getOutputStream());
                StreamOutput.add(writer);
                System.out.println("Request from client accepted. Connection established.");
                Thread myRunner = new Thread(new ClientHandler(mainSocket));
                myRunner.start();
            } 
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
    public void sendToAll(String message)
    {
        Iterator it = StreamOutput.iterator();
        while(it.hasNext())
        {
            try
            {
                PrintWriter writer = (PrintWriter) it.next();
                writer.println(message);
                writer.flush();
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
        }
    }
}

第二个功能是没有正确地将带有附加值的键添加到字典中。你应该使用:

return (countVowels)

答案 2 :(得分:0)

def vowelCount(s):
  num_vowels=0
  for char in s:
    if char in "aeiouAEIOU":
      num_vowels = num_vowels+1
  return num_vowels

def manyVowels(text, i):
  words_with_many_vowels = dict()
  text_array = text.split()
  for word in text_array:
    if vowelCount(word) >= i:
       words_with_many_vowels[word] = vowelCount(word)
  return words_with_many_vowels

print(vowelCount('Amendment'))

text = 'they are endowed by their creator with certain unalienable rights'
print(manyVowels(text, 3))

输出:

3
{'creator': 3, 'certain': 3, 'endowed': 3, 'unalienable': 6}

试试here!