Python >> Python Tutorial >  >> Python

Hallo, Name oder Welt in Python

Die Herausforderung

Definieren Sie eine Methode hello das returns „Hallo Name!“ zu einem bestimmten name , oder sagt Hallo, Welt! wenn Name nicht angegeben ist (oder als leerer String übergeben wird).

Angenommen, dieser name ist ein String und es prüft auf Tippfehler des Benutzers, um einen Namen mit einem ersten Großbuchstaben (Xxxx) zurückzugeben.

Beispiele:

hello "john" => "Hello, John!" hello "aliCE" => "Hello, Alice!" hello => "Hello, World!" <em># name not given</em> hello "" => "Hello, World!" <em># name is an empty String</em>

Die Lösung im Python-Code

Möglichkeit 1:

def hello(name=''):
    return f"Hello, {name.title() or 'World'}!"
 zurück 

Möglichkeit 2:

def hello(name=''):
    return "Hello, {}!".format(name.title() if name else 'World')
 

Möglichkeit 3:

def hello(name = ""):
    nameNow = ""
    if name == "":
        return "Hello, World!"
    j = 0
    for i in name:
        if j == 0:
            temp1 = i.upper()
            nameNow = nameNow + temp1
            j += 1
            pass
        else:
            temp1 = i.lower()
            nameNow = nameNow + temp1
            pass
        pass
    return "Hello, " + nameNow + "!"
    pass
 

Testfälle zur Validierung unserer Lösung

import test
from solution import hello

@test.describe("Fixed Tests")
def fixed_tests():
    @test.it('Basic Test Cases')
    def basic_test_cases():
        
        tests = (
            ("John", "Hello, John!"),
            ("aLIce", "Hello, Alice!"),
            ("", "Hello, World!"),
        )
        
        for inp, exp in tests:
            test.assert_equals(hello(inp), exp)

        test.assert_equals(hello(), "Hello, World!")

@test.describe("Random Tests")
def random_tests():

    from random import randint, choice
    
    NAMES = [
        "James", "Christopher", "Ronald", "Mary", "Lisa", "Michelle",
        "John", "Daniel", "Anthony", "Patricia", "Nancy", "Laura",
        "Robert", "Paul", "Kevin", "Linda", "Karen", "Sarah", "Michael",
        "Mark", "Jason", "Barbara", "Betty", "Kimberly", "William", "Donald",
        "Jeff", "Elizabeth", "Helen", "Deborah", "David", "George", "Jennifer",
        "Sandra", "Richard", "Kenneth", "Maria", "Donna", "Charles", "Steven",
        "Susan", "Carol", "Joseph", "Edward", "Margaret", "Ruth", "Thomas",
        "Brian", "Dorothy", "Sharon", ""
     ]
    
    
    def create_test_case():
        return "".join(c.lower() if randint(0, 200) % 3 else c.upper() for c in choice(NAMES))
    
    reference = lambda n='', d='World': "Hello, %s!" % (n or d).title()
    
    for _ in range(100):
        test_case = create_test_case()
        @test.it(f"testing for hello({test_case})")
        def test_case():
            test.assert_equals(hello(test_case), reference(test_case))