str未转换为float/int,因为它未忽略'\n';就像数字python一样

str未转换为float/int,因为它未忽略'\n';就像数字python一样,python,python-3.x,file,floating-point,integer,Python,Python 3.x,File,Floating Point,Integer,我在做一些自学,遇到了这个问题 def main(): golf = open('golf.txt','w') name = not('end') while name != 'end': name = input("Enter players name or 'end' to quit ") score = float(input('Enter score ')) golf.write

我在做一些自学,遇到了这个问题

def main():

    golf = open('golf.txt','w')

    name = not('end')

    while name != 'end':
        name = input("Enter players name or 'end'  to quit ")
        score = float(input('Enter score '))
    
        golf.write(name + '\n')
        golf.write(str(score) +'\n')
        name = input("Enter players name or 'end'  to quit ")
    
    golf.close()

    golf=open('golf.txt','r')

    name = golf.readline()

    while name !='':
        score = float(golf.readline()) #ValueError#
        name = name.rstrip('\n')
    
    print(name,': ',score)
    golf.close()

main()

Enter players name or 'end'  to quit ted
Enter score 100
Enter players name or 'end'  to quit end
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-b71bcadf2947> in <module>
     27     golf.close()
     28 
---> 29 main()
     30 
     31 

<ipython-input-6-b71bcadf2947> in main()
     21 
     22     while name !='':
---> 23         score = float(golf.readline())
     24         name = name.rstrip('\n')
     25 

ValueError: could not convert string to float: 

********changed float to int below**********

Enter players name or 'end'  to quit ted
Enter score 100
Enter players name or 'end'  to quit end
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-8bffc375cbfa> in <module>
     27     golf.close()
     28 
---> 29 main()
     30 
     31 

<ipython-input-7-8bffc375cbfa> in main()
     21 
     22     while name !='':
---> 23         score = int(golf.readline())
     24         name = name.rstrip('\n')
     25 

ValueError: invalid literal for int() with base 10: '100.0\n'
def main():
golf=open('golf.txt','w')
name=not('end')
而名字!='"完":
name=输入(“输入球员姓名或“结束”退出”)
分数=浮动(输入(‘输入分数’)
golf.write(名称+'\n')
golf.write(str(score)+'\n')
name=输入(“输入球员姓名或“结束”退出”)
高尔夫
golf=open('golf.txt','r')
name=golf.readline()
而名称!='':
分数=浮动(golf.readline())#值错误#
name=name.rstrip('\n')
打印(名称“:”,分数)
高尔夫
main()
输入玩家姓名或“结束”退出ted
输入100分
输入玩家姓名或“结束”退出结束
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
27.结束
28
--->29主要内容()
30
31
大体上
21
22而名称!='':
--->23分数=浮动(golf.readline())
24 name=name.rstrip('\n')
25
ValueError:无法将字符串转换为浮点:
********将下面的float更改为int**********
输入玩家姓名或“结束”退出ted
输入100分
输入玩家姓名或“结束”退出结束
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
27.结束
28
--->29主要内容()
30
31
大体上
21
22而名称!='':
--->23 score=int(golf.readline())
24 name=name.rstrip('\n')
25
ValueError:基数为10的int()的文本无效:“100.0\n”

我得到了一个错误,我不明白。如果我将float改为int,它会让我更清楚地知道它到底不能转换什么:“10\n”。它似乎并没有像对一个数字那样忽视逃跑。尝试刷新我的内核,但一切仍然一无所获。我不必再重复字符串编号…

如果您还有任何错误或问题,请尝试此项并发布

def main():
name=“”
以open(“golf.txt”、“w”)作为高尔夫:
而名字!=“结束”:
name=输入(“输入玩家姓名或“结束”退出:”)
如果名称!=“结束”:
分数=输入(“输入分数:”)
golf.write(名称+“\n”)
高尔夫。写入(分数+“\n”)
以open(“golf.txt”)作为高尔夫:
text=golf.read().split(“\n”)
对于范围内的i(0,len(text),2):
尝试:
名称=文本[i]
分数=文本[i+1]
除索引器外:
打破
打印(f“{name}:{score}”)
main()

f-strings

使用这些函数可以在python的字符串中传递变量。 python 3.6中引入了f字符串,您可以这样编写它们

string=f“此处某物{variable}”
#在旧版本中,也可以使用“.format()”执行相同的操作
string=“Something here{}”。格式(变量)


你可以从许多来源阅读有关的信息


尝试/例外

try/except
块捕获可能发生的错误,并在错误发生时执行代码。因此,当
i+1
大于
len(text)
时,将出现
索引器
,以便捕获我使用了
try/except


中断

break
用于在不执行
break
语句后的行的情况下过早停止运行循环。这里使用它是因为当发生
索引器时,它意味着列表被解析,我们无法打印分数或名称,因此我们需要退出循环



另外,
ValueError
不再发生,因为
score
变量将始终是一个字符串,因为不使用它进行计算。但是,在创建
文本
变量后,可以将其转换为浮点。

是否尝试过
。替换(“\n”,”)
对此不熟悉。。我敢肯定它会像剥离“\n”一样工作。但这并不能回答为什么我首先要得到这面旗帜的问题。是不是我在做什么惹出了这件事?我只是想弄明白,这样就不会再发生了。发布完整的回溯,这样我可以帮你更多。发布float和int
int
float
都接受并忽略所有前导和尾随空格。不管出了什么问题,都不是新词。请记住,我只是在学习python。。所以我对解决这个问题的任何先进技术都不熟悉。这个答案与Tony Gaddis从python第6章第4版开始的方式相同,只是我添加了一个sentinel,他使用输入请求用户再次访问。这对他有用。所以它应该会起作用。。虽然我知道它的效率不如它能。哦,没问题,我也是一个初学者。也许你可以试试这个例子?还有,您使用的是哪一版本的Python?这确实有效,但并不完全有效,它让我在结束后输入分数,而不是像应该的那样停止并显示名称和分数。python的前一个版本,或者我没有学过的东西,但我不确定这里有什么内容。。比如“用”f“{}”break。。。虽然我感谢你的帮助,但我仍然不明白为什么我的解决方案不起作用。这是令人沮丧的lol。我正在使用3.7.4Great,那么这应该适合你。我将编辑我的答案来解释一些事情。