#python
#python
Вопрос:
Пожалуйста, потерпите меня, я новичок в Python.
Первая функция, которую я написал, заключалась в том, чтобы вводить в нижний регистр любые символы верхнего регистра в строке, которая прошла через нее, которая работает сама по себе, игнорируя любые не прописные алфавитные символы ASCII.
Однако, когда я пытаюсь использовать ее в своей второй функции (которая ДОЛЖНА использовать функцию нижнего регистра для любых пользовательских вводов, а затем вставлять ее в файл) У меня остался файл, содержащий строку, которая изначально была передана без какой-либо функции нижнего регистра.
import os.path
from os import path
def lowercaser(text):
text = [ord(c) for c in text]
length = len(text)
i = 0
while length != i:
if 65 <= text[i] <= 90:
text[i] = text[i] 32
i = 1
text = [chr(c) for c in text]
text = "".join(text)
def does_rfid_list_exist():
if path.exists("rfidList.txt"):
print("File found!")
else:
print("File was not located! Creating new file.n")
f = open("rfidList.txt", "a ")
user_input = input("Please enter your name!n")
lowercaser(user_input)
f.write(user_input)
f.close()
does_rfid_list_exist()
Я понятия не имею, почему они не работают вместе, и я разбил ее, насколько смог. Есть идеи?
Комментарии:
1. код выглядит необычно, единственная проблема, которую я вижу, заключается в том, что, хотя вы вызываете функцию, которую вы не обновляете
user_input
,text
также возвращаете функцию из нижнего регистраuser_input = lowercaser(user_input)
, попробуйте использовать это2. ознакомьтесь со строковыми методами в документах Python. Вы можете найти там интересующий вас метод.
Ответ №1:
Похоже, вы ожидаете этого вызова:
lowercaser(user_input)
чтобы изменить значение user_input
. Он этого не сделает. Причина в том, что строковые значения неизменяемы, что означает, что каждый раз, когда вы «меняете» строку, вы создаете новую. Исходный объект string не затрагивается. Таким образом, в этом случае переменная user_input
указывает на определенную строку при вызове lowercaser
. Как только эта функция вернется, user_input
она все равно будет указывать на ту же строку. Будет существовать какая-то другая строка, которая будет результатом обработки, выполненной функцией.
Обычно это работает так, что lowercaser
функция возвращает новую строку в качестве возвращаемого значения функции, например:
user_input = lowercaser(user_input)
Таким образом, вы указываете user_input
на новую строку, строку, которая lowercaser
была создана для вас. Но чтобы заставить это работать, вы должны исправить свою lowercaser
функцию, чтобы вернуть ее результат. Поэтому вам также нужно добавить return text
в качестве последней строки вашей lowercaser
функции.
Ответ №2:
Сначала вам нужно научиться определять функцию. Вы можете изучить это в w3school или в любом другом источнике или книге.
Я публикую решение здесь, но оно не будет продуктивным для вас.
Поместите
return text
в последней строке функции. И поместите
user_input=lowercaser(user_input)
вместо
lowercaser(user_input)
Ответ №3:
код выглядит необычно, единственная проблема, которую я вижу, заключается в том, что даже при вызове функции вы не обновляете user_input
user_input = lowercaser(user_input)
Помимо этого, возвращает текст из функции нижнего регистра return text
import os.path
from os import path
def lowercaser(text):
text = [ord(c) for c in text]
length = len(text)
i = 0
while length != i:
if 65 <= text[i] <= 90:
text[i] = text[i] 32
i = 1
text = [chr(c) for c in text]
text = "".join(text)
return text #### Change - 1
def does_rfid_list_exist():
if path.exists("rfidList.txt"):
print("File found!")
else:
print("File was not located! Creating new file.n")
f = open("rfidList.txt", "a ")
user_input = input("Please enter your name!n")
user_input = lowercaser(user_input) #### Change - 2
f.write(user_input)
f.close()
does_rfid_list_exist()
Использование lower()
на user_input
import os.path
from os import path
def lowercaser(text):
text = [ord(c) for c in text]
length = len(text)
i = 0
while length != i:
if 65 <= text[i] <= 90:
text[i] = text[i] 32
i = 1
text = [chr(c) for c in text]
text = "".join(text)
return text #### Change - 1
def does_rfid_list_exist():
if path.exists("rfidList.txt"):
print("File found!")
else:
print("File was not located! Creating new file.n")
f = open("rfidList.txt", "a ")
user_input = input("Please enter your name!n")
user_input = user_input.lower() ### Change - 2
f.write(user_input)
f.close()
does_rfid_list_exist()
Комментарии:
1. вы также можете использовать
lower()
функцию изначально, а также наuser_input
Ответ №4:
Братан, нет оператора return, и даже если бы он был, переменная нигде не сохраняется. Это означает, что текст (локальная переменная, доступ к которой возможен только внутри функции, из которой она исходит), недоступен, передается или сохраняется в функции does_rfid_list_exist() . Другая проблема заключается в том, что user_input , который, по-видимому, является данными, которыми вы пытаетесь манипулировать, не изменяется после функции lowercaser(), потому что ничего не возвращается, и данные ни в чем не хранятся. Что я хотел бы сделать, чтобы исправить это
Чтобы сделать так, чтобы user_input
верните текст после text = «».join(текст) и замените строчный регистр (user_input) на user_input = строчный регистр (user_input)
Я думаю, вы запутались и подумали, что user_input — это какой-то общедоступный класс.