pythonwhileeof
㈠ python 怎么实现类似C语言 while(scanf()!=EOF)的输入操作
while(scanf()!=EOF)的作用是,当scanf返回EOF时退出循环读取输入的操作。
也就是当遇到文件结尾,如果用作标准输入时就是当在终端输入了EOF时结束操作。
对于此,python并没有相同功能的系统函数而是需要由自己判断。
whileTrue:
try:
s=raw_input()
except:
break
代码解析:
whileTrue:
s=raw_input()
这个就相当于C的while(1)scanf();
也就是不停的读输入,没有判断EOF的情况。
在python中,无法通过raw_input()的返回值判断是否有EOF。python是通过抓取异常来知EOF的,于是,通过try except的方法,当出现except的时候,就是到了EOF,这时退出循环,也就是
except:
break
这样就达到了和C中同样的效果。
㈡ python将百分制成绩转换为等级制输出
1、def main():
score = float(input('请输入成绩: '))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print('对应的等级是:', grade)
if __name__ == '__main__':
main()
2、也可以将五分制构造出一个字符串'EEEEEEDCBAA',用以下方法实现这个功能:
score = int(input())
degree = 'EEEEEEDCBAA'
if (score > 100 or score < 0):
print('Data error!')
else:
print(degree[score//10])
(2)pythonwhileeof扩展阅读:
1、关于整数的格式化输出
num01,num02=200,300
print("八进制输出:0o%o,0o%o"%(num01,num02))。
print("十六进制输出:0x%x,0x%x"%(num01,num02))。
print("十进制输出:%d,%d"%(num01,num02))。
print("200的二进制输出:",bin(num01),"300的二进制输出为:",bin(num02))。
2、#浮点数输出
%f 保留小数点后面六位有效数字,%.3f 保留三位小数。
%e 保留小数点后面六位有效数字,指数形式输出。%.3e 保留3位小数位,使用科学计数法。
%g 保留六位有效数字的前提下,使用小数方式,否则用科学计数法。%3g保留3位有效数字,使用小数或科学计数法。
㈢ python的一个异常EOf Error我不明白是什么意思,ctrl+d也不太明白怎么回事
比如说我写了如下代码,循环获取用户输入:
1
2
3
4
5
6
7
8
9
10
lst = []
s = 's'
while(True):
try:
s = input('please input:')
lst.append(s)
except Exception as ex:
print(ex)
break
print(lst)
当用户按ctrl+d的时候就表示停止输入,python就会显示EOF异常
㈣ 我编PYTHON的时候遇到了unexpected EOF while parsing错误,具体见补充。
一般情况下,我们是这么读文件的:for line in open("xxx"): print line但是有时候,我们想自己控制读取每一行,即open得到fp后,readline(),何时是退出呢?经过查找N多文档,得到一种很隐晦的说法是当返回空串时表示退出。于是写法是:fp = ....while True: line = fp.readline() if len(line)==0: break #..... Do what you want其实,可以不用len判断,而用not判断。Python中,空串的not返回True,即not line时为读到EOF,如下:fp = ....while True: line = fp.readline() if not line: break #..... Do what you want
㈤ python 怎么写通过逻辑指针进行数据切片,找出读入数据中最新价是偶数的行
对于Perl的一行式perl程序来说,选择要输出的、要删除的、要插入/追加的行是非常容易的事情,因为print/say决定行是否输出/插入/追加/删除。虽然简单,但对于广泛应用在sed的示例还是可以拿到这里来讨论一番。
因为输出/删除/插入/追加行都是通过print/say在不同条件下的操作,所以本文只会介绍输出操作,删除/插入/追加其实都是同样的原理。
输出第一行
$ perl -lne 'print;exit' file.log
输出第13行
$ perl -ne 'print if $. == 13' file.log
输出前10行
$ perl -ne 'print if $.<=10' file.log$ perl -ne 'print if 1..10' file.log$ perl -ne '$. <= 10 && print' file.log$ perl -ne 'print; exit if $. == 10' file.log
输出最后一行
$ perl -ne '$last=$_;END{print $last}' file.log
或者通过文件结尾eof来判断:
$ perl -ne 'print if eof' file.log
这里的eof函数的作用是:如果下一行读取到了文件尾部eof,就返回1。否则
输出倒数10行
这个实现起来可能稍显复杂,但逻辑很简单:向一个数组中添加10行元素,如果数组元素个数超过了10,则剔除数组的第一个元素。
$ perl -ne 'push @lines,$_;if(@lines>10){shift @lines;}END{print @lines}' /etc/passwd
这里是shift一个元素来保证"窗口"的稳定性:最多只有10个元素。另一种稳妥的方式是直接切片,从数组中取最后10个元素:
$ perl -ne 'push @lines,$_;@lines = @lines[@lines-10..$#lines] if @lines>10;END{print @lines}' /etc/passwd
输出倒数第11行到倒数第2行
有了前一个示例作为基础,这个需求很容易实现。
保留一个11行元素的数组,最后输出前10个元素即可。
$ perl -ne 'push @a,$_;shift @a if @a>11;END{print @a[0..$#a-1]}' /etc/passwd
输出文件的第偶数行
这个很简单,只需判断行号的奇偶性即可。
$ perl -ne 'print if $. % 2 == 0' file.log$ perl -ne 'print unless $. % 2' file.log
输出能匹配的行
$ perl -ne 'print if /regexp/' file.log
输出两个匹配之间的行
$ perl -ne 'print if /regexp1/../regexp2/' file.log
输出匹配行的前一行
只需将每行保留到变量中,如果当前行匹配了,则输出上一行保存的值。
$ perl -ne '/regexp/ && $last && print $last;$last = $_' file.log
如果想要输出匹配的前M行,只需把这些数量的行保存到数组中,并不断地shift剔除就可以。
输出匹配行的后一行
$ perl -ne '$p && print; $p = /regexp/' file.log
Perl中正则表达式的匹配操作返回的是成功与否的布尔真假,所以$p = /regexp/表示如果匹配了,则$p的值为真,否则为假。
如果$p为真,则下一行将被输出,且继续对输出行进行匹配,如果输出行仍然能匹配,则继续输出下一行。
上面的过程可以改写成逻辑更为清晰的一行式:
$ perl -ne 'if($p){print;$p=0}++$p if /regexp/' file.log
上面的$p是一个状态标记变量,如果匹配成功,就标记为真值,并在输出的时候重置状态变量。
还可以采用另一种处理逻辑:自己编写从<>读取行的while循环,如果匹配了就继续读入下一行。因为读入的下一行可能继续匹配,所以在while循环中使用redo逻辑回到while循环的开头。
$ perl -se 'while(<>){if(/$reg/){if(eof){ exit; }print $_ = <>;}redo if /$reg/;}' -- -reg="REGEXP" file.log
输出匹配行及其后5行
上面采用状态标记变量$p,这个状态标记变量可以更深入地使用。
如果匹配了,则$p设置为5,然后输出后面的行时对$p自减。
$ perl -ne 'if($p){print;$p--}if(/regexp/){$p = 5;print};' file.log
连续行去重
$ perl -ne 'next if "$line" eq "$_";print $line = $_;' file.log
㈥ Python提示SyntaxError: unexpected EOF while parsing 请问我的程序错在哪里
a=eval(num[0])下标从0开始