#python #csv #input #output
#python #csv #ввод #вывод
Вопрос:
Я работаю над тематическим проектом на основе мини-гороскопа, в котором я запрашиваю день и месяц рождения пользователей и, как результат, вывожу их знак зодиака. Пока мой код просто печатает день и месяц и весь мой CSV-файл. Я пытаюсь напечатать конкретный результат на основе того, что вводит пользователь. Вот что у меня есть на данный момент.
import csv
def main():
fields = []
rows = []
with open('TableHoroscope.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile)
fields = next(csvreader)
for row in csvreader:
rows.append(row)
print("Num of rows:", csvreader.line_num)
print('Field names are:' ', '.join(field for field in fields))
user_birthday()
print_zodiac(rows)
def print_zodiac(rows):
for row in rows[:13]:
for col in row:
print(col)
print('')
def user_birthday():
date = int(input("Enter date:"))
month = input("Enter month:")
print('Birthday: ' str(date) month)
print('')
main()
Вот текстовая версия моего CSV-файла
SIGN,START,END
Aries,21-Mar,19-Apr
Taurus,20-Apr,20-May
Gemini,21-May,20-Jun
Cancer,21-Jun,22-Jul
Leo,23-Jul,22-Aug
Virgo,23-Aug,22-Sep
Libra,23-Sep,22-Oct
Scorpio,23-Oct,21-Nov
Sagittarius,22-Nov,21-Dec
Capricorn,22-Dec,19-Jan
Aquarius,20-Jan,18-Feb
Pisces,19-Feb,20-Mar
Мне бы очень хотелось получить помощь в том, как подойти к этому. Я ограничен тем, что могу сделать со своим кодом, учитывая, что мне нужно иметь четыре функции def и никаких глобальных переменных, и я все еще новичок. Спасибо!
Комментарии:
1. Вы должны предоставить CSV-файл в виде текста (а не изображения), чтобы другим было легче помогать.
2. Хорошо, спасибо за совет!
Ответ №1:
Вам нужно сравнить предоставленную пользователем дату рождения с датами в вашей rows
переменной. Вы можете сделать это, преобразовав ваши даты из вашего CSV-файла в объекты datetime. Затем вы можете позволить Python выполнить тяжелую работу и вычислить, находится ли дата между двумя датами знака звезды. Более подробную информацию о дате и времени в Python можно найти здесь. Я привел пример того, как это можно сделать, используя ваш формат файла CSV.
Код
import csv
from datetime import datetime
def main():
# Read CSV file
fields = []
rows = []
with open('TableHoroscope.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile)
fields = next(csvreader)
for row in csvreader:
rows.append([row[0], datetime.strptime(row[1], " %d-%b"), datetime.strptime(row[2], " %d-%b")])
# Calculate zodiac
print_zodiac(user_birthday(), rows)
def user_birthday():
date = input("Enter day: ")
month = input("Enter month (e.g. Jan): ")
print("Birthday: " date "-" month)
datetime_birthday = datetime.strptime(date month, "%d%b")
return datetime_birthday
def print_zodiac(birth_date, star_signs):
# Compare birth date with zodiac signs
for star_sign in star_signs:
if (star_sign[1] <= birth_date and star_sign[2] >= birth_date):
print("Your star sign is " star_sign[0])
main()
Вывод
Enter day: 30
Enter month (e.g. Jan): Mar
Birthday: 30-Mar
Your star sign is Aries