首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算地铁时间

计算地铁时间
EN

Stack Overflow用户
提问于 2022-07-15 09:46:04
回答 1查看 59关注 0票数 0

有一个问题,我试图回答,我有一个问题的最后输出。

问题:

此文件中所有站点的名称为7行。在线路上,地铁车站的名称已按顺序和空间排列。(请注意,站点名称不包含空格字符。)

两站之间的火车旅行时间是我们打算上火车的车站所需的2分钟,离开我们要走的车站需要12分钟。我们需要改变线路的时间也是10分钟。请注意,在两条线交叉的站点上,您可以通过两条线,而不需要等待换行。

莫森不想自己从Digikala买东西,也不想坐地铁去购物。走完路后,他明白了他应该从地铁上的车站出发,然后下车。

我们希望您能编写一个程序,计算Mohsen到达购物场所所需的最短时间。

文件:

代码语言:javascript
复制
Tajrish Gheytariyeh Shahid_Sadr Gholhak Doctor_Shari'ati Mirdamad Shahid_Haghani Shahid_Hemmat Mosalla-ye_Emam_Khomeini Shahid_Beheshti Shahid_Mofatteh Shohada-ye_Haftom-e_Tir Taleghani Darvazeh_Dowlat Sa'di Emam_Khomeini Panzdah-e_Khordad Khayyam Meydan-e_Mohammadiyeh Shoush Payaneh_Jonoub Shahid_Bokharaei Ali_Abad Javanmard-e_Ghassab Shahr-e_Rey Palayeshgah Shahed-Bagher_Shahr Haram-e_Motahhar-e_Emam_Khomeini Kahrizak
Farhangsara Tehranpars Shahid_Bagheri Daneshgah-e_Elm-o_San'at Sarsabz Janbazan Fadak Sabalan Shahid_Madani Emam_Hossein Darvazeh_Shemiran Baharestan Mellat Emam_Khomeini Hasan_Abad Daneshgah-e_Emam_Ali Meydan-e_Hor Shahid_Navab-e_Safavi Shademan Daneshgah-e_Sharif Tarasht Tehran_Sadeghiyeh
Gha'em Shahid_Mahallati Aghdasiyeh Nobonyad Hossein_Abad Meydan-e_Heravi Shahid_Zeynoddin Khajeh_Abdollah-e_Ansari Shahid_sayyad-e_Shirazi Shahid_Ghodousi Sohrevardi Shahid_Beheshti Mirza-ye_Shirazi Meydan-e_Jahad Meydan-e_Hazrat-e_Vali_Asr Teatr-e_Shahr Moniriyeh Mahdiyeh Rahahan Javadiyeh Zamzam Shahrak-e_Shari'ati Abdol_Abad Ne'mat_Abad Azadegan
Shahid_Kolahdouz Nirou_Havaei Nabard Pirouzi Ebn-e_Sina Meydan-e_Shohada Darvazeh_Shemiran Darvazeh_Dowlat Ferdowsi Teatr-e_Shahr Meydan-e_Enghelab-e_Eslami Towhid Shademan Doctor_Habibollah Ostad_Mo'in Meydan-e_Azadi Bimeh Shahrk-e_Ekbatan Eram-e_Sabz
Shahid_Sepahbod_Qasem_Soleimani Golshahr Mohammad_Shahr Karaj Atmosfer Garmdarreh Vardavard Iran_Khodro Chitgar Varzeshgah-e_Azadi Eram-e_Sabz Tehran_Sadeghiyeh
Shahid_Sattari Shahid_Ashrafi_Esfahani Yadegar-e_Emam Marzdaran Shahrak-e_Azmayesh Daneshgah-e_Tarbiat_Modarres Meydan-e_Hazrat-e_Vali_Asr Shohada-ye_Haftom-e_Tir Emam_Hossein Meydan-e_Shohada Amir_Kabir Shahid_Rezaei Be'sat Kiyan_Shahr Dowlat_Abad
Meydan-e_San'at Borj-e_Milad-e_Tehran Boostan-e_Goftegou Daneshgah-e_Tarbiat_Modarres Modafean-e_Salamat Towhid Shahid_Navab-e_Safavi Roudaki Komeyl Beryanak Helal_Ahmar Mahdiyeh Meydan-e_Mohammadiyeh Mowlavi Meydan-e_Ghiyam Chehel_Tan-e_Doulab Ahang Basij

以下是我迄今所做的工作:

代码语言:javascript
复制
# tmp = []
results = []

