簡體   English   中英

打印由用戶輸入生成的詞典的內容

[英]Printing the contents of a dictionary generated by user input

在大約一年前開始然后停止之后再次回到python。 我只是搞砸了字典,並通過用戶輸入和在函數中動態構建它們。

下面的代碼有效,但是將其輸出為通用詞典格式,我想做的是逐行輸出,每個鍵和值都在一行上。

def person_info(name, age, address, employer, phone):

    name = name.strip()
    age = age.strip()
    address = address.strip()
    employer = employer.strip()
    phone = phone.strip()

    full_info = {'Name:': name, 'Age': age, 'Address': address, 'Employer': employer, 'Phone': phone}
    return full_info

while True:
    name = input('Enter Name: ')
    age = input('Enter Age: ')
    address = input('Enter Address: ')
    employer = input('Enter Employer: ')
    phone = input('Enter Phone Number: ')

    if name == 'q' or age == 'q' or address == 'q' or employer == 'q' or phone == 'q':
        print("...quitting")
        break

    else:
        person = person_info(name, age, address, employer, phone)
        print(person)
        break

這樣我得到的輸出為:

{'Name:': 'Tim', 'Age': '42', 'Address': '1111 Place Drive', 'Employer': 'Earth', 'Phone': '555'}

我想在哪里

姓名:蒂姆

年齡:42

等等...

我知道,如果我有靜態定義的字典,我可以使用類似

for key, value in full_info.items():
    print(key, value)

它會給我想要的輸出,但是用我嘗試的方法似乎不起作用。 我不確定這是否與函數中定義的字典有關。

我敢肯定有一個超級簡單的答案,但是到目前為止我還找不到。

謝謝!

遍歷字典中的項目似乎可行,嘗試一下並告訴我它是否可以解決您的問題

def person_info(name, age, address, employer, phone):

    name = name.strip()
    age = age.strip()
    address = address.strip()
    employer = employer.strip()
    phone = phone.strip()

    full_info = {'Name:': name, 'Age:': age, 'Address:': address, 'Employer:': employer, 'Phone:': phone}
    return full_info

while True:
    name = input('Enter Name: ')
    age = input('Enter Age: ')
    address = input('Enter Address: ')
    employer = input('Enter Employer: ')
    phone = input('Enter Phone Number: ')

    if name == 'q' or age == 'q' or address == 'q' or employer == 'q' or phone == 'q':
        print("...quitting")
        break

    else:
        person = person_info(name, age, address, employer, phone)
        for key, value in person.items():
            print(key, value)

        break

輸出似乎是您要使用的格式

讓我們看看那些令人困惑的印刷品是從哪里來的。 首先,我將接受您的代碼,取消您的print(person)行。 查看僅input()函數的作用:

def person_info(name, age, address, employer, phone):

    name = name.strip()
    age = age.strip()
    address = address.strip()
    employer = employer.strip()
    phone = phone.strip()

    full_info = {'Name:': name, 'Age': age, 'Address': address, 'Employer': employer, 'Phone': phone}
    return full_info

while True:
    name = input('Enter Name: ')
    age = input('Enter Age: ')
    address = input('Enter Address: ')
    employer = input('Enter Employer: ')
    phone = input('Enter Phone Number: ')

    if name == 'q' or age == 'q' or address == 'q' or employer == 'q' or phone == 'q':
        print("...quitting")
        break

    else:
        person = person_info(name, age, address, employer, phone)
        # print(person) NOTICE: This is commented out for now.
        break

這是此版本的輸出:

Enter Name: a

Enter Age: b

Enter Address: c

Enter Employer: d

Enter Phone Number: e

它只是通過打印到我的屏幕上問我要輸入什么名稱/年齡/地址/雇主/電話。 當我鍵入a / b / c / d / e時,這些字符也會顯示在屏幕上,因為我鍵入了它們。 此版本完全不再打印。

現在讓我們取消對print(person)行的注釋。 現在, 除了我們剛才看到的以外 ,還必須打印此person 因此,取消注釋,然后按原樣運行代碼,您將獲得以下信息:

Enter Name: a

Enter Age: b

Enter Address: c

Enter Employer: d

Enter Phone Number: e
{'Name:': 'a', 'Age': 'b', 'Address': 'c', 'Employer': 'd', 'Phone': 'e'}

注意,唯一的補充是字典。 第一行“輸入內容”行與之前的行完全相同,完全是由於您詢問了這些input s所致。 而已。 它不會再打印任何東西,也不會輸出任何意外內容。

無法隱藏那些Enter Name: a / Enter Age: b打印內容。 但是,您可以編輯最后一個字典。 為此,您只需要將print(person)修改為:

for key, value in person.items(): print(key, value)

現在輸出變為:

Enter Name: a

Enter Age: b

Enter Address: c

Enter Employer: d

Enter Phone Number: e
Name: a
Age b
Address c
Employer d
Phone e

同樣, Enter Name: a / Enter Age: b etc的前5張照片,然后重新格式化的person詞典。 再說一次,什么也沒印刷,沒有什么意外的。

希望這可以澄清一切。

person_info函數返回一個字典。 調用print時,它將僅打印您所用的字典,因為這是您可以通過調用full_info.__str__()看到的字典的默認表示形式。 您可以通過定義一個負責打印的附加功能來進行替代顯示。 或者,將person_info包裝到一個類中,然后可以使用print(person) ,如下所示:

在此處輸入圖片說明

它不是更多的代碼,但是它具有更多的優勢,它可以確保打印輸出的順序,並且使使用更加簡單,而無需在各處使用for循環。

無論如何,其他人已經回答了您如何執行此操作,但是這里有更多詳細信息。 您可以使用函數的輸出作為對象在for循環中進行迭代,如下所示:

在此處輸入圖片說明

函數返回一個字典,您可以對其應用items方法以對其進行迭代。 由於您遠離Python,請注意,您可以使用拆包*將dict的值作為參數傳遞給函數。

請注意,dict不保證順序。 因此輸出可能無法預測,如下所示: 在此處輸入圖片說明

如果要保證輸出然后使用OrderedDict from collections import OrderedDictclass如上所述或定義打印功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM