Python - CSV-файл только для записи заголовков
Я пытаюсь написать файл CSV, который берет случайные имена, оценки, буквенные оценки и создает файл CSV. Когда я запускаю его на PyCharm, я создаю именно это, но когда я проверяю созданный файл CSV, он пуст, за исключением заголовков.
import random
import csv
fname = ['Red','Jose','Mikasa','Sakura','Naruto','Momoka','Zero','Ryu','Ken','Geralt','Greg','Mika','Momo','Xenovia','John','Gary','Lance','Eren','Duke','Claire']
lname = ['Akerman','Haruno','Johnson','Rivia','Valentine','Redfield','Kennedy','Juarez','Jameson','Williams','Miller','Davis','Thompson','Garcia','Remington','Hayabusa','Strife','Armstrong','Kojima','Chambers']
grade = ['A','B','C','D','F']
def ranint():
value = random.randint(60, 100)
print(value)
def ranname():
first = random.choice(fname)
last = random.choice(lname)
print(first,last)
fname.remove(first)
lname.remove(last)
def rangrade():
fgrade = random.choice(grade)
print(fgrade)
with open('grades.csv','w',newline='') as fp:
a = csv.writer(fp,delimiter=',')
data = [['Name', 'Assignment1', 'Assignment2', 'Assignment3', 'Assignment4', 'Quiz1', 'Quiz2', 'Quiz3', 'Quiz4', 'Total_Grade'],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()]]
a.writerows(data)
2 ответа
Решение
Ваши функции ничего не возвращают, они просто печатают случайное значение. Добавить return
оператор в конце каждой функции. И вы должны объединить first
с last
перед возвратом значения, например с join
,
import random
import csv
fname = ['Red','Jose','Mikasa','Sakura','Naruto','Momoka','Zero','Ryu','Ken','Geralt','Greg','Mika','Momo','Xenovia','John','Gary','Lance','Eren','Duke','Claire']
lname = ['Akerman','Haruno','Johnson','Rivia','Valentine','Redfield','Kennedy','Juarez','Jameson','Williams','Miller','Davis','Thompson','Garcia','Remington','Hayabusa','Strife','Armstrong','Kojima','Chambers']
grade = ['A','B','C','D','F']
def ranint():
value = random.randint(60, 100)
#print(value)
return value
def ranname():
first = random.choice(fname)
last = random.choice(lname)
#print(first,last)
fname.remove(first)
lname.remove(last)
return "; ".join([first, last])
def rangrade():
fgrade = random.choice(grade)
#print(fgrade)
return fgrade
with open('grades.csv','w',newline='') as fp:
a = csv.writer(fp,delimiter=',')
data = [['Name', 'Assignment1', 'Assignment2', 'Assignment3', 'Assignment4', 'Quiz1', 'Quiz2', 'Quiz3', 'Quiz4', 'Total_Grade'],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()],
[ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), rangrade()]]
a.writerows(data)
Ваши функции не имеют оператора возврата.
Например:
def ranname():
first = random.choice(fname)
last = random.choice(lname)
print(first,last)
fname.remove(first)
lname.remove(last)
Должно быть что-то вроде:
def ranname():
first = random.choice(fname)
last = random.choice(lname)
print(first,last)
return (first, last)
fname.remove(first)
lname.remove(last)