Проблема с созданием цикла с неопределенными переменными, проверяющего определенный список параметров, используя split, if, list и, как мы надеемся, цикл - PullRequest
0 голосов
/ 09 сентября 2018

«Бонд, Джеймс Бонд» - программа для возвращения имени Идея этой программы в том, что вы пишете свое имя, и программа возвращает ваше имя таким же образом, чтобы Джеймс Бонд представлял себя Поэтому, если вы напишите свое имя, оно должно быть возвращено как:

"Меня зовут Бонд, Джеймс Бонд"

Если вы напишите "Джеймс Бонд" как ваше имя. Однако, если вас зовут, f.ex. «Грейс Мюррей Хоппер», затем возвращается:

«Имя Хоппер, Грейс Мюррей Хоппер»

Если ваше имя оканчивается на «младшие, старшие или римские цифры (я только добавил до III)», как Генри Хакслибери III, оно возвращает:

«Зовут Хакслберри, Генри Хукслиберри III»

И если имя включает «Von, Van, De или Di (я больше не добавил)», как Ян Фон Нейман, оно возвращает:

«Зовут фон Нейман, Ян фон Нейман»

Если он включает в себя обе упомянутые ранее части, например, «Ян фон Нейман II», он возвращает:

"Зовут фон Нейман, Ян фон Нейман II

Все это работает, но код длинный, и если я хочу, чтобы он работал для более длинных имен, мне нужно добавить его вручную.

Так что я считаю, что есть способ, которым я могу написать код короче, где я не зависим от определенных переменных для каждого компонента в имени, только список, включающий «Jr, Sr и Roman Numbers» и «Van, Von, De and Di ++ ", и я надеюсь, что программа будет работать для" бесконечно "длинных имен Но я не понимаю ни функцию цикла, ни функцию «если есть (c в списке для c по имени)» Буду благодарен за любую помощь! Спасибо.

TL; DR Мне нужна помощь в понимании того, как я создаю программу, которая делает то же, что и следующая программа, но не зависит от фиксированных переменных a, b, c, d ++, Любая помощь будет оценена! Я новичок в программировании, я только делаю это в течение двух дней

name = str(input("Write your name: "))
lst = name.split(" ")
stringcount = len(lst)
check_a = list("jr" or "sr" or "Jr" or "Sr" or "I" or "II" or "III")
check_b = list("Van" or "Von" or "van" or "von" or "De" or "Di" or "de" or "di")

def namecheck(name):
    if int(stringcount) == 0:
        print("Im going to need your name, Sir.")
    elif int(stringcount) == 1:
        print("The name is " + str(name) + ", " + str(name) + ".")
    elif int(stringcount) == 2:
        a, b = name.split()
        if b == "jr" or b == "sr" or b == "Jr" or b == "Sr" or b == "I" or b == "II" or b == "III":
            print("The name is " + str(a) + ", " + str(name) + ".")
        elif a == "Van" or a == "Von" or a == "van" or a == "von" or a == "De" or a == "Di" or a == "de" or a == "di":
            print("The name is " + str(b) + ", " + str(name) + ".")
        else:
            print("The name is " + str(b) + ", " + str(name) + ".")
    elif int(stringcount) == 3:
        a, b, c = name.split()
        if c == "jr" or c == "sr" or c == "Jr" or c == "Sr" or c == "I" or c == "II" or c == "III":
            print("The name is " + str(b) + ", " + str(name) + ".")
        elif b == "Van" or b == "Von" or b == "van" or b == "von" or b == "De" or b == "Di" or b == "de" or b == "di":
            print("The name is " + str(b) + " " + str(c) + ", " + str(name) + ".")
        else:
            print("The name is " + str(c) + ", " + str(name) + ".")
    elif int(stringcount) == 4:
        a, b, c, d = name.split()
        if d == "jr" or d == "sr" or d == "Jr" or d == "Sr" or d == "I" or d == "II" or d == "III":
            if b == "Van" or b == "Von" or b == "van" or b == "von" or b == "De" or b == "Di" or b == "de" or b == "di":
                print("The name is " + str(b) + " " + str(c) + ", " + str(name) + ".")
            else:
                print("The name is " + str(c) + ", " + str(name) + ".")
        elif b == "Van" or b == "Von" or b == "van" or b == "von" or b == "De" or b == "Di" or b == "de" or b == "di":
            print("The name is " + str(b) + " " + str(c) + " " + str(d) + ", " + str(name) + ".")
        elif c == "Van" or c == "Von" or c == "van" or c == "von" or c == "De" or c == "Di" or c == "de" or c == "di":
            print("The name is " + str(c) + " " + str(d) + ", " + str(name) + ".")
        else:
            print("The name is " + str(d) + ", " + str(name) + ".")
    else:
        g_name = name.split(" ", stringcount)[stringcount-1]
        print("The name is " + str(g_name) + ", " + str(name) + ".")

namecheck(name)

Я использую "Python IDLE 3.7"

1 Ответ

0 голосов
/ 09 сентября 2018
import re

while True:
    name = input("\nEnter your name:\n").strip()

    while len(name) == 0:
        name = input("I'm going to need a name:\n").strip()

    name = name.split()


    if len(name) == 1:
        print(f"\nThe name is {name[0]}.")

    if len(name) == 2:
        print(f"\nThe name is {name[-1]}, {' '.join(name)}.")
    if len(name) > 2:
        von = re.compile(r'von|van|de|di', re.I)
        jr = re.compile(r'jr(\.)?|sr(\.)?|I+$', re.I)
        if jr.search(''.join(name)) and von.search(''.join(name)):
            abrvs = ['von','van','di','de']
            for i in range(len(name)):
                if name[i].lower() in abrvs:
                    x = i
                    print(f"The name is {' '.join(name[x:x+2])}, {' '.join(name)}")
                    break
        elif jr.search(''.join(name)):
            print(f"\nThe name is {name[-2]}, {' '.join(name)}.")
        elif von.search(''.join(name)):
            print(f"\nThe name is {' '.join(name[-2:])}, {' '.join(name)}.")
        else:
            print(f"\nThe name is {name[-1]}, {' '.join(name)}.")

Мне нравится эта концепция, этот код охватывает множество возможностей, например, что, в том числе, если у кого-то есть имя, например First Middle Von Last Jr.

Еще больше вариантов может быть рассмотрено, и лучшие методы скоро вернутся!

выход

(xenial)vash@localhost:~/python/AtBS$ python3.7 name.py 

Enter your name:
Vash the Von Stampede Jr

The name is Von Stampede, Vash the Von Stampede Jr.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...