Проблема чтения файла CSV (без использования модуля CSV), программа не предлагает возможность ввода, где это необходимо - PullRequest
0 голосов
/ 04 мая 2020

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

Я НЕ МОГУ ИСПОЛЬЗОВАТЬ модуль CSV, поскольку мой курс в Uni еще не охватывал модуль, и профессор предпочел бы, чтобы мы подали заявку основные c концепции чтения файлов. Мне больше не нужно, так как я уже получил основное решение.

Пример данных из этого файла:

province                    | country    | 1/2/20 | 1/3/20 | 1/4/20|
--------------------------------------------------------------------
                            | Afghanistan|   0    |   1    |   2   |  
                            | Albania    |   0    |   0    |   1   |
Australian Capital Territory| Australia  |   0    |   3    |   5   |
New South Wales             | Australia  |   4    |   5    |   6   |
                            | Austria    |   0    |   3    |   4   |

(Для справки, данные мне нужны использовать это: https://portland-my.sharepoint.com/: x: / g / personal / msharma8-c_ad_cityu_edu_hk / ES7eUlPURzxOqTmRLmcxVEMBRGlLq6REGHx0hs_bNilPTw? e = 6Ybsm c) * 101 * 101 * 101 * 101 * 101 * мой * 101 * 101 * мой * 101 * 101 * мой * 101

7 * * * * * Теперь я не могу предлагать опцию ввода для провинции.

with open('covid19.csv', 'r') as f:
        for line in f:
            # this next line is not working ffs ahhh, it doesnt seem to understand what i need
            if (country == line.split(',')[1]) and len(line.split(',')[0])>1:
                while True:
                    province = raw_input('input a province/district here: ')
                    if province.lower() in province_list:
                        break

Я также попытался:

if (country == line.split(',')[1]) and (line.split(',')[0]) != '':

Для дальнейшего ознакомления, вот весь кусок кода, который я поместил в функцию:

with open('covid19.csv', 'r') as f:
    country_list = []
    province_list = []
    date_list = ((f.readline().split(','))[4::])
    date_list = [date[0:-2] for date in date_list if date[-4:]=='2020'] # to put all the dates in the same format
    for line in f:
        #list of all countries and provinces
        province_list.append(line.split(',')[0].lower())
        country_list.append(line.split(',')[1].lower())

    while True:
        country = raw_input("input a country here: ")
        if country.lower() in country_list: 
            break
    with open('covid19.csv', 'r') as f:
        for line in f:
            # this line is not working ffs ahhh, it doesnt seem to understand
            if (country == line.split(',')[1]) and len(line.split(',')[0])>1:
                while True:
                    province = raw_input('input a province/district here: ')
                    if province.lower() in province_list:
                        break
    while True:
        date = raw_input('input a date in m/d/yy: ')
        if date in date_list:
            print 'You have selected the date:',date
            break
        else:
            print 'please enter a date in a valid format'

1 Ответ

0 голосов
/ 05 мая 2020

Вы должны убедиться, что ваше состояние оценено правильно.

(country == line.split(',')[1]) and len(line.split(',')[0])>1

В Python, and имеет более высокий приоритет, чем >, поэтому в приведенной выше строке Python оценивается

(country == line.split(',')[1]) and len(line.split(',')[0])

и затем определяет, будет ли результат больше 1. В Python True и False равны 1 и 0 соответственно, поэтому условие никогда не может быть истинным.

(country == line.split(',')[1]) and (len(line.split(',')[0]) > 1)

должен делать то, что вы хотите.

...