как просто кодировать и повторять код для словарной задачи - PullRequest
0 голосов
/ 03 марта 2020

Я новичок в программировании, и я пытаюсь решить это для моего задания (инструкции ниже), но у меня есть несколько быстрых вопросов:

  1. есть ли способ просто или сгущаться некоторые из этих строк, я чувствую, что я печально печатаю, когда я не знаю, есть ли другой способ, я могу иметь все это в одной строке печати, например:
print ("which state capitals do you want to know: ")
print (list(state_dictionary.keys()))

есть ли способ что может быть одним оператором печати?

def state_capitals():
    state_dictionary= {"New Hampshire":"Concord", "Massachusetts": "Boston", "Maine": "Albany", 
                         "Vermont": "M", "New York": "Albany"}
       i=0
       while i <= (len(state_dictionary)):
           print ("which state capitals do you want to know: ")
           print (list(state_dictionary.keys()))

           getcapital= input("enter state: ")
           print(state_dictionary[getcapital])

           state_dictionary.pop(getcapital)

           more= (input("Do you want to know the capital of any more states? Please enter Yes/No: "))

           if more == "yes":
               if bool(state_dictionary):
                   continue

               elif not bool (state_dictionary):
                   print ("i am out of states")
                   break

           elif more == "no":
               break


   state_capitals()

1 Ответ

1 голос
/ 03 марта 2020

Что касается операторов печати go, вы можете проверить f-строки:

somedict = {'a': 1, 'b': 2}

print(f"My dictionary is {somedict}")
My dictionary is {'a': 1, 'b': 2}

или str.format:

print("My dictionary is {}".format(somedict))

Вызов list(state_dictionary.keys()) является избыточным, list будет просто потреблять ключи, поэтому должно быть list(state_dictionary)

Вам не нужно bool, чтобы обернуть state_dictionary, так как dict имеет встроенную реализацию __bool__ который вызывается, когда вы звоните if state_dictionary.

dict.pop на отсутствующий ключ, вы получите KeyError, поэтому поймайте его, если кто-то даст вам ввод, который вы не ожидаете:

try:
    state_dictionary.pop(getcapital)
except KeyError as e:
    print("Sorry, I don't have that state! Try again")
    continue

Вам также не нужно if i <= len(dict) для вашего времени l oop. Вы могли бы сделать оператор while state_dictionary, но вы проверили это условие в l oop, поэтому я просто сделал бы while True и позволил бы вашей содержащейся условной логике c обработать все остальное.

Я бы изменил elif more == 'no' на else, если пользователь не предоставит вам правильный ввод, тогда вы можете просто закончить выполнение. Поскольку вы запрашиваете у пользователя Yes и No, а не yes и no, я бы санировал ввод, например:

more = more.lower().strip()

Это уменьшит все буквы и избавит от лишних новые строки / пробелы, которые могут быть случайно введены

...