def find_in_list_of_list(mylist, char):
    for sub_list in mylist:
        if char in sub_list:
            return [mylist.index(sub_list), sub_list.index(char)]
    raise ValueError("'{char}' is not in list".format(char=char))


with open("metro.txt", "r") as file:
    lines = [line.split(" ") for line in file.read().split("\n")]

    for i in range(int(input())):
        destination = input().split(" ")

        for line in lines:
            if destination[0] in line and destination[1] in line:
                start = line.index(destination[0])
                stop = line.index(destination[1])
                time = (stop - start) * 2
                results.append(17 + 12 + time)

            elif destination[0] in line and destination[1] not in line:
                start = line.index(destination[0])
                stop = len(line)

                line1 = lines.index(line)
                line2 = find_in_list_of_list(lines, destination[1])

                # tmp.append(line2[1])
                # tmp.append(stop)
                # tmp.append(start)
                time = (stop - line2[1])
                results.append(17 + 12 + time + 10)
            else:
                continue

# print(tmp)
for item in results:
    print(item)

我的输出是错误的:

代码语言:javascript
复制
31
35
43
45
47
46

样本输入:

代码语言:javascript
复制
5
Tajrish Gheytariyeh
Tajrish Gholhak
Tarasht Eram-e_Sabz
Aghdasiyeh Sohrevardi
Towhid Baharestan

样本输出:

代码语言:javascript
复制
31
35
43
45
51

描述:

第一次从"Tajrish“到”Qaytaria“的旅行:

在塔杰里什车站进站和上火车需要17分钟。从一号线的“塔伊里什”站到达卡塔里亚需要2分钟,从“盖亚提耶”站出来需要12分钟。因此,这次旅行的总时间等于: 17 +2+ 12 = 31。

第二次从"Tajrish“到”Gholhak“的旅行:

在塔杰里什车站进站和上火车需要17分钟。从1号线的"Tajrish“站到"Ghalhak”站需要6分钟,离开"Ghalhak“站需要12分钟。因此,这次旅行的总时间等于: 17 +6+ 12 = 35。

从"Tarsh“到"Eram Sabz”的第三次旅行:

在"Tarsh“车站进站和上火车需要17分钟。从2号线的"Taresh“站到”德黑兰(Sadeghie)“站需要2分钟,在”德黑兰(Sadegh)“站,从2号线转到5号线需要10分钟。从第5线的“德黑兰(Sadeghie)”站到"Eram Sabz“站需要2分钟,离开"Eram Sabz”站需要12分钟。因此,这次旅行的总时间等于: 17 +2+ 10 +2+ 12 = 43。

从"Aghdiseh“到”Sohrvardi“的第四次旅行:

在"Aqdasiyeh“车站进站和上车需要17分钟。从3号线的"Aqdasiyeh“站到达"Sohrvardi”站需要16分钟,从"Sohrvardi“站出来需要12分钟。因此,这次旅行的总时间等于: 17 + 16 + 12 = 45。

从"Tawheed“到”Baharistan“的第五次旅行:

在"Tawheed“车站进站和上火车需要17分钟。从4号线的"Tawheed“站到"Darvaze Shemiran”站需要10分钟,在"Darvaze Shemiran“站从第4线转到第2线需要10分钟。从第5线的"Darvaze Shemiran“站到达"Baharistan”站需要2分钟,离开"Baharistan“站需要12分钟。因此,这次旅行的总时间等于: 17 + 10 + 10 +2+ 12 = 51。

EN

回答 1

Stack Overflow用户

发布于 2022-07-15 11:18:19

我找不到您代码中的错误所在,但是我认为重写代码可能会有所帮助。

代码语言:javascript
复制
results = []

with open("metro.txt", "r") as file:
    lines = [line.split(" ") for line in file.read().split("\n")]

    for i in range(int(input())):
        destination = input().split(" ")

        for index, line in enumerate(lines):
            if destination[0] in line:
                # start is a tuple - (index of line in lines, index of station in line)
                start = (index, line.index(destination[0]))
            if destination[1] in line:
                stop = (index, line.index(destination[0]))

            # This else is useless, when we are at the end of a for block,
            # we are automatically calling continue
            # else:
            #     continue
        # Calculate travel time and append it to results here, right after the for loop

for item in results:
    print(item)

我们现在知道了线路的确切位置,(您可以访问这样的站点:lines[start[0]][start[1]])。在我看来,现在计算距离会更容易,而且不需要find_in_list_of_list(mylist, char)

如果你想我可以给你提供充分的例子,但我认为你想做它一个人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72992099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档