当前位置:首页 » 编程语言 » pythonwhileeof

pythonwhileeof

发布时间: 2022-08-31 20:03:08

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开始

热点内容
pythonip合法性 发布:2025-01-16 04:48:52 浏览:75
锂电池用3a的充电器是什么配置 发布:2025-01-16 04:26:43 浏览:35
好配置为什么感觉打联盟不流畅 发布:2025-01-16 04:23:02 浏览:900
我的世界java编辑服务器信息 发布:2025-01-16 04:21:42 浏览:507
android拨号上网 发布:2025-01-16 04:13:25 浏览:97
安卓网络编程怎么用 发布:2025-01-16 03:04:45 浏览:899
湖南it服务器怎么样 发布:2025-01-16 03:01:01 浏览:248
图中两种配置哪个好 发布:2025-01-16 02:59:28 浏览:582
如何解开密保密码 发布:2025-01-16 02:57:44 浏览:23
中国银行查询密码是什么 发布:2025-01-16 02:33:20 浏览:795