2016-08-07 11 views
0

Мне нужно отсортировать введенные пользователем имена без использования метода сортировки списка. это то, что у меня есть до сих пор, но у меня проблемы с определением «один», «два» и «три». Мне нужна программа, чтобы пройти через каждое письмо, чтобы убедиться, что оно действительно по алфавиту. может ли кто-нибудь помочь?Как перечислять в алфавитном порядке таким образом?

name1=str(input("Enter name #1: ")) 
name2=str(input("Enter name #2: ")) 
name3=str(input("Enter name #3: ")) 

one = name1[0].upper() + name1[1].upper() + name1[2].upper() 
two = name2[0].upper() + name2[1].upper() + name2[2].upper() 
three = name3[0].upper() + name3[1].upper() + name3[2].upper() 

if one < two and two < three: 
    print("These names in alphabetical order are: ", name1, name2, name3) 
elif one < two and three < two: 
    print("These names in alphabetical order are: ", name1, name3, name2)  
elif two < three and three < one: 
    print("These names in alphabetical order are: ", name2, name3, name1) 
elif two < one and one < three: 
    print("These names in alphabetical order are: ", name2, name1, name3) 
elif three < two and two < one: 
    print("These names in alphabetical order are: ", name3, name2, name1) 
else: 
    print("These names in alphabetical order are: ", name3, name1, name2) 

благодарит заранее! Редактировать Моя проблема заключается в определении «одного», «двух» и «трех», чтобы пробегать все буквы на входе. прямо сейчас он пробегает первые три буквы, но если я добавлю следующую букву, и только трехбуквенное имя дадут ему ошибки. и если я использую функцию len, он сообщает мне целое число

+1

Это пахнет как домашнее задание. Почему вам не разрешено использовать функцию «сортировка списка»? что ты уже испробовал? Каковы проблемы, с которыми вы столкнулись. –

+0

Существует метод isalpha для тестирования, если строка по-настоящему соответствует алфавиту –

+1

Что такое 'one',' two' и 'three' for? Зачем сравнивать первые три буквы? Кроме того, вы можете сделать 'one = name1 [: 3] .upper()' или (вероятно, больше похоже на то, что вам нужно) просто 'one = name1.upper()'. И вместо «один <два и два <три» вы можете сделать «один <два <три». _Also_, из 'one <два и три <два', как вы заключаете' name1

ответ

0

Мне нужна программа, чтобы пройти через каждое письмо, чтобы убедиться, что оно действительно в алфавитном порядке.

Это то, что сравнение строк все равно. Проблема с вашим кодом заключается в том, что вы ограничиваете one, two и three первыми тремя буквами входных строк. Вместо этого вы должны просто загладить все имя и сравнить их.

name1 = input("Enter name #1: ") # no need for str(...) 
... # same for name2, name3 

one = name1.upper() # uppercase whole nam, not just first three letters 
... # same for two, three 

answer = "These names in alphabetical order are: " # don't repeat this X times 
if one < two < three: # comparison chaining 
    print(answer, name1, name2, name3) 
elif one < three < two: 
    print(answer, name1, name3, name2) 
elif ...: 
    # a whole bunch more 
else: 
    print(answer, name3, name2, name1) 
+0

это работало отлично. Спасибо. Я думаю, что я был слишком застрял в первом письме. –

0

Вы можете использовать старый хороший алгоритм сортировки

letters = [name1.upper(),name2.upper(),name3.upper()] 
for i in range(len(letters)): 
    for j in range(i,len(letters)): 
      if letters[i] > letters[j]: 
        letters[i],letters[j] = letters[j],letters[i] 
+0

Переменные «буквы» - это список, содержащий имена в верхнем регистре. В python, если вы сравните два слова, он будет сравнивать все. например, выражение '' ABCDE '<' ABCDF'' yeilds 'True' – Prasanna

+0

Извините, так запутано по имени' letters', что я не видел, что вы в верхней части слова. Тем не менее для этого потребуется второй проход, чтобы найти правильную позицию для фактических имен в зависимости от положения версии с верхним регистром. Вместо этого вы можете использовать 'letters = [(name1.upper(), name1), ...]' и использовать тот же алгоритм для сортировки этих кортежей, а затем извлечь исходные имена. –

+0

Yup, который действительно сохранит оригинальные имена. Но я предположил, что после того, как имена будут отсортированы, OP сможет извлечь имена и не опубликует полное решение. Должен ли я отредактировать мой ответ или оставить его таким образом? Я новичок в обществе StackOverflow. – Prasanna